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

扫描仪工作不正常

白青青
2023-03-14

我有一个程序,允许用户输入一个数字的学生数量,他们希望分配一个等级。然后,它打印出哪一个学生在总数中(例如6个中的1个),然后提示用户输入他们的名字和分数。

我的分数工作正确,但当最后的消息显示,我不能得到最大名称和第二个最大名称显示任何东西。

Enter the number of students:2 
Student 1 of 2 
Enter Student's name:Noah 
Enter Student's score:100 
Student 2 of 2 
Enter Student's name:Ryan 
Enter Student's score:50 
The highest score was 100.0 and got it 
The second highest score was 50.0 and got it
public class TwoHighestScores {

    public static void main(String[] args) {

        //Declare variables

        // Initialize Scanner
        Scanner stdin = new Scanner(System.in);

        // Enter the number of students
        System.out.print("Enter the number of students:");
        int n = stdin.nextInt();
        double MaxValue = 0.0;
        double secondMax = 0.0;
        String MaxName = " ";
        String secondMaxName = " ";
        int count = 1;

        for (int i = 0; i < n; i++) {
            System.out.println("Student " + count + " of " + n);

            System.out.print("Enter Student's name:");
            String name = stdin.nextLine();
            stdin.nextLine();
            System.out.print(name);

            count++;

            System.out.print("Enter Student's score:");
            double score = stdin.nextDouble();

            // check
            if (score > MaxValue) {
                secondMax = MaxValue;
                MaxName = name;
                secondMaxName = MaxName;
                MaxValue = score;
            } else if (score > secondMax) {
                secondMax = score;
                secondMaxName = name;

            }
        }

        System.out.println("The highest score was " + MaxValue + " and " + MaxName + " got it");
        System.out.println("The second highest score was " + secondMax + " and " + secondMaxName + " got it");

    }
}

共有1个答案

公冶同
2023-03-14

很少问题。

1)else-if不是必需的。您可以(并且已经)将当前max“降级”为第一个if语句中的第二个max。

2)您执行该操作的顺序有误。此处的注释突出了该问题。您已通过相等的传递属性将secondmaxname设置为name

if (score > MaxValue) {
    secondMax = MaxValue;
    MaxName = name;          // Sets MaxName = name
    secondMaxName = MaxName; // secondMaxName = MaxName = name
    MaxValue = score;
} 

您可以通过简单的重新排序来解决这个问题。

if (score > MaxValue) {
    // Demote the current max
    secondMax = MaxValue;
    secondMaxName = MaxName;

    // Assign the new max
    MaxName = name;
    MaxValue = score;
} 

3)初学者的错误,但你的扫描仪没有正常工作,正如我在评论中所讨论的。

是否注意到您正在执行system.out.println(name);,但未打印名称?这是因为字符串name=stdin.nextline();实际上读取的是前面输入的数字后面的换行符,那么下面的stdin.nextline()实际上读取的是您输入的名称。

因此,您需要像这样补偿新线路

System.out.print("Enter the number of students: ");
int n = stdin.nextInt();

double MaxValue = 0.0;
double secondMax = 0.0;
String MaxName = " ";
String secondMaxName = " ";

for (int i = 1; i <= n; i++) {
    stdin.nextLine(); // Clear the newline from the Scanner

    System.out.println("Student " + i + " of " + n);

    System.out.print("Enter Student's name:");
    String name = stdin.nextLine();

    System.out.print("Enter Student's score:");
    double score = stdin.nextDouble();

    // check
    if (score > MaxValue) {
        // Demote the current max
        secondMax = MaxValue;
        secondMaxName = MaxName;

        // Assign the new max
        MaxName = name;
        MaxValue = score;
    } 
}

System.out.println("The highest score was " + MaxValue + " and " + MaxName + " got it");
System.out.println("The second highest score was " + secondMax + " and " + secondMaxName + " got it");
 类似资料:
  • 我有一个简单的Do-While循环,它使用的扫描器功能不正常。代码应该显示一个文本,提示用户输入字符串,用户输入字符串,然后程序再次显示相同的文本,并提示用户输入另一个字符串。 程序所做的是显示正确的消息,用户输入一个字符串,然后提示用户输入一个字符串,但用户输入之前没有文本。用户输入文本后,它就会正常工作。 查看我的代码,我看不出程序有任何理由在不向用户显示文本的情况下提示用户两次输入。

  • e、 (g) 此扫描仪工作不正常。但在删除close()后,它可以正常工作。 我想原因是“ystem.in”有问题。 请给我答案。 非常感谢。 )首先在a()中调用input.nextLine(),然后在b()中调用scan.nextInt()。我有错误,如NoSuchElementExcema。

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!

  • 我对的体验非常糟糕,因为我使用的是和。所以我不能做扫描仪的程序。我是新手,所以请帮助我,“找不到”。这是我到目前为止的代码。

  • 下面是我为制作一个简单游戏而编写的一些基本代码的框架: 代码未按预期工作,例如,以下是代码的预期功能: 但是,再次读取播放行存在问题,这是实际输出: 如您所见,“再次播放”之前再次显示“输入您的姓名”能够接受输入。调试时,playing变量被设置为“”,因此我看不到任何输入,也无法确定正在使用什么。任何帮助都将不胜感激,谢谢!

  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和