这里是终极编程新手。完成有关Java的Udemy课程。与扫描仪的细节有些混淆。
应对Udemy课程中的挑战,在这种特定情况下,当我输入扫描仪信息后按Enter键时,它将继续进行下一行。因此,我可以按Enter数以千计,并且它一直在不断前进,而从未取得进展。在另一个项目中使用相同的代码似乎可以正常工作,但是这个特定项目则无效。
输入songName时,addSong方法出现问题。我已经包含了main方法,以防万一我犯了错误。主要方法中的扫描仪输入似乎工作正常。感谢您的帮助!
编辑信息:main方法中的choice
变量可以正常工作。用户应该输入一个int来进行菜单选择,并且它可以按预期工作。问题出在songName
方法中的字符串addSong
上。输入任何字符串(例如“ 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;
}
答案 0 :(得分:0)
我认为我发现问题不是需要注意Scanner
的问题是searchAlbum()
方法中的循环,因为它由于无限循环而没有完成,因此您不断按下任何东西,但是它没有任何作用,因为循环仍在运行,
所以您需要修复内部循环,因为j
不会增加到tempSongList