在列出我的数组中的所有元素后,如何摆脱显示的零点?

时间:2018-04-06 02:53:19

标签: java arrays drjava

我必须制作一个程序,打印出一个向后填充随机数的数组元素,但它在我的变量后打印出零?我认为这与我的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("");
    }
}

5 个答案:

答案 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>