【发布时间】: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