如何获得数组中最大的数字?

时间:2015-10-14 23:41:26

标签: java

我试图在10个数字的数组中找到最大的数字。这是我的代码:

public static void getNumber() {
        int NumbersArray[] = new int[11];
        int num1;
        int num2;
        int largestNumber = 0;
        Scanner scanner = new Scanner(System.in);
        for(int i=1; i<11; i++){
            System.out.println("Enter number " + i );
            int no1 = scanner.nextInt();
            NumbersArray[i] = no1;

        }
        scanner.close();

        for(int i=1; i<11; i++)
        {       
            System.out.println(NumbersArray[i]);
            num1 = NumbersArray[i];
            for(int j=10; j>0; j--)
            {
                num2 = NumbersArray[j];
                if(num1>num2){
                    largestNumber = num1;
                }
            }
        }
        System.out.println("the largest number is " + largestNumber);
    }

我发现了这个here真正简单的灵魂。

但我发布这个的原因是要找出我犯了什么错误。 第一部分从用户获得10个数字,第二部分是我的代码以找到最大数字。

4 个答案:

答案 0 :(得分:1)

关闭Pshemo的建议,记录用户输入的最大int。这会将方法的大小减少一半,使其更简单,更易读。

使用基于0的索引进行编程。因此,请使用int NumbersArray[] = new int[10]代替int NumbersArray[] = new int[11]。当您声明阵列的大小时,只需输入所需的大小,您就不必担心索引或任何内容。对于for-loop,请从int i=0开始,到i<10结束。

public static void getNumber(){
    int NumbersArray[] = new int[10];
    int largestNumber = 0;
    Scanner scanner = new Scanner(System.in);
    for(int i=0; i<10; i++){
        System.out.println("Enter number " + i );
        int no1 = scanner.nextInt();
        NumbersArray[i] = no1;
        if(no1 > largestNumber)
            largestNumber = no1;

    }
    scanner.close();
    System.out.println("The largest number is: " + largestNumber);
}

答案 1 :(得分:1)

问题是你在列表中迭代两次(以嵌套的方式)。假设您有以下数字:[5, 7, 3, 4]。当你第一次通过内循环时,你最终将数字与5进行比较。只有7更大,所以largestNumber将被设置为7.然后你将再次通过,这次比较7。没有什么比7大,所以它将被遗弃。接下来你将与3进行比较。最后的比较是3比4,而且由于4比较大,你最终将largestNumber设置为4,这是不正确的。

答案 2 :(得分:1)

这些行:

 for(int i=1; i<11; i++)
    {       
        System.out.println(NumbersArray[i]);
        num1 = NumbersArray[i];
        for(int j=10; j>0; j--)
        {
            num2 = NumbersArray[j];
            if(num1>num2){
                largestNumber = num1;
            }
        }
    }

不要搜索数组中的最大数字,而只是在NumbersArray中搜索任何大于当前元素的值。因此largestNumber不是数组中的最大数字,而是NumbersArray中的最后一个数字,大于NumbersArray的最后一个数字,除非NumbersArray的最后一个元素是最大的元素,在这种情况下,largestNumber将是NumbersArray中的最后一个值。

一个有效的解决方案是:

int max = Integer.MIN_VALUE;
for(int i : NumbersArray)
    if(max < i)
        max = i;

虽然最有效的解决方案是在读取输入时直接跟踪当前最大的输入。

请记住,java-arrays是 0-based 。这意味着第一个元素位于NumbersArray[0],而不是NumbersArray[1],就像您的代码一样。

答案 3 :(得分:0)

据我所知,您可以使用Java Math max()方法获取最大数量。 即:dataType max(int number1,int number2),Math.max(number1,number2)获得数字1和2之间的最大值。