【发布时间】:2018-12-08 19:41:16
【问题描述】:
我想要做的:使用 Scanner 从键盘读取字符串,直到使用特定字符串来打破无限循环。将它们保存在一个arrayList中,然后将它们传递到一个长度为循环迭代次数的数组中
public class InputReader {
ArrayList<Integer> list = new ArrayList<>(0);
int arrayLength;
String readInput;
Scanner ir = new Scanner(System.in);
void readInput() {
for (int m=0; ;m++) {
readInput = ir.nextLine();
if ("q".equals(readInput)) {
//problem: arrayLength does not have the value of m outside the loop
arrayLength = m;
break;
}
System.out.println("arrayLength: "+arrayLength);
intInput = Integer.parseInt(readInput);
list.add(intInput);
}
}
int[] array = new int[arrayLength];
}
}
在循环内部 arrayLength 工作得很好,但在循环外部它没有价值,因为我初始化它没有价值。正因为如此,
System.out.println("array.length: "+array.length);
总是返回 0 并且编译器返回这个错误:
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
当我尝试在数组中保存整数时。 1) 如何使变量的更改保持在循环之外?
2) 奇怪的观察 A:
int[] array = new int[list.size()];
尽管 list.size() 具有正确的值,即使在循环之外(通过打印检查),也会返回相同的错误。
和 B:如果我在另一个方法而不是在类中创建我的数组,然后在方法中使用它,则代码可以工作,但是这样我不能在我的其他类中使用它,尽管使用了继承或参数。
void giveOutput() {
int[] array = new int[list.size()];
public void giveOutput () {
System.out.println("list.size()"+list.size());
System.out.println("array.length:"+array.length);
for (int n=0; n<list.size(); n++) {
array[n] = list.get(n);
System.out.print("array["+n+"]:"+array[n]+" ");
}
}
}
这会创建一个工作数组,但我不能将它交给我的 Minsort extends InputReader 子类,在该子类中对其进行排序,从而导致问题编号
3) 如何使用在其他类的方法中初始化的变量?这样我的程序也可以运行。
(我是一个血腥的初学者,昨天开始认真使用java,我的第一个成功项目是我从头开始编写的Minsort-Algorithm,请见谅。提前感谢。)
【问题讨论】:
-
您的意图在代码中有点混乱(仔细查看大括号),所以是的,行 `int[] array = new int[arrayLength];` 在方法 @987654326 之外@,因此,它是一个实例变量,一旦创建对象就会被创建和初始化。