2

我是一名编程新学生,我的大学正在教 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

4 回答 4

2

您将 minimum 初始化为 array1[0] ,它仍未从用户输入初始化 - 即它以 0 开头。

现在,要解决上述问题,您可以与 array[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);

替代解决方案。

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

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

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

   if(i7 == 0)
   {
        smallest = array1[0];
   }
   else
   {
       if (array1[i7] < smallest)
       {
           smallest = array1[i7];
       }

   }
}
System.out.println("The smallest number is " + smallest);

不过我更喜欢第一个。

于 2013-04-17T16:57:49.390 回答
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()调用有问题。

于 2013-04-17T17:16:09.673 回答
0

array1[i7] < array1[0]总是执行完全相同的比较;你要array1[i7] < smallest

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

于 2013-04-17T16:56:39.450 回答
0

您实际上并没有向用户询问数字吗?

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

Scanner sc = new Scanner(System.in);

for(int z=0;z < 8;z++){
    array1[z] = new Integer(sc.nextLine()).intValue();
}
于 2013-04-17T17:01:19.830 回答