我在书中看到了以下代码。我知道void方法不能返回值。当我运行代码时,编译器无法打印修改后的数组,而在本书中,显示的是值。如何修复代码以打印修改后的数组?
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
System.out.println("The values of original array are:");
for(int value: array)
{
System.out.print(value + "\t");
}
modifyArray(array);
System.out.println("The values after modified array are:");
for (int value:array)
{
System.out.print(value + "\t");
}
}
public static void modifyArray(int[] b)
{
for (int counter=0; counter<=b.length; counter++)
{
b[counter] *=2;
}
}
答案 0 :(得分:6)
如果我没记错的话,您的ArrayIndexOutOfBoundsException
方法应该会modifyArray()
。将方法中的for循环更改为
for (int counter=0; counter<b.length; counter++) // use < not <=
{
b[counter] *=2;
}
答案 1 :(得分:1)
for (int counter=0; counter<=b.length; counter++)
此代码运行6次,因此尝试访问不存在的数组的第6个元素。它必须是ArrayIndexOutOfBoundsException错误。 将以上行改为:
for(int counter = 0; counter<b.length; counter++)
这会有效!
答案 2 :(得分:1)
代码实际上有效但循环方法中有一个错误导致IndexOutOfBound异常,这是正确的版本。
public static void modifyArray(int[] b)
{
for (int counter=0; counter<b.length; counter++)
{
b[counter] *=2;
}
}
该方法返回void但您可以读取数组内的修改值,因为您作为方法参数传递数组的引用而不是数组的副本。这是您应该开始阅读的Java语言的一个非常基本的概念 Passing Information to a Method or a Constructor