【问题标题】:Printing message only once after iterating through the first column of a 2d array遍历二维数组的第一列后仅打印一次消息
【发布时间】:2020-01-27 14:31:21
【问题描述】:

导入 java.util.Scanner;

公开课成绩{

public static void main(String[] args) {

    String students[][] = new String[2][4];

    Scanner input = new Scanner(System.in);

    for (int i = 0; i < 2; i++) {

        System.out.print("\n\nStudent 00" + (i + 1) + "\n\n");

        for (int j = 0; j < 4; j++) {

            if (j == 0) {
                System.out.print("\n\tStudent Code : ");
            } else if (j == 1) {
                System.out.print("\n\tName : ");
            } else if (j == 2) {
                System.out.print("\n\tMaths Grade : ");
            } else if (j == 3) {
                System.out.print("\n\tFrench Grade : ");
            } else {
                System.out.print("\n\tNonexistent field!\n");
            }

            students[i][j] = input.nextLine();
        }

    }

    System.out.print("\n\tRegistered Students : \n\n");

    System.out.print("\tCODE\tFULL NAME\tMATHS\tFRENCH\n\n");

    for (int i = 0; i < 2; i++) {

        for (int j = 0; j < 4; j++) {

            System.out.print("\t" + students[i][j] + "  ");

        }

        System.out.println();
    }

//求学生码。

    System.out.print("\n\tStudent Code : ");

    String search= input.nextLine();

    boolean found = false;

    for (int i = 0; i < 2; i++) {

        for (int j = 0; j < 4; j++) {

//找到=真;

            if (search.equals(students[i][0])) {

                found = true;

                System.out.print("\n\tStudent Code Found!\n");

                String math = students[i][2];
                String french = students[i][3];

                Double m = new Double(math);
                double mathConv = m.doubleValue();

                Double f = new Double(french);
                double frenchConv = f.doubleValue();

                double average = (mathConv + frenchConv) / 2;

                System.out.print("\n\tMoyenne de l'etudiant : " + average + "\n");

                if (average <= 40) {

                    System.out.print("\n\tFailure!\n");

                } else if (average > 40 && average < 70) {

                    System.out.print("\n\tReprisal!\n");

                } else {

                    System.out.print("\n\tSuccess!\n");
                }

            }

            else if (!search.equals(students[i][0])) {

                found = false;

                System.out.print("\n\tCode incorrect!\n");

            }

        }
    }
}

}

我只需要在输入代码 etudiant 后显示一条消息,但它会显示 4 次消息。循环应该只遍历每一行的第一列,并将其与用户输入的内容进行比较。

【问题讨论】:

    标签: java for-loop if-statement


    【解决方案1】:

    当你迭代搜索时,你不需要第二个循环来迭代属性,因为你不使用它

     System.out.print("\n\tStudent Code : ");
     String search = input.nextLine();
     boolean found = false;
    
     for (int i = 0; i < 2; i++) {
    //        for (int j = 0; j < 4; j++) { //you don't need this loop
    

    【讨论】:

    • 谢谢。但是当我输入第二个学生的代码时,它仍然在“代码正确”之前打印“代码不正确”。
    • 找到学生后 - 通过在搜索循环末尾添加 if (found) break; 来停止迭代
    【解决方案2】:

    改变这个:

    for (int j = 0; j < 4; j++)
    

    到这里:

    for (int j = 0; j < 1; j++)
    

    因为我们只想运行该循环一次。

    或者,您可以完全删除 j 循环。

    【讨论】:

      【解决方案3】:

      建议您对这些数组使用长度参数,这样,如果您更改大小,循环不会中断,在这种情况下,您只需获取数组的第一个元素,然后遍历它。所以不用

      for (int i = 0; i < 2; i++) {
      
              System.out.print("\n\nStudent 00" + (i + 1) + "\n\n");
      
              for (int j = 0; j < 4; j++) {
      
                  if (j == 0) {
                      System.out.print("\n\tStudent Code : ");
                  } else if (j == 1) {
                      System.out.print("\n\tName : ");
                  } else if (j == 2) {
                      System.out.print("\n\tMaths Grade : ");
                  } else if (j == 3) {
                      System.out.print("\n\tFrench Grade : ");
                  } else {
                      System.out.print("\n\tNonexistent field!\n");
                  }
      
                  students[i][j] = input.nextLine();
              }
      
          }
      

      你可以说

              System.out.print("\n\nStudent 001" + "\n\n");
      
              for (int j = 0; j < students[0].length; j++) {
      
                  if (j == 0) {
                      System.out.print("\n\tStudent Code : ");
                  } else if (j == 1) {
                      System.out.print("\n\tName : ");
                  } else if (j == 2) {
                      System.out.print("\n\tMaths Grade : ");
                  } else if (j == 3) {
                      System.out.print("\n\tFrench Grade : ");
                  } else {
                      System.out.print("\n\tNonexistent field!\n");
                  }
      
                  students[0][j] = input.nextLine();
              }
      

      【讨论】:

        猜你喜欢
        • 2021-06-03
        • 1970-01-01
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-24
        相关资源
        最近更新 更多