Java 值仅返回0

Java 值仅返回0,java,arrays,Java,Arrays,我是编程系的一名新生,我的大学正在教Java 我在做作业中的这个练习,不明白为什么它只返回0 在我决定在这里发帖之前的几天里,我一直在浏览互联网。 我在某个地方读到,如果我用值0(i7=0)启动变量,Java永远不会更改值0,但即使我更改为i7=1,它也会返回0,数组不再是8个索引,而是7个索引。 还有,它不是应该在我用键盘输入数字的那一刻开始填充数组吗? 也许我误解了什么? 如何使其显示最小的数字 谢谢 //读取和数组中的8个索引,并找到最小的数字 我有: int array1[] =

我是编程系的一名新生,我的大学正在教Java

我在做作业中的这个练习,不明白为什么它只返回0

在我决定在这里发帖之前的几天里,我一直在浏览互联网。 我在某个地方读到,如果我用值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);
int-array1[]=新的int[8];
int i7;
int最小=阵列1[0];
System.out.println(“键入8个数字”);
对于(i7=0;i7
array1[i7]
始终执行完全相同的比较;您需要
array1[i7]


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

您将最小值初始化为array1[0],而array1[0]仍然没有从用户输入中初始化,即它以0开头

现在,为了解决上述问题,您将在
if
中与数组[0]进行比较,而不是与最小的数组进行比较,但这不是正确的解决方法

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[]=新的int[8];
int i7;
System.out.println(“键入8个数字”);
array1[0]=keyboard.nextInt();
int最小值=数组1[0]
对于(i7=1;i7
替代解决方案

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);
int-array1[]=新的int[8];
int i7;
int最小;
System.out.println(“键入8个数字”);
对于(i7=0;i7

不过,我更喜欢第一个。

您实际上并没有向用户询问号码,是吗

尝试在通话前添加以下内容:

Scanner sc = new Scanner(System.in);

for(int z=0;z < 8;z++){
    array1[z] = new Integer(sc.nextLine()).intValue();
}
Scanner sc=新扫描仪(System.in);
对于(intz=0;z<8;z++){
array1[z]=新整数(sc.nextLine()).intValue();
}

下面,我已在您的代码上标注了问题的位置或原因:

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[]=新的int[8];//创建一个8整数的数组。所有初始值均为0。
int i7;
int最小值=数组1[0];//将最小值设置为0。
System.out.println(“键入8个数字”);
对于(i7=0;i7
现在,我要做些什么来修复它:

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);
int-array1[]=新的int[8];//创建一个8整数的数组。所有初始值均为0。
int i7;
int minimest=Integer.MAX_值;//将最小值设置为(2^31)-1;最大整数。
System.out.println(“键入8个数字”);
对于(i7=0;i7

另一个潜在的来源或问题是调用
keyboard.nextInt()
。键盘是什么类别的对象?它可能在每次调用时返回0。如果您在运行固定代码时没有将
0
作为输入之一,但仍然将
0
作为最小值,则您知道您的
键盘.nextInt()
调用有问题。

这仍然不起作用。。。。。“int minimate=array1[0]”minimate将init设置为0@gbtimmon-nope-参见
int minimest=array[0]前面的行。在我的程序中,数组[0]已经初始化。我更喜欢第三种解决方案,即您总是读取
for
循环中的输入,并使用
int minimen=Integer.max\u值对
minimen
进行初始化。这样,代码更干净,可读性更强。@LuiggiMendoza-true dat。行
array1[i7]=keyboard.nextInt()
填充数组。此行可能有错误。您是否尝试过使用调试器单步执行代码?由于您是新手,可能不知道如何使用调试器,因此可以在各种代码块边界处放置一些打印语句,以输出数组的当前状态和当前最小数字。键盘是从用户处获取数字=):Scanner keyboard=new Scanner(System.in);