2015-10-14 3 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

Вы можете значительно упростить код, проверив, какой номер является самым большим. Пользователь вводит значения, устраняя второй/двойной цикл. – 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 или что-то еще. Для вашей петли, начните с 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 является самым большим элементом, в этом случае largestNumber будет последним значением в NumbersArray.

работает раствор А будет:

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

Хотя наиболее эффективным решением будет непосредственно следить за текущей величине ввода при чтении входного файла.

И имейте в виду, что java-массивы: 0-based. Это означает, что первый элемент находится в NumbersArray[0], а не NumbersArray[1], как в вашем коде.

+0

Это именно тот ответ, который я искал. большое спасибо –

Смежные вопросы