我必须制作一个程序,打印出一个向后填充随机数的数组元素,但它在我的变量后打印出零?我认为这与我的for循环有关,但是当我尝试更改它时,我会收到java.lang.ArrayIndexOutOfBoundsException
错误。
编辑我还注意到第一个打印元素始终为零。我真的不认为这是一个问题,但是可能导致什么呢?
import java.util.*;
public class EZD_printBackwards
{
static int vars[] = new int[10];
static int backwards()
{
Random rand = new Random();
int bkwds = vars[0];
for (int a = 0; a < 10; a++)
{
vars[a] = rand.nextInt(100)+1;
}
for (int x = 10; x > 0; x--)
{
System.out.println("Element " + x + " is " + vars[x] );
}
return bkwds;
}
public static void main(String Args[])
{
int option;
Scanner kbReader = new Scanner(System.in);
do
{
System.out.println(backwards());
System.out.print("Type 1 to run again. Type 0 to end the program.");
option = kbReader.nextInt();
while(option !=1 && option !=0)
{
if (option != 1 && option != 0)
{
System.out.print("Please enter 1 to run again or 0 to end the program.");
option = kbReader.nextInt();
}
}
}while(option==1);
System.out.println("");
}
}
答案 0 :(得分:2)
在您的示例中,vars
的大小为10.第二个for循环从索引x = 10
开始,该索引大于最后的vars索引,因为数组索引从零开始。要解决此问题,您应该在for循环中使用此条件:
for (int x = vars.length -1; x >= 0; x--)
{
System.out.println("Element " + x + " is " + vars[x] );
}
答案 1 :(得分:1)
你有两个问题:
FIRST =&gt;对于循环越界
你想要通过10个元素,因此你的
for (int x = 10; x > 0; x--)
应该是
for (int x = 9; x >= 0; x--)
0..9是10个元素,
也是如此for (int a = 0; a < 10; a++)
到
for (int a = 0; a < 9; a++)
SECOND ==&gt;最后0点
那是因为你做了
System.out.println(backwards());
而不是
backwards();
答案 2 :(得分:1)
您正在返回&#34; bkwds&#34;的值,并且您正在初始化&#34; bkwds&#34;与vars [0],我想在java中编译器用0初始化数组的所有值,
换句话说,你的问题在System.out.println(backwards());
用
删除它backwards();
它应该工作!
修改
你的外表是否超出界限要么用这个
替换它 for (int a = 0; a < 10; a++)
或 这样做
for (int a = 9; a > 0; a--)
答案 3 :(得分:1)
当数组从零开始索引时,请更改为
System.out.println("Element " + x + " is " + vars[x-1] );
<强>输出强>
Element 10 is 31
Element 9 is 63
Element 8 is 82
Element 7 is 46
Element 6 is 67
Element 5 is 24
Element 4 is 3
Element 3 is 27
Element 2 is 37
Element 1 is 13
修改强>
并改变这个
System.out.println(backwards());
到
backwards();
由于此方法的返回值无用且未使用,因此请更改此方法以返回void
答案 4 :(得分:1)
数组的范围是从0到包括9.然而,你的for循环从10开始并下降到索引1.它应该从9开始并下降到索引零。但是,这并不能解释随机打印0!这些零的原因是你有一个int bkwds,你可以在你的函数开头设置为vars [0]。但是,因为它没有被初始化,所以它将被设置为0(int的默认值)在你的main中,你在print语句中调用该函数,我想这将继续打印你返回的错误,无用的初始化变量:)< / p>