В методе check_mark (), если я поставил неправильную метку для PHYSICS (которая находится во второй позиции a [1]), то есть mark> 100, он перейдет в цикл if и должен запросить ввод для той же метки PHYSICS, но снова начинается с a [0] т.е. MATHS ...... То же, что и для ENGLISH, снова начинается с MATHS.

Пожалуйста, помогите мне решить эту проблему: он должен запрашивать ввод для этой конкретной отметки, которая введена неправильно ....

Код ошибки:

import java.util.Scanner;

class averageMark
{
    static int no_of_students=2;
    static int a[]=new int[3];
    static int no_of_subjects=a.length;
    static String b[]=new String[]{"MATHS","PHYSICS","ENGLISH"};
    static int avg;
    static int total_marks=0;
    static Scanner sc=new Scanner(System.in);

    void check_mark()
    {
       for (int j = 0; j < 3; j++) 
       {
           System.out.print("Enter "+b[j]+" mark: ");
           a[j]=sc.nextInt();
           if(a[j]>100)
           {
               System.out.println("Please provide correct mark which is equal to or below 100");
               check_mark();
           }
       }
   }

   public static void main( String[] args )
   {
      for (int i = 0; i < no_of_students; i++) 
      {    
        averageMark check=new averageMark();
        check.check_mark();
        for (int k = 0; k < no_of_subjects; k++) 
        {
            total_marks+=a[k];
        }
        avg=total_marks/no_of_subjects;
        System.out.println();
        System.out.println("The average is: "+avg);
        if(avg>=70)
        {
            System.out.println();
            System.out.println("!!!Qualified!!!");   
        }
        else
        {
            System.out.println();
            System.out.println("!!!Not qualified!!!");
        }
        System.out.println();
    }
    sc.close();
    }
 }
0
Arivazhagan 2 Сен 2020 в 16:56

2 ответа

Лучший ответ

Вы не должны вызывать метод check_mark, если отметка была неправильной. Вы должны уменьшить индекс

void check_mark() {
   for (int j = 0; j < 3; j++) {
       System.out.print("Enter "+b[j]+" mark: ");
       a[j]=sc.nextInt();
       if(a[j]>100) {
           System.out.println("Please provide correct mark which is equal to or below 100");
           j--;
       }
   }
}
1
Andrew Blagij 2 Сен 2020 в 14:00

Вы также можете сделать это с помощью цикла while ();

void check_mark()
    {
       for (int j = 0; j < 3; j++) 
       {
           System.out.print("Enter "+b[j]+" mark: ");
           a[j]=sc.nextInt();

           while(a[j]>100){
               System.out.println("Please provide correct mark which is equal to or below 100");
              a[j] = sc.nextInt(); 
           }
       }
   }
1
skarabel 2 Сен 2020 в 14:14