当在数组10,-2,-1中时,程序不计算最小整数的-2

时间:2014-09-03 22:23:11

标签: java arrays

出于某种原因,每当我编译并运行此代码时,我会得到关于数组中最小数字的正确答案。除非我输入10,-2和-1。在这一点上,它给出了-1作为最小数字,而它应该是-2。似乎第一个数字似乎并不重要,只要它是积极的。似乎程序正在读取数组错误,但我不确定如何更改它。

import java.util.Scanner; public class Problem { 
public static void main(String[] arg) 
{
Scanner scan = new Scanner(System.in); 
System.out.println("Insert three integers, USER.");
int x = scan.nextInt();
int y = scan.nextInt();
int z = scan.nextInt();
//returns smallest, tried to keep code short with arrays 
int array[] = new int[]{x,y,z};
int small = array[0];
int box=2;
if (array[box]<small) {
    small = array[box];
}

我认为它与int small = array [0]有关;因为每当我改变它时,它会将问题与其他数字联系起来。就像程序只读取某组整数而忽略其余整数。

3 个答案:

答案 0 :(得分:1)

你没有遍历数组,所以第二个数字永远不会被比较;试试这个:

int array[] = new int[]{x,y,z};
int small = array[0];
for(i = 1; i < array[].length; i++) {
     if (array[i] < small) {
         small = array[i];
    }
}

答案 1 :(得分:0)

您的问题似乎是对迭代的基本误解。在您发布的代码中,您只是比较数组中两个元素的值,即array[0],以及box处的元素array[2]。因此,在您的示例中,&#34;比较&#34; 10,-2和-1,你只是实际比较10到-1。

我认为你打算做的是按顺序查看数组中的每个元素。这最容易使用for-loop完成,如:

for (int i = 0; i < array.length; i++) {
    if (array[i] < small)
        small = array[i];
}

在第一次迭代(i == 0)上,您比较10到10,因此small保持不变。在第二次迭代(i == 1)上,您将10与-2进行比较,因此small被赋值为-2。在第三次迭代中,您将-2与-1进行比较,因此small再次保持不变。如i == 2,满足终止条件,循环停止。

有关详细信息,请参阅for-loop上的documentation

答案 2 :(得分:0)

您只检查输入的2个号码。

  

int small = array [0];

检查第一个元素为0,然后用

引用第三个元素
  

int box = 2;

你需要遍历并检查所有元素,因为第二个被跳过。