dmi*_*ada 2 java loops parallel-arrays
我是个乞丐,这是我的第一个问题.我已经在网上搜索了答案,而且我很短暂.任何你能提供的任何帮助都会让我脸上露出笑容!
我正在编写一个同时循环两个数组的程序.这些是从用户定义的字符串转换的char数组,因此它们的长度可能不同.以下是我的代码中当前设置的方式.
for(int i = 0; i < charArray1.length; i++)
    {   
        char keyChar = charArray1[i];
        char messageChar = charArray2[i];
    }
考虑上面的例子.让我们说:
charArray1 = {'A','B','C','D'}和
charArray2 = {'1','2','3','4','5','6','7}
目前,这种情况会让我失去一个超出范围的例外.我希望看到的是循环返回charArray1的开头,而另一个循环继续到charArray2的结尾.
如果我要打印它,它可能看起来像下面.
A1,B2,C3,D4,A5,B6,C7 
任何帮助将不胜感激.我已经有一段时间了.
您希望从循环中获得的迭代次数是最长数组的长度.你可以用它Math.max(charArray1.length, charArray2.length);
然后你想在索引处获取数组项i,但是当它通过数组的长度时循环.你可以用它arr[i%arr.length].
结合:
int m = Math.max(charArray1.length, charArray2.length);
for (int i = 0; i < m; ++i) {
    char keyChar = charArray1[i%charArray1.length];
    char messageChar charArray2[i%charArray2.length];
}
编辑:
该模运算符(a%b)允许您将后剩下的金额a通过b.
例如,用b=3:
a   a%3
0    0
1    1
2    2
3    0
4    1
5    2
...
你可以看到,如果a和b与整数a>=0和b>0,然后a%b将永远范围:
0 <= a%b < b
这是长度数组的可接受索引的范围b.
你需要做的是在 for 循环中创建一个 for 循环
for(int i = 0; i < charArray2.length; i++)
    {   
        for(int j = 0; j < charArray1.length; j++)
            char keyChar = charArray1[j];
        char messageChar = charArray2[i];
    }
这个循环遍历内部循环,一旦到达结束,就会再次循环,直到到达结束,charArray2此时外部 for 循环将终止,从而退出循环。还有其他方法可以做到这一点,但这是一种让像您这样的初学者更容易理解的方法。
然后,如果您希望它完全打印出 A1,B2,... 而无需两个 for 循环,您可以执行以下操作。如果您要处理大量数字,两个 for 循环并不是最好的方法,因为两个 for 循环就像我认为的n^2那样,而if语句只是一个常量1。
int max = Math.max(charArray1.length, charArray2.length);
int j = 0;
for (int i = 0; i < max; ++i) {
    if(j==charArray1.length)
      j = 0;
    else
      j++;
    char keyChar = charArray1[j];
    char messageChar charArray2[i];
}
| 归档时间: | 
 | 
| 查看次数: | 1206 次 | 
| 最近记录: |