#java #netbeans
#java #netbeans
Вопрос:
Мне нужна помощь в печати нескольких строк из операторов if на консоль. Код, который у меня есть сейчас, приведен ниже, однако он будет печатать только средний балл теста и то, что получил студент, но не результаты по первым трем тестовым баллам. Кто-нибудь знает, в чем проблема?
import java.util.Scanner;
public class TestScoresAndGrade {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
// Gathering info from user
System.out.println("Enter your first test score!");
int firstScore = keyboard.nextInt();
System.out.println("Enter your second test score!");
int secondScore = keyboard.nextInt();
System.out.println("Enter your third test score!");
int thirdScore = keyboard.nextInt();
int averageTestScore = (firstScore * secondScore * thirdScore)/3;
// Telling the student what grade they got on the first test
if (firstScore >= 90) {
System.out.println("Congrats you got an A on your first test!");
}
else if (firstScore < 90 amp;amp; firstScore > 80) {
System.out.println("You got a B on your first test!");
}
else if (firstScore < 80 amp;amp; firstScore > 70) {
System.out.println("You got a C on your first test!");
}
else if (firstScore < 70 amp;amp; firstScore > 60) {
System.out.println("You got a D on your first test!");
}
else if (firstScore < 60) {
System.out.println("You got a F on your first test!");
}
// Telling student what grade they got on the second test
if (secondScore >= 90) {
System.out.println("Congrats you got an A on your first test!");
}
else if (secondScore < 90 amp;amp; secondScore > 80) {
System.out.println("You got a B on your first test!");
}
else if (secondScore < 80 amp;amp; secondScore > 70) {
System.out.println("You got a C on your first test!");
}
else if (secondScore < 70 amp;amp; secondScore > 60) {
System.out.println("You got a D on your first test!");
}
else if (secondScore < 60) {
System.out.println("You got a F on your first test!");
}
// Telling student what they got on third test
if (thirdScore >= 90) {
System.out.println("Congrats you got an A on your third test!");
}
else if (thirdScore < 90 amp;amp; thirdScore > 80) {
System.out.println("You got a B on your third test!");
}
else if (thirdScore < 80 amp;amp; thirdScore > 70) {
System.out.println("You got a C on your third test!");
}
else if (thirdScore < 70 amp;amp; thirdScore > 60) {
System.out.println("You got a D on your third test!");
}
else if (thirdScore < 60) {
System.out.println("You got a F on your third test!");
}
//Telling a student what there average score was
if (averageTestScore >= 90) {
System.out.println("Congrats your avergage is an A!");
}
else if (averageTestScore < 90 amp;amp; averageTestScore > 80) {
System.out.println("Your average is a B!");
}
else if (averageTestScore < 80 amp;amp; averageTestScore > 70) {
System.out.println("Your average is a C!");
}
else if (averageTestScore < 70 amp;amp; averageTestScore > 60) {
System.out.println("Your average is a D!");
}
else if (averageTestScore < 60) {
System.out.println("Your average is an F!");
}
}
}
Комментарии:
1. Если ваш счет равен ровно 80, или ровно 70, или ровно 60, ни одно из ваших условий ему не соответствует. Также ваше среднее значение рассчитано неправильно, потому что вы умножаете оценки вместо их добавления. Также при записи
else
вам не нужно перепроверять условие, указанное вif
инструкции. Вот чтоelse
значит.
Ответ №1:
Как указывает @khelwood, вы исключаете 80, 70, 60 из своих блоков if-else. Если вы можете предоставить образец ваших тестовых данных, у нас будет лучшее представление о том, что происходит.
В качестве примечания,
- Обычно мы выполняем if-else, если-…else.(по соглашению последняя ветвь — else, если вы не хотите намеренно исключить некоторые случаи)
- как сказал @khelwood, средняя формула неверна. Еще одна вещь, вам следует использовать / 3.0, если вы хотите получить десятичную дробь, поскольку вы выполняете целочисленное деление здесь на 3.
- Если вы хотите улучшить читаемость, подумайте о том, чтобы инкапсулировать дублированную логику и сделать ее повторно используемой.