Некоторые комментарии ...
отступ
Пожалуйста, постарайтесь соответствовать вашему стилю отступа.Это делает ваш код намного проще для чтения.
пробел
Будьте осторожны в управлении пробелами.Когда вы читаете книгу, журнал или веб-страницу, для разделения идей используются пустые места - абзацы, разделы и т. Д. Аналогично, для разделения ваших функций или идей внутри функций должно использоваться пустое пространство.Например:
void f1()
{
do();
domore();
}
void f2()
{
doAnotherThing();
andYetAnother();
}
void f3()
{
do1();
do2();
do3();
do4();
}
Обратите внимание, что легко увидеть, что есть 3 отдельные функции, а третья функция имеет две отдельные группы действий - do1 () и do2 () отделены от do3 () и do4 () с пустым пространством, визуально показывающим, что есть что-то похожее в do1 () и do2 (), что-то похожее в do3 () и do4 (), и что 1 & 2 чем-то отличаются от 3 & 4.
Если это не имеет смысла, не стесняйтесь игнорировать :) (но я бы посоветовал вам прочитать основную книгу по визуальному дизайну)
фигурные скобки
Это хорошоИдея привыкнуть использовать фигурные скобки вокруг всех условных блоков - это дает понять, где начинается и заканчивается блок.Например,
if(condition)
line1;
line2;
отличается от
if(condition)
{
line1;
line2;
}
В первом случае line1 будет выполняться тогда и только тогда, когда условие выполнено, но line2 будет вычислять независимо от того, что -отступ обманчив.Во втором случае и line1, и line2 будут выполняться тогда и только тогда, когда условие истинно.
В первом случае намерение неясно - испортил ли отступ первоначальный разработчик (для педантичного, игнорируйте языкичто использовать отступ для управления циклами)?Или он забыл скобки?Если бы первый случай был написан следующим образом, мы бы знали ответ:
if(condition) {
line1
}
line2
Конечно, если отступы были согласованы через файл, намерение следующего кода также было бы ясным:
if(condition)
line1
line2
бесконечный цикл
Обратите внимание на конечную точку с запятой, которую вы используете на
while
(score1 <0 || score1 > 100);
Завершающая точка с запятой завершает блок.Если оценка 1 неверна, цикл никогда не завершится.
компиляция
Я не уверен, что
while
score2 <0 || score2 > 100;
является допустимым кодом.Вы должны поместить Parens вокруг условия.У вас также возникает проблема бесконечного цикла с конечной точкой с запятой, опять же.
получение оценок
Когда вы запрашиваете оценки, ваш код в настоящее время выглядит как
score = readLine()
while(...)
System.out.println(...)
Это означает, что вы читаете ввод пользователя, затем вводите цикл, в котором вы печатаете сообщение.Помните: цикл начинается там, где начинается while
, поэтому чтение ввода никогда не происходит после первой итерации.Вам нужно прочитать значение, которое пользователь записывает на каждой итерации цикла.
score = readline()
while(score is invalid)
{
print error
score = readline()
}
именование переменных
Игнорировать этот раздел, если он сейчас не имеет смысла- считать это плохим введением в материал, который вы узнаете позже.
Если у вас есть такая возможность, вы всегда должны называть свои переменные осмысленно.Конструктор GradeReport имеет 4 переменные, назначение которых совершенно неясно, если у вас нет доступа к исходному коду:
public GradeReport (String v1, int v2, int v3, int v4)
Вы можете использовать то же имя для переменной, что и для слота класса, и вы можетеразличать по ключевому слову this
.Если мы сначала вставим this
для всех переменных класса в конструкторе, а остальные оставим без изменений, то получится:
public GradeReport (String v1, int v2, int v3, int v4)
{
this.name = v1; //these are to initialize the variables so that I don't get null for the second set of results.
this.score1 = v2;
this.score2 = v3;
this.score3 = v4;
}
и если мы заменим v1 на «name» ...
public GradeReport (String name, int v2, int v3, int v4)
{
this.name = name; //these are to initialize the variables so that I don't get null for the second set of results.
this.score1 = v2;
this.score2 = v3;
this.score3 = v4;
}
и затем замените v2 на Score1 ...
public GradeReport (String name, int score1, int v3, int v4)
{
this.name = name; //these are to initialize the variables so that I don't get null for the second set of results.
this.score1 = score1;
this.score2 = v3;
this.score3 = v4;
}