Java 在两个数组中循环

Java 在两个数组中循环,java,arrays,loops,Java,Arrays,Loops,我有两个不同的数组,一个是双精度的数组,一个是字符串数组 public class tester { private final static String TIME[]={ "8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00" }; public static void m

我有两个不同的数组,一个是双精度的数组,一个是字符串数组

 public class tester {

        private final static String TIME[]={ "8:00", "9:00", "10:00", "11:00", 
            "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00"  };


        public static void main(String[] args){
            ArrayList<Double> stat = new ArrayList<>();
            stat.add(1.0);
            stat.add(2.0);
            stat.add(3.0);
            stat.add(4.0);
            stat.add(5.0);
            stat.add(6.0);
            stat.add(7.0);
            stat.add(8.0);
            stat.add(9.0);
            stat.add(10.0);
            stat.add(11.0);
            stat.add(12.0);
            int i = 0;
            for (String time : TIME) {
                System.out.println(time+" "+stat.get(i));
                i++;
            }
for(int i=0;i

但是您必须确保这些数组具有相同的长度

我将首先检查这两个数组的长度是否相同。
if (TIME.length!=stat.size()) {
    // handle error
}

int count = stat.size();
for (int i=0; i<count; ++i) {
    double d = stat.get(i);
    String s = TIME[i];
}
然后使用for循环进行迭代:

final int timeLength = TIME.length;
if (timeLength != stat.size()) {
    //something may not be right
}
for (int i = 0; i < timeLength; i++) {
    System.out.println(time[i]+" "+stat.get(i));
}
final int timeLength=TIME.length;
如果(时间长度!=统计大小()){
//有些事情可能不对
}
for(int i=0;i< /代码> 你也需要考虑长度部分。您只需要迭代到可能包含数组和列表的最大长度

所以,你可以先找到它们之间的较短长度。然后迭代到该长度:-

int lower = TIME.length < stat.size()? TIME.length: stat.size();

for (int i = 0; i < lower; i++) {
    System.out.println(TIME[i] + " : " + stat.get(i);
}
int lower=TIME.length

这是迭代两个数组的一部分

现在我想说,如果您必须同时迭代两个数组,只需使用属性创建一个
,您已经为其创建了数组


因此,创建一个具有以下属性的类:-
time
stats
。然后创建一个
列表
。并迭代类实例列表。

如果长度不相等怎么办?这是一个强烈的指示,表明您应该定义和使用一个包含时间和stat的类,并迭代该类的实例。@MarvinLabs——我想JIT会注意到这个值是否没有变化,并将结果内联……但这是一个公平的选择point@MarvinLabs-当然,但是,问题并不是问优化代码,而是问正确性。我们可以做一些其他事情,但这会使答案过于复杂。我这样做了,但是不喜欢。如果有一个可以动态创建迭代器的帮助器类就好了。在上面的示例中,迭代器会在构造期间检查长度是否相等,并且每次迭代都会返回一个包含时间和状态的对象。不,不是。这是一个不必要的微优化,可能不会优化给定该长度的任何内容都是一个字段,即使它是一个方法,它也将由JIT内联。@MarvinLabs您是对的,中间操作数在每次迭代中都会求值(除非JIT将其内联)但是把它放在循环之外不是一个好的做法。如果你仔细想想,你会发现正确的时机来做这件事。但不是每次…stat数组中的值是我已经计算过的类数据的计算数组have@MarcRasmussen..好的。那么你可以使用第一个解决方案。如果数组的长度不同,那么找到较短的长度。如果它们相同,则没有问题。。
String.format("%1$d:00", (int) myDouble);
final int timeLength = TIME.length;
if (timeLength != stat.size()) {
    //something may not be right
}
for (int i = 0; i < timeLength; i++) {
    System.out.println(time[i]+" "+stat.get(i));
}
int lower = TIME.length < stat.size()? TIME.length: stat.size();

for (int i = 0; i < lower; i++) {
    System.out.println(TIME[i] + " : " + stat.get(i);
}