【问题标题】:Java Scanner not accepting input when enter pressed按下输入时Java扫描仪不接受输入
【发布时间】:2018-08-04 15:27:37
【问题描述】:

这里是终极编程新手。完成关于 Java 的 Udemy 课程。对扫描仪的细节有点困惑。

处理 Udemy 课程中的挑战,在这种特定情况下,当我在输入扫描仪信息后按 Enter 键时,它只会转到下一行并继续这样做。所以我可以按回车键数千次,它只是继续前进,没有进展。另一个项目中的相同代码似乎可以工作,但这个特定项目不会。

addSong 方法在输入 songName 时出现问题。我已经包含了主要方法,以防我犯的错误在那里。主要方法中的扫描仪输入似乎工作正常。感谢您的帮助!

编辑信息:main 方法中的 choice 变量按预期工作。用户应输入一个 int 用于菜单选择,它按预期工作。问题在于addSong 方法中的字符串songName。输入任何字符串(例如“Song 1”)并按 Enter,光标只需在 IntelliJ 控制台中向下移动一行。这会无限期地发生。附上 IntelliJ 控制台的图像,在输入后显示光标向下几行。对不起,如果这没有多大意义!终极新手。

IntelliJ Console Cursor Position

public class Main {

   private static Scanner scanner = new Scanner(System.in);

   public static LinkedList addSong(LinkedList<Song> Playlist, ArrayList<Album> AlbumList){

    String songName;
    System.out.println("Enter song name: ");
    songName = scanner.nextLine();

    Song newSong = searchAlbums(songName,AlbumList);
    System.out.println("Accepted");
    if(newSong==null){
        System.out.println("Song does not exist.");
    } else {
        Playlist.add(newSong);
        System.out.println("Song added.");
    }



    return Playlist;
}

public static void main(String[] args) {
    ArrayList<Album> AlbumList = createAlbumList();
    LinkedList<Song> Playlist = createInitialPlaylist(AlbumList);

    boolean quit = false;
    int choice;

    while(!quit){
        System.out.println("================");
        System.out.println("Menu");
        System.out.println("1. Add Song to Playlist");
        System.out.println("2. View Playlist");
        System.out.println("3. View Current Song");
        System.out.println("4. Replay Current Song");
        System.out.println("5. Next Song");
        System.out.println("6. Previous Song");
        System.out.println("7. Remove Song from Playlist");
        System.out.println("8. Quit");
        choice = scanner.nextInt();
        scanner.nextLine();


        switch(choice){
            case 1:
                addSong(Playlist,AlbumList);
                break;
            case 2:
                viewPlaylist(Playlist);
                break;
            case 3:

                break;
            case 4:

                break;
            case 5:

                break;
            case 6:

                break;
            case 7:

                break;
            case 8:
                quit = true;
                break;
            default:
                System.out.println("Invalid choice. Choose 1-8");
                break;
        }
    }
}

public static Song searchAlbums(String songName, ArrayList<Album> AlbumList){
    Album tempAlbum;
    ArrayList<Song> tempSongList;
    Song tempSong;
    for(int i=0; i<AlbumList.size(); i++){
        tempAlbum = AlbumList.get(i);
        tempSongList = tempAlbum.getSongList();
        for(int j=0; j<tempSongList.size(); i++){
            tempSong = tempSongList.get(j);
            if(tempSong.getSongTitle().equals(songName)){
                return tempSong;
            }
        }
    }

    return null;
}

【问题讨论】:

  • 根据您发布的代码,您可以永远按回车而不更新choice。请确切地告诉我们您提供的输入、获得的输出以及与您期望的输出有何不同。我们不是读心术的人。
  • 抱歉,不知道需要多少信息。在顶帖中进行了更多编辑。 choice 变量有效。这是更新的,似乎按预期工作。正是addSong 方法中的songName 字符串给了press enter 永远的问题。
  • 我认为问题出在这一行searchAlbums(songName,AlbumList);
  • 代码确实打印了 addSong 方法中的 System.out.println("Enter song name: "); 行。那是它允许用户输入文本的时候,但按回车键只会一直持续下去。之后它会打印任何行。
  • 请提供函数searchAlbums的代码

标签: java intellij-idea java.util.scanner


【解决方案1】:

我想我发现问题不是 Scanner 谁需要被监视而是 searchAlbum() 方法中的循环,因为它由于无限循环而没有完成,所以你继续按下任何东西,但它没有做任何事情,因为循环仍在运行,
所以你需要修复内部循环,因为 j 不会增加以达到 tempSongList

【讨论】:

  • 你是对的!非常感谢您帮助新手并让我在别处寻找。
猜你喜欢
  • 2013-08-19
  • 2017-09-23
  • 2011-08-23
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 2017-09-04
  • 2015-12-23
相关资源
最近更新 更多