当前位置: 首页 > 知识库问答 >
问题:

带有扫描器输入Java作业问题

常英毅
2023-03-14
import java.util.Scanner;

public class Find2Max {

    public void run() { 

            Scanner sc = new Scanner(System.in);
            System.out.print("Enter the number of at least 2 students: ");
            int number_of_students = sc.nextInt();

            if(number_of_students < 2){             
                    number_of_students = 2; 
            }

            do{

                    double top_grade = 0;  
                    double second_top_grade = 0; 
                    String top_kid = ""; 
                    String second_top_kid= ""; 

                    for(int ii = 0; ii < number_of_students; ii++){ 
                            System.out.print("Enter a student name: ");
                            String student_name = sc.nextLine(); 

                            System.out.print("Enter a student score: "); 
                            Double student_grade = sc.nextDouble(); 

                            if(student_grade > top_grade){
                                    top_kid = student_name;
                                    top_grade = student_grade; 
                            }
                            else if(student_grade > second_top_grade && student_grade < top_grade){
                                    second_top_grade = student_grade; 
                                    second_top_kid = student_name; 
                            }
                            else{
                                    student_grade = 0.00; 
                                    student_name =""; 
                            }      
                    }
                    System.out.println("Top two students: ");
                    System.out.println( top_kid + "'s score is " + top_grade);
                    System.out.println(second_top_kid + "'s score is " + second_top_grade);
            }while(number_of_students >= 2);              
    }

    public static void main(String[] args){
            Find2Max test = new Find2Max(); 
            test.run(); 
    }        
}

我努力解决问题,我真的很接近,但我很困惑为什么我的程序似乎跳过,没有读取输入学生姓名部分我的输入。当学生数为1时,似乎也有这个问题。任何帮助都将不胜感激!:]

共有1个答案

戴正阳
2023-03-14

原始代码有许多问题:

  • 不能很好地处理线路转换
  • 不处理第二名学生成绩高于第一名的情况
  • 它不处理等级相等的角落情况

下面是一个稍微改进的版本,增加了一些额外的新行,使输出更易读。允许程序优雅地退出的一个修改是,如果提供的学生人数少于2人就退出,而不是人为地将人数设置为2人。第三条else语句被注释掉,因为不需要。

public class Find2Max {

  public void run() {
    Scanner sc = new Scanner(System.in);
    System.out.print("\nEnter the number of students (at least 2 required for comparison): ");
    int number_of_students = sc.nextInt();

    if(number_of_students < 2){
      System.out.println("\nThis program compares scores for 2 or more students.");
      // number_of_students = 2;
      return;
    }

    do{

      double top_grade = 0;
      double second_top_grade = 0;
      String top_kid = "";
      String second_top_kid= "";

      for(int ii = 0; ii < number_of_students; ii++){
        System.out.print("\nEnter a student name: ");
        String student_name = sc.next();

        System.out.print("Enter a student score: ");
        Double student_grade = sc.nextDouble();

        if(student_grade >= top_grade){
          if(top_grade >= second_top_grade) { // Save this grade as the second top
            second_top_kid = top_kid;
            second_top_grade = top_grade;
          }
          top_kid = student_name;
          top_grade = student_grade;
        }
        else if(student_grade > second_top_grade && student_grade < top_grade){
          second_top_grade = student_grade;
          second_top_kid = student_name;
        }
//        else{
//          student_grade = 0.00;
//          student_name ="";
//        }
      }
      System.out.println("\nTop two students: ");
      System.out.println( top_kid + "'s score is " + top_grade);
      System.out.println(second_top_kid + "'s score is " + second_top_grade);
    }while(number_of_students >= 2);
  }

  public static void main(String[] args){
    Find2Max test = new Find2Max();
    test.run();
  }
}
 类似资料:
  • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

  • 这里是Java新手,尝试扫描下面表单中的输入: 3 3 3 101 000 101 拜托,有更有经验的人能教我如何解决这个问题吗?我发现一些问题与。nextline()和。nextint()有类似的问题,但不完全是这样。不过,如果真的是复制品,我提前道歉... (如果需要,我会添加更多信息)

  • 我这里有两个代码块。一个扫描器正确地等待用户输入,另一个则直接通过它并调用,返回。下面是工作的块: 下面是没有的块: 这两个都是单独的类,并且是从另一个类中的main方法调用的。基本上,调用,后者又调用某个Player类的方法...这是非工作代码所在的地方。程序中是否有不适合接受输入的时候?我的印象是,任何时候我需要用户输入,我都可以使用这种方法。谢谢!

  • 作为一个文本块并按enter键,我如何创建一个包含这三行的字符串? 使用scanner.nextLine()只能得到第一行。

  • 问题内容: 我正在使用Java的扫描仪读取用户输入。如果我仅使用nextLine一次,那就可以了。使用两个nextLine时,第一个不会等待用户输入字符串(第二个会输入)。 输出: X:Y :(等待输入) 我的密码 任何想法为什么会发生这种情况?谢谢 问题答案: 您可能像以前那样调用方法。这样的程序是这样的: 演示您所看到的行为。 问题是不消耗,因此下一个调用将消耗它,然后等待读取的输入。 您需要