我被困在Java编码任务上。我应该为现有程序创建三个方法(askInfo
,copyInfo
和setArray
),该程序可以让用户将数字输入到数组中,然后组织并打印该数组。 AskInfo
将该数组作为参数,从用户处请求索引值,并以int形式返回输入数字的数量。 CopyInfo
将值复制到具有返回的数字长度的新数组中,并且setArray
对数字进行排序。
我的问题是,根据分配,askInfo
仅应返回输入数字的数量。因此,它将方法打印的数组值留在方法内部,使得copyInfo
无法检索这些值并将其复制到第二个数组中。您如何建议我无法编辑主要方法而克服了这个问题?
主要方法:
int[] tempArray = new int[100];
System.out.println("Type in numbers. Type zero to quit.");
int amountOfNumbers = askInfo(tempArray);
int[] realArray = new int[amountOfNumbers];
copyInfo(realArray, tempArray);
setArray(realArray);
printArray(realArray);
我的代码:
public static int askInfo (int[] tempArray) { //asks for numbers and assigns them to tempArray, returns the length of realArray
int count = 0;
Scanner reader = new Scanner(System.in);
for (int i =0;i<tempArray.length;i++){
System.out.print((i+1)+". number: ");
tempArray[i] = reader.nextInt();
count++;
if (tempArray[i] == 0) //stops asking for values if user inputs 0
return count;
}
return count;
}
public static int[] copyInfo (int[] realArray, int[] tempArray) { //copies tempArray's values to realArray
for (int i=0; i<realArray.length;i++){
realArray[i] = tempArray[i];
}
return realArray;
}
public static int[] setArray (int[] realArray) { //sorts realArray from largest value to smallest
for (int i=0;i<realArray.length;i++){
for (int j=i+1;j<realArray.length;j++){
if (realArray[i]<realArray[j]){
int tmp = realArray[i];
realArray[i] = realArray[j];
realArray[j] = tmp;
}
}
}
return realArray;
}
现在程序确实可以编译,但是数组realArray
和tempArray
的值超出askInfo
方法的范围为空。请记住,我无法编辑主要方法-我只能编辑我编写的三种方法。
答案 0 :(得分:1)
您编写的代码本身就是正确的。您不需要任何修改。
你说
从askInfo方法之外获取的数组
realArray
和tempArray
的值为null
那句话完全是不正确。
int[] tempArray
数组正在askInfo
内部进行有效更改。
并且int[] realArray
被有效地填充。
我建议您休息一下,然后重新思考。
答案 1 :(得分:1)
是我还是您想念您的printArray方法?除此之外,代码看起来还不错。数组是引用类型,因此,即使方法中添加了其中的值,所有方法也都可以访问同一TempArray
答案 2 :(得分:-1)
在Java中,数组变量是对数组对象的引用。这意味着,当您在tempArray[i] = reader.nextInt();
中分配askInfo()
时,它将修改tempArray
中名为main()
的数组的内容。有关更多信息,请阅读Are arrays passed by value or passed by reference in Java?。