gongpex Posted February 16, 2014 Share Posted February 16, 2014 Hello everyone, today I test code from Head First Java book about Jukebox3 (if you have this book please see on page : 537 this is code about Jukebox3, and on page 550 about class Song implements Comparable<Song> chapter 16 about collection and data Structure) this the code about Jukebox3 : import java.util.*; import java.io.*; public class Jukebox3 { ArrayList<Song> songList = new ArrayList<Song>(); public static void main(String[] args) { new Jukebox3().go(); } void go() { getSongs(); System.out.println(songList); Collections.sort(songList); System.out.println(songList); } void getSongs() { try { File file = new File("src/SongList.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while((line = reader.readLine())!=null) { addSong(line); } // close while } catch(Exception ex) { ex.printStackTrace(); } } //close getSongs void addSong(String lineToParse) { String[] tokens = lineToParse.split("/"); Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]); songList.add(nextSong); } // close addSong } // closing class and this code about class Song implements Comparable<Song> : class Song implements Comparable<Song> { String title; String artist; String rating; String bpm; public int compareTo(Song s) { return title.compareTo(s.getTitle()); } Song(String t, String a, String r, String { title = t; artist = a; rating = r; bpm = b; } public String getTitle() { return title; } public String getArtist() { return artist; } public String getRating() { return rating; } public String getBpm() { return bpm; } public String toString() { return title; } } // closing class both of this code able to compile, but when I run it's shown message : java.lang.ArrayIndexOutOfBoundsException: 2 at Jukebox3.addSong(Jukebox3.java:35) at Jukebox3.getSongs(Jukebox3.java:25) at Jukebox3.go(Jukebox3.java:13) at Jukebox3.main(Jukebox3.java:9) [] [] Q : Why this code can be compile but when I run this code, it shown like on above? whereas, on Head First Java this code can be run well please help me Thanks Link to comment Share on other sites More sharing options...
Ingolme Posted February 16, 2014 Share Posted February 16, 2014 It says ArrayIndexOutOfBounds, which means that one of the indices is too high or negative. It's probably happening on this line: Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]); Since the array is being created by splitting a string then you have to check that the string is formed correctly. The strings are coming from src/SongList.txt so check the contents of that file. Show it here. Link to comment Share on other sites More sharing options...
gongpex Posted February 17, 2014 Author Share Posted February 17, 2014 I had delete src/SongList.txt, and change it to : File file = new File("SongList.txt"); but the result : java.io.FileNotFoundException: SongList.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileReader.<init>(Unknown Source) at Jukebox3.getSongs(Jukebox3.java:22) at Jukebox3.go(Jukebox3.java:13) at Jukebox3.main(Jukebox3.java:9) [] [] and about line : Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]); when I delete or add the one of array for instance : I delete tokens[3] or I add token[4] it won't compile. Q : how to write directory path on File file = new File("SongList.txt"); so, that java .io able to find SongList.txt without using "src/SongList.txt"? please answer thanks Link to comment Share on other sites More sharing options...
justsomeguy Posted February 17, 2014 Share Posted February 17, 2014 If the file is in the src folder, then you need to put that in the path. You need to give it the correct path, you can't point it to a file that doesn't exist. Either move the file or give it the correct path, that should be obvious. Why this code can be compile but when I run this code, it shown like on above? Array indexes like that cannot be checked at compile time. You are seeing a run-time error, not a compile-time error. It is your responsibility as a programmer to make sure that the array indexes exist before you try to use them. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now