出于某种原因,每当我编译并运行此代码时,我会得到关于数组中最小数字的正确答案。除非我输入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]有关;因为每当我改变它时,它会将问题与其他数字联系起来。就像程序只读取某组整数而忽略其余整数。
答案 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;
你需要遍历并检查所有元素,因为第二个被跳过。