为什么我的java程序每次都打印为零?

时间:2016-02-07 02:37:18

标签: java arrays for-loop

我需要获取一个大小为x的数组(其中包含从x开始然后下降到1的数字),然后使用大小为y的新数组(可能与x的大小相同,也可能不同) ),从数组x打印出随机数到数组y。我写了程序并运行正常,但由于某些原因在输出的随机数列表中,数字0将显示出来。有人知道为什么会这样吗?这是我的代码:

import java.util.Random;
public class Prog1A 
{
    public static void main(String[] args)
    {
        System.out.println("Program 1A, Christopher Moussa, masc1574");
        Random randGen = new Random();
        int[] arr_1 = new int[8];
        for (int i = arr_1.length - 1; i >= 0; i--)
        {
            arr_1[i] = arr_1[i];
        }
        int[] arr_2 = new int[6];
        for (int i = 1; i <= arr_2.length; i++)
        {
            System.out.print(randGen.nextInt(arr_1.length) + " ");
        }
    }
}

非常感谢任何反馈,谢谢。

2 个答案:

答案 0 :(得分:1)

嗯,你没有对这个循环做任何事情。你实际上是在整个数组中为自己分配一个变量。另外,我不喜欢你编写循环条件的方式,但我的偏好不是这里的问题。

for (int i = arr_1.length - 1; i >= 0; i--)
    {
        arr_1[i] = arr_1[i]; //This code does nothing
    }

然后你创建arr_2[],但你永远不会为变量分配任何内容。 我继续编辑你的代码,我会解释一些事情。

import java.util.Random;
public class Prog1A 
{
    public static void main(String[] args)
    {
        Random randGen = new Random();
        int[] arr_1 = new int[8];
        int[] arr_2 =  new int[6];

        System.out.println("Program 1A, Christopher Moussa, masc1574");

        //Assigns a random number to each member of arr_1
        for (int i = 0; i < arr_1.length; ++i)
        {
            arr_1[i] = randGen.nextInt(arr_1.length);
        }

        //Copies arr_1 values to arr_2
        for (int i = 0; i < arr_2.length; ++i) //Counting up [0 to 5]
        {
            arr_2[i] = arr_1[i];
        }

        for (int i = 0; i < arr_2.length; ++i)
        {
            System.out.print(arr_2[i] + " ");
        }
    }
}
  1. 始终(如果可能)在函数/类/程序的开头声明所有变量。它使代码更清晰,并帮助您识别可能发生的错误。

  2. 保持循环参数一致。从0开始并始终上升,或从最后一个值开始并向下移动。它消除了再次出错的可能性。我更喜欢从0开始,但它取决于你,只要它干净且有效。

  3. 除非你初始化一个数组,否则它将是空的。如果您尝试从中进行打印,则很可能会看到零。

答案 1 :(得分:0)

只需在结果中添加一个,数组的长度为8.使用当前代码,您将返回0到7之间的随机数.sextInt方法永远不会返回提供的整数值的上限。您可以通过将arr_1.length替换为其他数字(例如10)来自行测试,然后移除+ 1。您会注意到它最多只会返回数字9,而0将是返回的最小数字。

 System.out.print((randGen.nextInt(arr_1.length) + 1) + " ");