首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >填充字符串数组,而不必输入每个条目

填充字符串数组,而不必输入每个条目
EN

Stack Overflow用户
提问于 2012-06-23 01:06:47
回答 6查看 710关注 0票数 0

我正在我当前的布局文件中创建一个微调器,这个微调器的内容范围从1.0 mA,一直到100.0 mA。每增加一个增量,就增加0.1 mA。除了手动输入字符串数组文件中的每个条目之外,有没有一种方法可以使用某种循环来填充这个字符串数组?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-23 01:10:19

创建一个SpinnerAdapter并将其连接到微调器。然后,您可以循环调用adapter.add(item1)、adapter.add(item2)等...

也可以看看这个:How can I add items to a spinner in Android?

例如,

代码语言:javascript
运行
复制
Spinner spinner = (Spinner) findViewById(R.id.spinner);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, YOUR_STRING_ARRAY);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);
票数 1
EN

Stack Overflow用户

发布于 2012-06-23 01:17:21

您可以使用BigDecimal来完成此操作。下面是一个从1.0到3.0将它们打印到屏幕上的示例。您可以根据需要进行调整。

通过使用BigDecimal,您将不会在内部或外部出现舍入误差,这意味着如果您将其扩展到更大的数字,您就不会遇到这些问题。Big Decimal就是为这种事情设计的。

代码语言:javascript
运行
复制
import java.util.*;
import java.math.*;
class Amps {
    public static void main(String[] args) {
        List<String> strs = new ArrayList<String>();
        BigDecimal max = new BigDecimal("3.0");
        BigDecimal inc = new BigDecimal("0.1");
        for(BigDecimal cur = new BigDecimal("1.0"); cur.compareTo(max) <= 0; cur = cur.add(inc)) {
            strs.add(cur.toString() + "mA");
        }
        System.out.println(strs);
    }

}

如果您想知道速度的问题,使用BigDecimal实际上比使用格式化程序更快。下面是一个小测试,它来回运行它们,样本大小约为1,000,000个字符串:

代码语言:javascript
运行
复制
import java.math.*;
import java.text.*;
import java.util.*;
class Amps {
    public static void main(String[] args) {
        usingBig();
        usingPrim();
        usingBig();
        usingPrim();
        usingBig();
        usingPrim();
        usingBig();
        usingPrim();
        usingBig();
        usingPrim();
    }

    static void usingBig() {
        long then = System.currentTimeMillis();
        List<String> strs = new ArrayList<String>(1000000);
        BigDecimal max = new BigDecimal("100000.0");
        BigDecimal inc = new BigDecimal("0.1");
        for(BigDecimal cur = new BigDecimal("1.0"); cur.compareTo(max) <= 0; cur = cur.add(inc)) {
            strs.add(cur.toString() + "mA");
        }
        long now = System.currentTimeMillis();
        System.out.println("Big: " + (now - then));
    }

    static void usingPrim() {
        long then = System.currentTimeMillis();
        DecimalFormat formatter = new DecimalFormat("0.0");
        List<String> strs = new ArrayList<String>(1000000);
        float max = 100000.0f;
        float inc = 0.1f;
        for(float cur = 1.0f; cur <= max; cur += inc) {
            strs.add(formatter.format(cur) + "mA");
        }
        long now = System.currentTimeMillis();
        System.out.println("Prim: " + (now - then));
    }

}

结果是:

代码语言:javascript
运行
复制
C:\files\j>java Amps
Big: 1344
Prim: 5172
Big: 1047
Prim: 4656
Big: 1172
Prim: 4531
Big: 1125
Prim: 4453
Big: 1141
Prim: 4547

即使没有DecimalFormatter,原语仍然比BigDecimal慢。如果我注释掉DecimalFormatter及其格式调用(使用cur + "mA"添加到列表中),请参见下面的结果。

代码语言:javascript
运行
复制
C:\files\j>java Amps
Big: 1328
Prim: 1469
Big: 1093
Prim: 1438
Big: 1375
Prim: 1562
Big: 1204
Prim: 1500
Big: 1109
Prim: 1469
票数 2
EN

Stack Overflow用户

发布于 2012-06-23 01:11:06

你当然可以:

代码语言:javascript
运行
复制
String[] data = new String[991];

int i = 0;
for(float f=1.0f; f<=100.0f; f+=0.1f) {
    data[i++] = "" + f + "A";
}

XML:如果希望将此数组放入文件中,则可以使用任何编程语言一次性生成此数组。例如,下面的java代码将为您做一些繁重的工作:

代码语言:javascript
运行
复制
import java.text.*;
public class T {
  public static void main(String[] args) {
  DecimalFormat formatter = new DecimalFormat("0.0");

    for(float f=1.0f; f<=100.0f; f+=0.1f) {
      System.out.println("\"" + formatter.format(f) + "A\",");
    }
  }
}

编译/运行它:javac T.java,然后运行java T > output.txt。现在在文本编辑器中打开output.txt文件并复制/粘贴您的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11160918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档