在这个方法中,我试图从我传入方法的文件中创建一个数组(该文件有一个数字列表),然后我想返回数组。但是当我尝试运行我的代码时,弹出错误,它找不到符号“nums”。
我很肯定我有一个范围问题,但我不知道如何解决这个问题。
如何修复此代码以便正确返回数组?
这是我的代码:
//reads the numbers in the file and returns as an array
public static int [] listNumbers(Scanner input) {
while (input.hasNext()) {
int[] nums = new int[input.nextInt()];
}
return nums;
}
答案 0 :(得分:1)
这里至少有两个问题。
首先,nums
在while
循环中定义,当你退出循环时它会超出范围。这是编译错误的原因。如果要在循环结束后返回它,则需要将定义移出循环外。
然而,还有另外一个问题,就是在你读完整个文件之前,你不知道你的数组需要多大。创建ArrayList<Integer>
并向其添加元素,然后在读完整个文件后将其转换为数组(如果需要)会容易得多。或者只返回列表,而不是数组。
public static List<Integer> listNumbers(Scanner input) {
List<Integer> nums = new ArrayList<Integer>();
while (input.hasNext()) {
nums.add(input.nextInt());
}
return nums;
}
答案 1 :(得分:0)
List<Integer> list = new ArrayList<Integer>();
while(input.hasNext())
{
list.add(input.nextInt());
}
int size = list.size();
int[] nums = new int[size];
int counter = 0;
for(Integer myInt : list)
{
nums[counter++] = myInt;
}
return nums;
此解决方案未经过测试,但可以为您提供一些方向。这也与西蒙所指的一致。