Victoriaaaaaaaa Ответов: 1

Возникли проблемы с корректным выводом из оператора if


Здравствуйте, мне бы не помешала помощь с одной проблемой, которая у меня возникла. Пользователь должен ввести количество студентов, а затем ввести баллы, и я должен найти лучший результат и назначить оценку соответственно.

Оценка-это а, если оценка >= best-10

Оценка-B, если оценка >= best-20

Оценка-C, если оценка >= best-30

Оценка D, если оценка >= best-40

Класс F в противном случае

Моя программа не производит правильные оценки в данный момент, независимо от того, какие числа я ввожу.

Вот пример ввода и вывода:

Введите количество студентов: 4

Введите 4 балла: 45 90 78 23

Ученик 0 класса-это: а

Ученик 1 класса-это: а

Ученик 2 класса-это: а

Ученик 3 класса-это: с

Трудно сказать, определяется ли лучший результат, потому что он дает тот же результат другим числам, это происходит со многими другими числами в качестве входных данных.

import java.util.Scanner;
public class Main
{
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("Enter the number of students: ");
		int students = input.nextInt();
		
		int[] grades = new int [students];
		
		
		System.out.print("Enter " + students + " scores: ");
	        for(int i=0; i<students; i++){
	            grades[i] = input.nextInt();
	        }
	       
	        int max = grades[0];
	        for(int i = 0; i<grades.length; i++){
	        
	            if(grades[i] > max){
	                max = grades[i];
	            }
	            
	         for(i = 0; i<grades.length; i++){
	         if (grades [i] >= max-10){
	             System.out.println("Student " + i + " grade is: A");
	         }else if (grades[i] >= max-20){
	             System.out.println("Student " + i + " grade is: B");
	         }else if (grades [i] >= max-30){
	             System.out.println("Student " + i + " grade is: C");
	         }else if (grades[i] >= max-40){
	             System.out.println("Student " + i + " grade is: D");
	         }else{
	             System.out.println("Student " + i + " grade is: F");
	         }
	         }
	        }
	}
}


Что я уже пробовал:

Я попытался поставить еще один цикл for прямо перед моим оператором if, используя другую переменную (j вместо i), чтобы дифференцировать значение max и whats в моем операторе if, но я как бы застрял. Я новичок в java, так что любая помощь будет оценена по достоинству, и заранее благодарю вас :)

1 Ответов

Рейтинг:
2

Patrice T

Совет: Научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of students: ");
        int students = input.nextInt();

        int[] grades = new int [students];


        System.out.print("Enter " + students + " scores: ");
        for(int i=0; i<students; i++){
            grades[i] = input.nextInt();
        }

        int max = grades[0];
        for(int i = 0; i<grades.length; i++){

            if(grades[i] > max){
                max = grades[i];
            }
// The error is a missing } there
            for(i = 0; i<grades.length; i++){
                if (grades [i] >= max-10){
                    System.out.println("Student " + i + " grade is: A");
                }else if (grades[i] >= max-20){
                    System.out.println("Student " + i + " grade is: B");
                }else if (grades [i] >= max-30){
                    System.out.println("Student " + i + " grade is: C");
                }else if (grades[i] >= max-40){
                    System.out.println("Student " + i + " grade is: D");
                }else{
                    System.out.println("Student " + i + " grade is: F");
                }
            }
        } // that should be removed from there 
    }
}

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.