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

用扫描仪读取输入;输出打印两次[重复]

邬博涉
2023-03-14

我有以下课程

import java.util.Scanner;

public class Album{

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        System.out.println("How many songs do your CD contain?");
        int songs = sc.nextInt();

        String[] songNames = new String[songs];

        for (int i = 0; i < songs; i++) {
            System.out.println("Please enter song nr " + (i+1) + ": ");
            songNames[i] = sc.nextLine();
            // What is wrong here? (See result for this line of code)
            // It is working when I use "sc.next();"
            // but then I can't type a song with 2 or more words.
            // Takes every word for a new song name. 
        }

        System.out.println();
        System.out.println("Your CD contains:");
        System.out.println("=================");
        System.out.println();

        for (int i = 0; i < songNames.length; i++) {
            System.out.println("Song nr " + (i+1) + ": " + songNames[i]);
        }
    }
}

我不能输入歌曲名nr 1,因为它总是同时显示前两首歌。

如果我输入3,就像这样:

How many songs do your CD contain?
3
Please enter song nr 1:
Please enter song nr 2: 

共有3个答案

管梓
2023-03-14

sc.nextLine()之后添加一个sc.nextLine(),你的代码就可以正常工作了。

原因是在你输入歌曲名称后,行尾结束了。

司空炯
2023-03-14

添加sc.nextLine() int songs=sc.nextInt()之后

一旦您输入一个数字,并使用扫描仪(作为数字)使用sc.nextInt();读取它,换行符将出现在输入流中,当您执行sc.nextLine()时将被读取。因此,要跳过它,您需要在sc.nextInt()之后调用sc.nextLine()

邹俊拔
2023-03-14

改变

int songs=sc.nextInt()

至:

int songs=Integer。parseInt(sc.nextLine()。修剪())

它会工作得很好。

您不应将nextInt的用法与nextLine混用。

 类似资料:
  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。

  • 我正在制作一个地下城探索类型的游戏,用户可以输入输入作为一个移动每回合(选择一个方向移动)。然而,我遇到了一个问题与采取扫描仪输入。当我测试我的方法一次,它是正确的,然而,当我把它进入一个while循环,以便我可以从玩家的每一个回合,我得到一个新的移动,在第一次输入后,我得到了一个错误。我不明白为什么我会得到这个错误,因为它不应该每次运行时都扫描新的输入吗?谢谢你的洞察力。 错误如下: 下面是有问

  • 问题内容: 我正在尝试让扫描仪在循环中进行输入。一旦用户想要完成操作,他就可以退出此循环。我尝试了许多不同的方法来执行此操作,但始终存在一些问题。这是代码: 上面代码的问题(在我尝试的其他方法上也会发生)是,当用户键入 Y时 ,将跳过名字的第一个输入,并跳转到姓氏。如果用户键入 N, 则循环将正确停止。有人可以解释发生这种情况的原因,以及如何克服使用课堂的问题? ps:执行类似的操作,将导致循环终

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 我正在使用Java的扫描仪读取用户输入。如果我只使用nextLine一次,它可以正常工作。对于两个nextLine,第一个不等待用户输入字符串(第二个)。 输出: X:Y:(等待输入) 我的代码 你知道为什么会发生这种事吗?谢谢