Je suis novice en programmation et j'ai essayé de créer un algorithme pour trouver la note des notes saisies par l'utilisateur pour chaque matière. Au début du programme, l'utilisateur entre toutes les notes pour chaque sujet. Après cet ordinateur devrait imprimer automatiquement tous les sujets dans l'ordre suivant subject - mark - grade.

J'ai utilisé la boucle do-while pour éviter lorsque l'utilisateur saisit un nombre hors limites. De plus, j'ai pensé à utiliser try-catch et do-while pour éviter d'obtenir un type de variable invalide de la part de l'utilisateur. J'ai mis l'ensemble try-catch dans une autre boucle do-while. Ainsi, il doit être en boucle jusqu'à ce que l'utilisateur entre une valeur entière lorsqu'une exception existe. Mais lorsque j'entre un mauvais type de variable comme A pendant l'exécution du programme, l'ordinateur décide que toutes les entrées restantes sont des variables invalides sans l'entrée de l'utilisateur et imprime les "marques" comme zéro et nul pour toutes ces "notes" >>Subject_4 - 0 - null. Sinon, si j'entre une variable correcte, elle devrait s'imprimer comme ceci >>Subject_1 - 56 - C. Comment puis-je réparer cela? Aidez-moi, s'il vous plaît.

public class findResults {
int getMark;
int setMark;
String setGrade;
int arrayIndex;

String [] subjects = {"Subject_1","Subject_2","Subject_3","Subject_4"};
int [] marks = new int [subjects.length];
String[] grades = new String [subjects.length];

public findResults(){
    
    Scanner scan = new Scanner (System.in);
    System.out.println("Enter your marks for each subjects!");
    for (int t = 0;t<subjects.length;t++){
        arrayIndex = t;
        int x = 0;
    do{
        try {
            do{
                System.out.print(subjects[t]+" - ");
                getMark = scan.nextInt();
                setMark = ((getMark <= 100 && getMark >= 0)? getMark : (x=x-1));
                x = x+1;
            }while(x!=1);

        } catch (Exception e) {
            System.out.println("Please input valid number ..!");
    }
    }while(x!=x);
    
    }
    for (int i = 0; i<subjects.length;i++)
        System.out.println(subjects[i]+" - "+marks[i]+" - "+ grades[i]);
}
public void setResult(){
    if (setMark >= 75){
        setGrade = "A";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }
    else if(setMark >=65){
        setGrade = "A";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }
    else if(setMark >=65){
        setGrade = "B";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }
    else if(setMark >=55){
        setGrade = "C";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }
    else if(setMark >=35){
        setGrade = "S";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }
    else if(setMark >0){
        setGrade = "W";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= setGrade;
    }else{
        setGrade = "F";
        marks[arrayIndex]= setMark;
        grades[arrayIndex]= "Fail";
    }
}
    
}
0
Achiya 16 nov. 2020 à 17:34

1 réponse

Meilleure réponse

Considérer ce qui suit.

private static String setGrade(int setMark) {
    String setGrade;
    if (setMark >= 75) {
        setGrade = "A";
    }
    else if (setMark >= 65) {
        setGrade = "B";
    }
    else if (setMark >= 55) {
        setGrade = "C";
    }
    else if (setMark >= 35) {
        setGrade = "S";
    }
    else if (setMark > 0) {
        setGrade = "W";
    }
    else {
        setGrade = "F";
    }
    return setGrade;
}

public static void main(String[] args) {
    String[] subjects = {"Subject_1", "Subject_2", "Subject_3", "Subject_4"};
    int[] marks = new int[subjects.length];
    String[] grades = new String[subjects.length];
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter your marks for each subject.");
    for (int t = 0; t < subjects.length; t++) {
        System.out.printf("%s - ", subjects[t]);
        try {
            String str = scan.nextLine();
            marks[t] = Integer.parseInt(str);
            if (marks[t] < 0 || marks[t] > 100) {
                System.out.println("Between 0 and 100, please. Re-enter.");
                t--;
                continue;
            }
            else {
                grades[t] = setGrade(marks[t]);
            }
        }
        catch (NumberFormatException xNumberFormat) {
            System.out.println("Invalid value. Re-enter.");
            t--;
            continue;
        }
    }
    for (int i = 0; i < subjects.length; i++) {
        System.out.println(subjects[i] + " - " + marks[i] + " - " + grades[i]);
    }
}

Vous trouverez ci-dessous le résultat d'un exemple d'exécution.

Enter your marks for each subject.
Subject_1 - -2
Between 0 and 100, please. Re-enter.
Subject_1 - a
Invalid value. Re-enter.
Subject_1 - 10
Subject_2 - 90
Subject_3 - 4.3
Invalid value. Re-enter.
Subject_3 - 43
Subject_4 - 007
Subject_1 - 10 - W
Subject_2 - 90 - A
Subject_3 - 43 - S
Subject_4 - 7 - W
0
Abra 16 nov. 2020 à 15:43