我是编程的新生,我的大学正在教授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);
答案 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();
}