2015-10-14 50 views
-2

我正在试图在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); 
    } 

我找到了一个真正简单soultion这个here

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

+4

您可以通过检查哪个数字最大,从而大大简化代码AS用户正在输入值,取消第二个/双重循环 – MadProgrammer

+2

如果您想解释如何解释您的错误,将会更容易解释您的错误代码作品(或应该工作)。你认为每个循环中会发生什么? – Pshemo

+1

只是一个小小的注释:java中的数组是基于0的。这意味着数组中的第一个元素是'array [0]',而不是'array [1]' – Paul

回答

1

从Pshemo的建议开始,记录下用户输入的最大int值。这将您的方法缩小了一半,并使其更简单,更易读。

使用基于0的索引编程。因此请使用int NumbersArray[] = new int[10]而不是int NumbersArray[] = new int[11]。当你声明你的数组的大小时,简单地把你想要的大小,你不必担心0索引或任何东西。对于您的for循环,请从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); 
} 
+0

谢谢。我会记住这一点 –

1

问题是,您要遍历列表两次(以嵌套的方式)。假设您有以下数字:[5, 7, 3, 4]。当你第一次通过内循环时,你会最终比较数字与5.只有7更大,所以largestNumber将被设置为7.然后,你会再次通过,这次比较与7.没有什么比7,所以它将被单独留下。接下来,您将与3进行比较。最后一次比较有3比4,因为4比较大,所以最终将largestNumber设置为4,这是不正确的。

+0

这正是我正在寻找的答案。非常感谢你 –

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数组是基于0的。这意味着第一个元素位于NumbersArray[0],而不是NumbersArray[1],与您的代码一样。

+0

这正是我正在寻找的答案。非常感谢你 –