有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么没有打印正确的数组值?

我试图只使用嵌套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");
            }
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    我不知道预期的行为是什么,但这显然是一个问题:

    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");
            }
            
    

    如果标记[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);
                }
            }
        }