值仅返回0

时间:2013-04-17 16:54:41

标签: java arrays

我是编程的新生,我的大学正在教授Java。

我从我的作业中做了这个练习,并且无法弄清楚为什么它只返回0。

在我决定发布这里之前,过去几天我一直在寻找互联网。 我在某处读到如果我用它启动变量(i7 = 0),Java永远不会改变值0,但即使我改为i7 = 1,它也会返回0并且数组不再是8个索引,而是7。 另外,在我用键盘输入数字的那一刻,是不是应该开始填充阵列? 也许我误会了什么? 如何让它显示最小的数字?

谢谢!

//读取8个索引的数组并找到最小的数字

我有:

    int array1[] = new int[8];
    int i7;
    int smallest = array1[0];

    System.out.println("Type 8 numbers.");

    for (i7 = 0; i7 < array1.length; i7++)
    {
       array1[i7] = keyboard.nextInt();

       if (array1[i7] < array1[0])
       {
           smallest = array1[i7];
       }
    }
    System.out.println("The smallest number is " + smallest);

4 个答案:

答案 0 :(得分:2)

您将最小化初始化为array1 [0],但仍未从用户输入初始化 - 即它从0开始。

现在,为了解决上述问题,您需要与{[1}}中的数组[0]进行比较而不是最小值 - 但这不是正确的修复方法。

if

替代解决方案。

int array1[] = new int[8];
int i7;
System.out.println("Type 8 numbers.");
array1[0] = keyboard.nextInt();

int smallest = array1[0]

for (i7 = 1; i7 < array1.length; i7++)
{
   array1[i7] = keyboard.nextInt();

   if (array1[i7] < smallest)
   {
       smallest = array1[i7];
   }
}
System.out.println("The smallest number is " + smallest);

我更喜欢第一个。

答案 1 :(得分:1)

下面我已经用问题的位置或原因注释了你的代码:

int array1[] = new int[8];  // create an array of 8 ints. all are initially 0.
int i7;
int smallest = array1[0]; // set smallest to 0.

System.out.println("Type 8 numbers.");

for (i7 = 0; i7 < array1.length; i7++)
{
   array1[i7] = keyboard.nextInt(); // potential problem, what is 'keyboard'?

   if (array1[i7] < array1[0]) // compare last read against first read
   {
       smallest = array1[i7];
   }
}
System.out.println("The smallest number is " + smallest);

现在,我将采取以下措施来解决问题:

int array1[] = new int[8];  // create an array of 8 ints. all are initially 0.
int i7;
int smallest = Integer.MAX_VALUE;  // set the smallest to (2^31)-1; the largest int.

System.out.println("Type 8 numbers.");

for (i7 = 0; i7 < array1.length; i7++)
{
   array1[i7] = keyboard.nextInt();

   if (array1[i7] < smallest) // compare last read against current smallest
   {
       smallest = array1[i7];
   }
}
System.out.println("The smallest number is " + smallest);

另一个潜在的来源是您致电keyboard.nextInt()。什么类型的对象是keyboard?它可能在每次通话时返回0。如果您运行固定代码而未提供0作为输入之一且仍然0为最小值,那么您就知道keyboard.nextInt()来电有问题。

答案 2 :(得分:0)

array1[i7] < array1[0]始终执行完全相同的比较;你想要array1[i7] < smallest

此外,array1[0]在初始化后等于零,因此除非您输入负数,否则smallest将始终等于0。相反,请初始化smallest = Integer.MAX_VALUE。这会将smallest初始化为最大可能的整数,因此您输入的任何数字(可能)都会更小。

答案 3 :(得分:0)

你实际上没有问用户这些数字吗?

尝试在通话前添加此内容:

Scanner sc = new Scanner(System.in);

for(int z=0;z < 8;z++){
    array1[z] = new Integer(sc.nextLine()).intValue();
}