查找数组的最大值

时间:2017-07-08 21:57:23

标签: java loops println

我正在尝试遍历我的数组以找到最大值并打印该值。但是,没有任何内容正在打印到控制台。您能否请看下面我的代码,看看我做错了什么。

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
  array[c] = in.nextInt();

maxInt = array[0];
minInt = array[0];

for (c = 0; c < n; c++) {
    if (array[c] > maxInt) {
        maxInt = array[c];
    }
    else {
        break;
    }
}
System.out.println("Max int is: " + maxInt);
}

修改

全班:

import java.util.Scanner;

public class MaxMinOfArray {
public static void main(String[] args) {
int c, n, search, array[];
int maxInt, minInt;

Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt(); //asks user to specify array size
array = new int[n]; //creates array of specified array size

System.out.println("Enter " + n + " integers");

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
array[c] = in.nextInt();

maxInt = array[0];
minInt = array[0];

for (c = 1; c < n; c++) {
if (array[c] > maxInt) {
    maxInt = array[c];
}
}
System.out.println("Max int is: " + maxInt);
}
}

4 个答案:

答案 0 :(得分:3)

卸下:

else {
        break;
    }

c=1

开始

答案 1 :(得分:1)

正如其他人所说,你不想做

else {
    break;
}

这意味着一旦找到一个不大于当前最大值的数字,它就会停止循环。由于您从列表中的第一个项目(通常不大于其自身)开始,因此您立即break

即使您将其更改为从c = 1开始,此代码可能按写入的唯一情况是用户按升序输入数字。 (在这种情况下,做这样的线性搜索无论如何都是毫无意义的,因为你可以真正找到数组中的最后一项并知道它将是最大的项目。)

此外,您应该检查array[c]是否小于for循环中的当前最小值;没有理由在一个单独的循环中这样做。

请记住,如果您正在线性搜索未排序数组的最大值,那么始终必须遍历整个数组,以确保您没有错过更大的值。例如,如果您只搜索数组的一半,您如何知道未搜索的一半不包含最大值?

答案 2 :(得分:1)

删除你的这部分代码。

else {
    break;
}

因为当时的c==0 array[c] == maxInt。所以它转到了其他部分并打破了你的for循环。

答案 3 :(得分:0)

如果array中的每个元素大于maxInt,则第二个循环会对其中的每个元素进行比较,但maxInt刚刚设置为array的第一个元素。这在循环的第一次迭代中失败,在else块中执行break,结束循环。

取出else块修复此问题:

for (c = 0; c < n; ++c)
{
    if (array[c] > maxInt)
        maxInt = array[c];
}

或者:

for (c = 0; c < n; ++c)
    maxInt = Math.max(maxInt, array[c]);

对于未出现的控制台消息,请确保通过设置断点并单步执行代码来正确执行代码(取决于您正在使用的IDE)。