我正在学习,我有问题,我应该从用户那里获得一个IP地址,然后从最右边的数字迭代它,如果那个数字等于或大于256,那么我应该迭代这个数字在此之前的-1位置,此位置为0.
我试图通过简单地制作原始代码来解决它,这只能通过用户输入进行一次,之后我会添加更多的复杂性,如原始的多次迭代,错误检查并将代码放入propper .java文件和类。 我明白使用ArrayList会更好,但我打算稍后添加ArrayList而不是simple Array。
当我不想迭代“我”时,有没有人可以告诉我为什么带有条件的循环放在outofarraybound异常?
for (i = 3; i >= 0; i--) {
pomoc = zasobnikIPadresa[i];
if (pomoc > 255) {
zasobnikIPadresa[i] = 0;
zasobnikIPadresa[i-1] = pomoc + 1;
}
}
到目前为止,我能够分析我对阵列没有适当的知识,我认为我的问题的解决方案将帮助我完成我的问题并更好地理解它们。
到目前为止,这是完整的代码:
package com.ipadresa.classes;
import java.util.Scanner;
public class Hlavni {
public static void main(String[] args) {
int i = 0;
int[] zasobnikIPadresa = new int[4];
Scanner ctecka = new Scanner(System.in);
for (i = 0; i < zasobnikIPadresa.length; i++) {
zasobnikIPadresa[i] = ctecka.nextInt();
}
System.out.print("Original IP adress: ");
for (i = 0; i < zasobnikIPadresa.length; i++) {
if (i < zasobnikIPadresa.length - 1) {
System.out.print(zasobnikIPadresa[i] + ".");
} else {
System.out.print(zasobnikIPadresa[i]);
}
} System.out.println();
int pomoc = 0;
for (i = 3; i >= 0; i--) {
pomoc = zasobnikIPadresa[i];
if (pomoc > 255) {
zasobnikIPadresa[i] = 0;
zasobnikIPadresa[i-1] = pomoc + 1;
}
}
System.out.print("Final IP adress: ");
for (i = 0; i < zasobnikIPadresa.length; i++) {
if (i < zasobnikIPadresa.length - 1) {
System.out.print(zasobnikIPadresa[i] + ".");
} else {
System.out.print(zasobnikIPadresa[i]);
}
}
ctecka.close();
}
}
答案 0 :(得分:6)
由于这个for循环条件for (i = 3; i >= 0; i--) {
,变量i
被允许== 0,然后让我们看看当i
为0时数组索引在这里:
zasobnikIPadresa[i-1] = pomoc + 1;
它是-1
。哎哟。
答案 1 :(得分:2)
如果条件
怎么办?pomoc > 255
时为真
i==0.
然后你将访问zasobnikIPadresa [-1],即越界。