Почему он возвращает неправильную строку? - PullRequest
0 голосов
/ 21 октября 2019

Я новичок в Java, поэтому заранее извиняюсь.

Я делаю метод, который берет оценку за экзамен учащегося (оценка int) и возвращает оценку (оценка по строке). Но иногда он возвращает неправильную оценку.

public String calculateGrade(int mark) {
        String grade = "";
        if (mark < 40) {
            return ("Fail"); 
            }
        else if (mark < 50) {
            return ("3rd");
            }
        else if (mark < 60) {
            return ("2ii");
            }
        else if (mark < 70) {
            return ("2i");
            }
        else if (mark >= 70) {
            return ("1st"); 
            }
        else if (mark < 0) {
            return ("Invalid mark");
            }
        else if (mark > 100) {
            return ("Invalid mark"); 
            }
        return grade;
        }
System.out.println(labExample.calculateGrade(50));

Проблема заключается в том, что всякий раз, когда я задаю значение -1, оно возвращается как «Fail» вместо «Неверный код». То же самое касается более 100, поскольку возвращается «1-й» вместо «Неверный код».

Несмотря на то, что я сказал, что возвращать, если оценка <0 или> 100, кажется, что она игнорируется.

Любая помощь или указатели были бы великолепны. Спасибо.

Ответы [ 6 ]

3 голосов
/ 21 октября 2019

Проблема в том, что всякий раз, когда я помещаю значение -1, оно возвращается как "Fail" вместо "Неверный код". "*

-1 равно < 40,таким образом, ваше первое if условие истинно. Это означает, что ваш код return ("Invalid mark"); выполняется, что завершает метод - ни один из остальной части кода не выполняется. return не только устанавливает возвращаемое значение, но и продолжаетпоследующие операторы заканчивают вызов метода.

Также обратите внимание, что позже у вас возникает логическая ошибка, у вас есть серия else if операторов, ведущих к else if (mark < 70), за которыми следует if (mark >= 70). >= 70 будет всегда истинным. Если бы mark было < 70, предыдущее условие if было бы истинным, и вы бы никогда не достигли этого.

Правильный способ сделать это - проверить в порядке , возможно (в данном случае) от низшего к высшему, но, возможно, с проверкой «Недопустимая отметка».

Другие примечания:

  • Вам не нужно () возвращаемых значений, return не функция / методd.
  • Вам не нужно else, если вы делаете return в if телах.
  • Вы никогда не использовали grade, поэтому нет причин иметь егов коде

Итак:

public String calculateGrade(int mark) {
    if (mark < 0 || mark > 100) {
        return "Invalid mark";
    }
    if (mark < 40) {
        return "Fail"; 
    }
    if (mark < 50) {
        return "3rd";
    }
    if (mark < 60) {
        return "2ii";
    }
    if (mark < 70) {
        return "2i";
    }
    return "1st"; 
}

Или присвоение grade и возврат его в конце вместо этого, что некоторые считают лучшей практикой (а другие считают ненужными усложнения):

public String calculateGrade(int mark) {
    String grade; // ** Note I don't do = ""; I want the compiler to warn me if I try to use it without assigning to it

    if (mark < 0 || mark > 100) {
        grade = "Invalid mark";
    }
    else if (mark < 40) {
        grade = "Fail"; 
    }
    else if (mark < 50) {
        grade = "3rd";
    }
    else if (mark < 60) {
        grade = "2ii";
    }
    else if (mark < 70) {
        grade = "2i";
    }
    else {
        grade = "1st"; 
    }
    return grade;
}

Заметьте, мне нужны были else s, потому что я не return в if телах.

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

Ваш логический порядок неверен. Правильная логика

public String calculateGrade(int mark) {
    String grade = "";
     if (mark < 0) {
        return ("Invalid mark");
        }
    else if (mark > 100) {
        return ("Invalid mark"); 
        }
    else if (mark < 40) {
        return ("Fail"); 
        }
    else if (mark < 50) {
        return ("3rd");
        }
    else if (mark < 60) {
        return ("2ii");
        }
    else if (mark < 70) {
        return ("2i");
        }
    else if (mark >= 70) {
        return ("1st"); 
        }
    return grade;
    }
0 голосов
/ 21 октября 2019

Вероятно, ваша проблема заключается в том, как вы думаете об этой проблеме.

Сначала вы должны подумать обо всех необходимых вам областях, а затем поместить их в диапазон условий.

public String calculateGrade(int mark) {
        String grade = "";
if(mark < 0 || mark > 100){
            grade = "fail";
        } else {
            if (mark < 40) {
                grade = ("Fail"); 
            }else if (mark < 50) {
                grade = ("3rd");

            }else if (mark < 60) {
                grade = ("2ii");

            }else if (mark < 70) {
                grade = ("2i");

            }else if = (mark >= 70) {
                grade ("1st"); 
            }
        }
        return grade;


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

Всегда проверяйте остальное в порядке возрастания.

public String calculateGrade(int mark) {
        String grade = "";
        if (mark < 0) {
            return ("Invalid mark");
            }
        else if (mark < 40) {
            return ("Fail"); 
            }
        else if (mark < 50) {
            return ("3rd");
            }
        else if (mark < 60) {
            return ("2ii");
            }
        else if (mark < 70) {
            return ("2i");
            }
        else if (mark >= 70) {
            return ("1st"); 
            }
        else if (mark > 100) {
            return ("Invalid mark"); 
            }
        return grade;
    }

Теперь все должно работать как положено.

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

Вам необходимо отсортировать также порядок различных IF. Другими словами, он соответствует первому действительному IF.

Другой возможный вариант, чтобы избежать сортировки IF, может состоять в том, чтобы проверить, если

public String calculateGrade(int mark) {
        if (mark >= 0 && mark < 40) {
            return "Fail"; 
         }
        else if (mark >= 40 && mark < 50) {
            return ("3rd");
            }
        else if (mark >= 50 && mark < 60) {
            return ("2ii");
            }
        else if (mark >= 60 && mark < 70) {
            return ("2i");
            }
        else if (mark >= 70 && mark < 100) {
            return ("1st"); 
            }            
         return ("Invalid mark");
        }
0 голосов
/ 21 октября 2019

-1 <100 - истина: поэтому он возвращает «Fail» </p>

101> = 70 - истина: поэтому он возвращает «1-й»

, если делает это с помощью IfEse: проверьте свои границыпервый! Тогда делай оценки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...