为什么没有打印出正确的数组值?
Why are the correct array values not getting printed?
我正在尝试仅使用嵌套 if else 来打印 rollNumber 数组的标记。但是,我得到的输出是:
111 Honors
111 First Division
333 Fail
而输出应该是
111 Honors
222 First Division
333 Fail
444 Second Division
我哪里错了?我写的代码如下:
public class JavaApplication53 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int rollNumber[]={111, 222, 333, 444};
int marks[]={81, 75, 43, 58};
for(int i=0; i<rollNumber.length; i++) {
if(marks[i]>49) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
if(marks[i]>59){
System.out.println(rollNumber[i] + " First Division");
} else {
System.out.println(rollNumber[i] + " Second Division");
}
}
} else {
System.out.println(rollNumber[i]+ " Fail");
}
}
}
}
我不知道预期的行为到底是什么,但这显然是一个问题:
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
if(marks[i]>59){
System.out.println(rollNumber[i] + " First Division");
} else {
System.out.println(rollNumber[i] + " Second Division");
}
if marks[i] > 79 它总是 > 59,所以永远不会输入 else
编辑:您可以使用 类:
创建域模型,而不是使用数组并使用索引 i 从中获取相应的值
class Category {
final String name;
final int boundary;
Category(String name, int boundary) {
this.name = name;
this.boundary = boundary;
}
}
class Grade {
final int mark;
final int rollNumber;
Grade(int mark, int rollNumber) {
this.mark = mark;
this.rollNumber = rollNumber;
}
}
(省略 getter 和 setter)
这可以阐明你的代码的含义。
编辑 2:然后你可以这样做
Category[] categories = new Category[]{
new Category("Honors", 80),
new Category("First Division", 60),
new Category("Second Division", 50),
new Category("Fail", Integer.MIN_VALUE)
};
Grade[] grades = new Grade[]{
new Grade(81, 111),
new Grade(75, 222),
new Grade(43, 333),
new Grade(58, 444)
};
for (Grade grade : grades) {
for (Category category : categories) {
if (grade.mark >= category.boundary) {
System.out.printf("%s %s%n", grade.rollNumber, category.name);
}
}
}
你的逻辑不对。 如果你已经测试了 >79
,那么在 [=] 中测试 >59
是没有意义的15=] 子句。请改用 else
子句。最里面的 if
应该在它所在的 if
的 else
中。
if(marks[i]>79) {
......
} else {
//move this if from the if clause to here: else clause
if(marks[i]>59){
.......
}
}
或者,系统化是值得的,这样你就不会混淆自己。您从测试最低点 - 49 开始,然后测试最高点 - 79。也许 49、59、79 可以避免混淆,如下所示:
if(marks[i]>49) {
if(marks[i]>59) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else {
System.out.println(rollNumber[i] + " First Division");
}
} else {
System.out.println(rollNumber[i] + " Second Division");
}
} else {
System.out.println(rollNumber[i]+ " Fail");
}
或:
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else if(marks[i]>59) {
System.out.println(rollNumber[i] + " First Division");
} else if(marks[i]>49) {
System.out.println(rollNumber[i] + " Second Division");
} else {
System.out.println(rollNumber[i]+ " Fail");
}
我改进了你的代码。使用这个。
public static void main(String[] args) {
int rollNumber[]={111, 222, 333, 444};
int marks[]={81, 75, 43, 58};
for(int i=0; i<rollNumber.length; i++) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else if(marks[i]>59) {
System.out.println(rollNumber[i] + " First Division");
} else if(marks[i]>49) {
System.out.println(rollNumber[i] + " Second Division");
} else {
System.out.println(rollNumber[i] + " Fail");
}
}
}
希望问题越来越好!
我正在尝试仅使用嵌套 if else 来打印 rollNumber 数组的标记。但是,我得到的输出是:
111 Honors
111 First Division
333 Fail
而输出应该是
111 Honors
222 First Division
333 Fail
444 Second Division
我哪里错了?我写的代码如下:
public class JavaApplication53 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int rollNumber[]={111, 222, 333, 444};
int marks[]={81, 75, 43, 58};
for(int i=0; i<rollNumber.length; i++) {
if(marks[i]>49) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
if(marks[i]>59){
System.out.println(rollNumber[i] + " First Division");
} else {
System.out.println(rollNumber[i] + " Second Division");
}
}
} else {
System.out.println(rollNumber[i]+ " Fail");
}
}
}
}
我不知道预期的行为到底是什么,但这显然是一个问题:
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
if(marks[i]>59){
System.out.println(rollNumber[i] + " First Division");
} else {
System.out.println(rollNumber[i] + " Second Division");
}
if marks[i] > 79 它总是 > 59,所以永远不会输入 else
编辑:您可以使用 类:
创建域模型,而不是使用数组并使用索引 i 从中获取相应的值class Category {
final String name;
final int boundary;
Category(String name, int boundary) {
this.name = name;
this.boundary = boundary;
}
}
class Grade {
final int mark;
final int rollNumber;
Grade(int mark, int rollNumber) {
this.mark = mark;
this.rollNumber = rollNumber;
}
}
(省略 getter 和 setter)
这可以阐明你的代码的含义。
编辑 2:然后你可以这样做
Category[] categories = new Category[]{
new Category("Honors", 80),
new Category("First Division", 60),
new Category("Second Division", 50),
new Category("Fail", Integer.MIN_VALUE)
};
Grade[] grades = new Grade[]{
new Grade(81, 111),
new Grade(75, 222),
new Grade(43, 333),
new Grade(58, 444)
};
for (Grade grade : grades) {
for (Category category : categories) {
if (grade.mark >= category.boundary) {
System.out.printf("%s %s%n", grade.rollNumber, category.name);
}
}
}
你的逻辑不对。 如果你已经测试了 >79
,那么在 [=] 中测试 >59
是没有意义的15=] 子句。请改用 else
子句。最里面的 if
应该在它所在的 if
的 else
中。
if(marks[i]>79) {
......
} else {
//move this if from the if clause to here: else clause
if(marks[i]>59){
.......
}
}
或者,系统化是值得的,这样你就不会混淆自己。您从测试最低点 - 49 开始,然后测试最高点 - 79。也许 49、59、79 可以避免混淆,如下所示:
if(marks[i]>49) {
if(marks[i]>59) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else {
System.out.println(rollNumber[i] + " First Division");
}
} else {
System.out.println(rollNumber[i] + " Second Division");
}
} else {
System.out.println(rollNumber[i]+ " Fail");
}
或:
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else if(marks[i]>59) {
System.out.println(rollNumber[i] + " First Division");
} else if(marks[i]>49) {
System.out.println(rollNumber[i] + " Second Division");
} else {
System.out.println(rollNumber[i]+ " Fail");
}
我改进了你的代码。使用这个。
public static void main(String[] args) {
int rollNumber[]={111, 222, 333, 444};
int marks[]={81, 75, 43, 58};
for(int i=0; i<rollNumber.length; i++) {
if(marks[i]>79) {
System.out.println(rollNumber[i] + " Honors");
} else if(marks[i]>59) {
System.out.println(rollNumber[i] + " First Division");
} else if(marks[i]>49) {
System.out.println(rollNumber[i] + " Second Division");
} else {
System.out.println(rollNumber[i] + " Fail");
}
}
}
希望问题越来越好!