Java-программа принимает 6 входных данных в массиве и находит самый высокий из всех. И если любое из чисел отрицательное, цикл должен быть прекращен - PullRequest
0 голосов
/ 01 октября 2019

Итак, в этом коде я создал код для чтения 6 значений и вывода наибольшего из 6 чисел. Это сработало хорошо, но теперь, если одно из чисел отрицательно, я хочу, чтобы цикл остановился и завершил печать Invalid Loop. Но в моем коде программа печатает наивысшую оценку после печати Invalid Input. Как мне избежать этого?

Это на платформе IntelliJ Java v5.0

import java.util.Scanner;

class Highestmark {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a[] = new int[6];
        for (int i = 0; i < a.length; i++) {
            a[i] = sc.nextInt();                  // To exit loop
            if (a[i] < 0) {
                System.out.println("Invalid Mark");
                break;
            }
        }
        int max = a[0];
        for (int i = 0; i < a.length; i++) {        // To find highest
            if (max < a[i]) {
                max = a[i];
            }
            System.out.println("Highest Mark is" + max);
        }
    }
}

Я ожидаю, что вывод будет

25
-26
Invalid Input

Но фактический вывод

25
26
27
-28
Invalid Input
Highest Mark is 27 

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Это можно немного упростить, нет необходимости хранить массив:

public class HighestMark {

  private static final int MAX_INPUT = 6; // could just hard-code this in loop, but good practice to set constants

  private static final Scanner SCAN = new Scanner(System.in);

  public static void main(String[] args) {
    int highest = 0;
    for (int i = 0; i < MAX_INPUT; i++) {
      int next = SCAN.nextInt();
      if (next < 0) { // validate the input (require non-negative int)
        System.out.println("appropriate error message...");
        break;
      }
      if (next > highest) {
        highest = next;
      }
    }
    System.out.println("Highest mark is " + highest);
  }


}
0 голосов
/ 01 октября 2019

break только прерывает цикл for, но затем продолжается с кодом ниже. Вы, вероятно, просто говорите return или System.exit(0);

0 голосов
/ 01 октября 2019

Вам необходим логический флаг.

Установите флаг в значение false, если есть любое отрицательное число.

Проверьте флаг перед проверкой максимального числа.

Scanner sc = new Scanner(System.in);
int a[] = new int[6];
boolean flag = true;

for (int i = 0; i < a.length; i++) {
    a[i] = sc.nextInt(); // To exit loop
    if (a[i] < 0) {
        System.out.println("Invalid Mark");
        flag = false;
        break;//return; //System.exit(0); any of these 3 will work fine.
    }
}
if (flag) {
    int max = a[0];
    for (int i = 1; i < a.length; i++) // To find highest
    {
        if (max < a[i])
            max = a[i];
    }

    System.out.println("Highest Mark is" + max);
}
...