java 播放列表和歌曲和驱动程序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33162098/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Playlist and Song and Driver
提问by pyuntae
These are my instructions:
这些是我的指示:
Write a Song class that contains the following properties along with appropriate get/set methods. Please note this is a pretty simple object and not anywhere near the level of completeness required for writing an actual music player program (especially since this program doesn't know how to read and play songs and there are no MP3 files involved!).
- Name (String) - The name of the song
- Artist (String) - The name of the band or artist
- Album (String) - The album from which the song is from
- Length (int) - The length of the song in milliseconds
Now write a class called Playlist that will manage your song objects. It should have the following properties.
- Songs (an array of data type Song) - The size is hard-coded to 12. That's all the songs we have room for in our collection.
- Count (int) - Keeps track of the total number of songs stored in the collection and also the next open position in the songs array.
Name - A string that holds the name of the playlist. This is incase you ever want to make multiple playlists. Some names for a playlist might be "Gym" or "Podcasts" but the user can enter anything they like here. You should write a getter/setter for this value.
It should have at least the following behaviors.
- void add(Song a) - Adds a Song to the collection. If the collection is full it does nothing. This could print an error to the screen if you want it to. We'll cover exceptions later in the semester and you are not expected to use them here.
- Song get(int i) - Returns the Song at the given index but doesn't remove it. You need to check the value of i to avoid accessing invalid array indices. Song remove(String name) - Removes the first Song in the collection with the given name. If it does not find a Song with that name it returns null. Yes, this requires a linear search of the Songs array.
- void print() - Prints a nicely formatted list of all the Songs in the collection.
- int size() - Returns the total number of Songs in the collection. int totalTime() - Returns the cumulative time of all the Songs in the playlist in milliseconds.
- String formattedTotalTime() Returns the cumulative time of all the Songs in the playlist in the format hh:mm:ss as a String.
- void clear() - Deletes all Songs from the collection.
Finally, write a driver class to test this out. Create a Playlist object and give it a name. Then, make a few Song objects and add them to your Playlist object. Print the collection, remove some Songs, and print the collection again. Do your best to demonstrate the full functionality of the program. This does not need to be an interactive driver. It's fine to hard-code this piece of the assignment.
编写一个 Song 类,其中包含以下属性以及适当的 get/set 方法。请注意,这是一个非常简单的对象,远不及编写实际音乐播放器程序所需的完整性级别(特别是因为该程序不知道如何读取和播放歌曲,而且不涉及 MP3 文件!)。
- 名称(字符串)- 歌曲名称
- Artist (String) - 乐队或艺术家的名字
- 专辑(字符串) - 歌曲来自的专辑
- Length (int) - 以毫秒为单位的歌曲长度
现在编写一个名为 Playlist 的类来管理您的歌曲对象。它应该具有以下属性。
- Songs(数据类型 Song 的数组)- 大小被硬编码为 12。这就是我们收藏中的所有歌曲。
- Count (int) - 跟踪存储在集合中的歌曲总数以及歌曲数组中的下一个打开位置。
名称 - 包含播放列表名称的字符串。这是因为您想制作多个播放列表。播放列表的某些名称可能是“健身房”或“播客”,但用户可以在此处输入他们喜欢的任何内容。您应该为此值编写一个 getter/setter。
它至少应该具有以下行为。
- void add(Song a) - 向集合中添加一首歌曲。如果集合已满,则不执行任何操作。如果您愿意,这可能会在屏幕上打印错误。我们将在本学期晚些时候介绍例外情况,您不应在此处使用它们。
- Song get(int i) - 返回给定索引处的歌曲,但不删除它。您需要检查 i 的值以避免访问无效的数组索引。 Song remove(String name) - 删除集合中具有给定名称的第一首歌曲。如果没有找到具有该名称的歌曲,则返回 null。是的,这需要对 Songs 数组进行线性搜索。
- void print() - 打印集合中所有歌曲的格式良好的列表。
- int size() - 返回集合中的歌曲总数。 int totalTime() - 以毫秒为单位返回播放列表中所有歌曲的累计时间。
- String formattedTotalTime() 以字符串形式以 hh:mm:ss 格式返回播放列表中所有歌曲的累计时间。
- void clear() - 从集合中删除所有歌曲。
最后,编写一个驱动程序类来测试这一点。创建一个播放列表对象并为其命名。然后,制作一些 Song 对象并将它们添加到您的播放列表对象中。打印集合,删除一些歌曲,然后再次打印集合。尽最大努力展示程序的全部功能。这不需要是交互式驱动程序。可以对这部分作业进行硬编码。
Additional Notes
补充笔记
When you remove a Song from the list you can't leave an empty spot in the array. How will you deal with this? DO NOT use an ArrayList to manage your Songs, you must use an array. DO NOT extend ArrayList for this assignment. We'll do that later ;-) You are free to write additional "helper" methods if you want to do so. The methods I've listed are the minimum requirements for the assignment. You are always free to add more if it helps.
当您从列表中删除歌曲时,您不能在数组中留下空白位置。你将如何处理这个问题?不要使用 ArrayList 来管理您的歌曲,您必须使用数组。不要为此分配扩展 ArrayList。我们稍后会这样做;-) 如果您愿意,您可以随意编写其他“帮助程序”方法。我列出的方法是分配的最低要求。如果有帮助,您可以随时添加更多内容。
What to SubmitYour .java files for the Song, Playlist, and Driver classes.
为 Song、Playlist 和 Driver 类提交.java 文件的内容。
This is what I have:
这就是我所拥有的:
Song.java
歌曲.java
public class Song {
public String name;
public String artist;
public String album;
public int length;
public Song(String songName, String artistName, String albumName, int trackLength) {
this.name = name;
this.artist = artist;
this.album = album;
this.length = length;
}
public void setName(String songName) {
name = songName;
}
public String getName() {
return name;
}
public void setArtist(String artistName) {
artist = artistName;
}
public String getArtist() {
return artist;
}
public void setAlbum(String albumName) {
album = albumName;
}
public String getAlbum() {
return album;
}
public void setLength(int h, int m, int s) {
length = (h*3600 + m*60 + s);
if(h==0) {
length = (m*60+s);
}
}
public int getLength() {
return length;
}
public String toString() {
return "Title: " + getName() + ", Artist: " + getArtist()
+ ", Album: " + getAlbum() + ", Track Length: " + getLength();
}
}
Playlist.java
播放列表.java
public class Playlist {
private Song[] songs;
private int count;
private String playlistName;
public Playlist() {
songs = new Song[12];
count = 0;
}
public String getPlaylistName() {
return playlistName;
}
public void setPlayListName() {
this.playlistName = playlistName;
}
public void add(Song a) {
if(count == songs.length) {
System.out.println("ERROR: Collection is full. Songs were not added to the Playlist.");
}
songs[count] = a;
count++;
}
public Song get(int i) {
if(count > i) {
return songs[i];
}
else {
return null;
}
}
public Song remove(String name) {
boolean found = false;
int indexToRemove = 0;
while(indexToRemove < count && !found) {
if(songs[indexToRemove].getName().equals(name)) {
found = true;
}
else {
indexToRemove++;
}
}
if(indexToRemove < count) {
for(int from = indexToRemove + 1; from < count; from++) {
songs[from-1] = songs[from];
}
songs[count-1] = null;
count--;
}
return null;
}
public void print() {
String result = "NumSongs = " + count
+ " / PlayList song limit = " + songs.length + "\n";
for (int i=0; i<count; i++) {
result += ("songList[" + i + "] = <"
+ songs[i] + ">\n");
}
System.out.println(result.toString() + "\n");
}
public int size() {
return count;
}
public int totalTime() {
int totalTime = 0;
for (int i=0; i<count; i++) {
totalTime = songs[i].getLength();
}
return totalTime;
}
public String formattedTotalTime() {
long h, m, s;
String lengthString;
s = Song.length;
m = s/60;
s = s%60;
h = m/60;
m = m%60;
lengthString = String.format("%02d",h) + ":" +
String.format("%02d",m) + ":" +
String.format("%02d",s);
return lengthString;
}
public void clear() {
for (int i=0; i<songs.length; i++) {
songs[i] = null;
count = 0;
}
return ;
}
}
Driver class
驱动程序类
public class SongDriver {
public static void main(String[] args) {
Playlist one = new Playlist();
Song song1 = new Song("Hotline Bling", "Drake", "Hotline Bing - Single", 267000);
Song song2 = new Song("What Do You Mean?", "Justin Bieber", "What Do You Mean? - Single", 207000);
Song song3 = new Song("Watch Me", "Silento", "Watch Me (Whip / Nae Nae) - Single", 185000);
Song song4 = new Song("679", "Fetty Wap ft. Remy Boyz", "Fetty Wap", 185000);
Song song5 = new Song("Can't Feel My Face", "The Weeknd", "Beauty Behind the Madness", 213000);
Song song6 = new Song("Good for You", "Selena Gomez ft. A$AP Rocky", "Good for You - Single", 221000);
Song song7 = new Song("If You", "Big Bang", "MADE", 264000);
one.add(song1);
one.add(song2);
one.add(song3);
one.add(song4);
one.add(song5);
one.add(song6);
one.add(song7);
Playlist.print();
one.remove("679");
one.remove("Watch Me");
Playlist.print();
Playlist.clear();
}
}
My problem is that my output doesn't come out the way I want it to come out...
我的问题是我的输出没有按照我想要的方式出现......
----jGRASP exec: java SongDriver
NumSongs = 7 / PlayList song limit = 12
songList[0] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[1] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[2] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[3] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[4] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[5] = <Title: null, Artist: null, Album: null, Track Length: 0>
songList[6] = <Title: null, Artist: null, Album: null, Track Length: 0>
Exception in thread "main" java.lang.NullPointerException
at Playlist.remove(Playlist.java:38)
at SongDriver.main(SongDriver.java:24)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
The list doesn't show up, everything is just a null which i don't get why. The Track length isn't in hh:mm:ss and it's all just zeros. I converted each length of the song to milliseconds and put it as milliseconds in the Driver class. And I do not get why it keeps throwing nullpointerException at
列表没有出现,一切都只是一个空值,我不明白为什么。轨道长度不在 hh:mm:ss 中,并且全部为零。我将歌曲的每个长度转换为毫秒,并将其作为毫秒放在 Driver 类中。我不明白为什么它一直在抛出 nullpointerException
if(songs[indexToRemove].getName().equals(name)) {
Any help would be appreaciated! Thanks.
任何帮助将被赞赏!谢谢。
UPDATEI removed the static and made the changes provided but now when i compile the collection, i get errors saying non-static method cannot be referenced from a static context which is why I put the statics in the first place, so i don't understand...
更新我删除了静态并进行了提供的更改,但是现在当我编译集合时,我收到错误消息,说无法从静态上下文中引用非静态方法,这就是为什么我将静态放在首位,所以我没有理解...
----jGRASP exec: javac -g @Playlist_source_files_1673083996069575159jgr
SongDriver.java:22: error: non-static method print() cannot be referenced from a static context
Playlist.print();
^
SongDriver.java:27: error: non-static method print() cannot be referenced from a static context
Playlist.print();
^
SongDriver.java:28: error: non-static method clear() cannot be referenced from a static context
Playlist.clear();
^
Playlist.java:78: error: non-static variable length cannot be referenced from a static context
s = Song.length;
^
4 errors
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
UPDATE 2//track length
更新 2 //轨道长度
CHANGED: Song.java
更改:Song.java
public void setLength(int trackLength) {
length = trackLength;
}
CHANGED: Playlist.java
更改:Playlist.java
public String formattedTotalTime() {
long time = totalTime();
String lengthString;
double overflow = time;
long h = time / HOURS;
long overFlow = time % HOURS;
long m = overFlow / MINS;
overFlow = time % MINS;
long s = overFlow / SECS;
lengthString = String.format("%02d",h) + ":" +
String.format("%02d",m) + ":" +
String.format("%02d",s);
return lengthString;
}
ADDED: Playlist.java
添加:播放列表.java
public static long HOURS = 60 * 60 * 1000;
public static long MINS = 60 * 1000;
public static long SECS = 1000;
UPDATE 3//Still not working
更新 3//仍然无法正常工作
> ----jGRASP exec: java SongDriver
NumSongs = 7 / PlayList song limit = 12
songList[0] = <Title: Hotline Bling, Artist: Drake, Album: Hotline Bing - Single, Track Length: 267000>
songList[1] = <Title: What Do You Mean?, Artist: Justin Bieber, Album: What Do You Mean? - Single, Track Length: 207000>
songList[2] = <Title: Watch Me, Artist: Silento, Album: Watch Me (Whip / Nae Nae) - Single, Track Length: 185000>
songList[3] = <Title: 679, Artist: Fetty Wap ft. Remy Boyz, Album: Fetty Wap, Track Length: 185000>
songList[4] = <Title: Can't Feel My Face, Artist: The Weeknd, Album: Beauty Behind the Madness, Track Length: 213000>
songList[5] = <Title: Good for You, Artist: Selena Gomez ft. A$AP Rocky, Album: Good for You - Single, Track Length: 221000>
songList[6] = <Title: If You, Artist: Big Bang, Album: MADE, Track Length: 264000>
NumSongs = 6 / PlayList song limit = 12
songList[0] = <Title: Hotline Bling, Artist: Drake, Album: Hotline Bing - Single, Track Length: 267000>
songList[1] = <Title: What Do You Mean?, Artist: Justin Bieber, Album: What Do You Mean? - Single, Track Length: 207000>
songList[2] = <Title: Watch Me, Artist: Silento, Album: Watch Me (Whip / Nae Nae) - Single, Track Length: 185000>
songList[3] = <Title: Can't Feel My Face, Artist: The Weeknd, Album: Beauty Behind the Madness, Track Length: 213000>
songList[4] = <Title: Good for You, Artist: Selena Gomez ft. A$AP Rocky, Album: Good for You - Single, Track Length: 221000>
songList[5] = <Title: If You, Artist: Big Bang, Album: MADE, Track Length: 264000>
NumSongs = 5 / PlayList song limit = 12
songList[0] = <Title: Hotline Bling, Artist: Drake, Album: Hotline Bing - Single, Track Length: 267000>
songList[1] = <Title: What Do You Mean?, Artist: Justin Bieber, Album: What Do You Mean? - Single, Track Length: 207000>
songList[2] = <Title: Can't Feel My Face, Artist: The Weeknd, Album: Beauty Behind the Madness, Track Length: 213000>
songList[3] = <Title: Good for You, Artist: Selena Gomez ft. A$AP Rocky, Album: Good for You - Single, Track Length: 221000>
songList[4] = <Title: If You, Artist: Big Bang, Album: MADE, Track Length: 264000>
NumSongs = 0 / PlayList song limit = 12
----jGRASP: operation complete.
Playlist.java
播放列表.java
public class Playlist {
public static long HOURS = 60 * 60 * 1000;
public static long MINS = 60 * 1000;
public static long SECS = 1000;
private Song[] songs;
private int count;
private String playlistName;
public Playlist() {
songs = new Song[12];
count = 0;
}
public String getPlaylistName() {
return playlistName;
}
public void setPlayListName() {
this.playlistName = playlistName;
}
public void add(Song a) {
if(count == songs.length) {
System.out.println("ERROR: Collection is full. Songs were not added to the Playlist.");
}
songs[count] = a;
count++;
}
public Song get(int i) {
if(count > i) {
return songs[i];
}
else {
return null;
}
}
public Song remove(String name) {
boolean found = false;
int indexToRemove = 0;
while(indexToRemove < count && !found) {
if(songs[indexToRemove].getName().equals(name)) {
found = true;
}
else {
indexToRemove++;
}
}
if(indexToRemove < count) {
for(int from = indexToRemove + 1; from < count; from++) {
songs[from-1] = songs[from];
}
songs[count-1] = null;
count--;
}
return null;
}
public void print() {
String result = "NumSongs = " + count
+ " / PlayList song limit = " + songs.length + "\n";
for (int i=0; i<count; i++) {
result += ("songList[" + i + "] = <"
+ songs[i] + ">\n");
}
System.out.println(result.toString() + "\n");
}
public int size() {
return count;
}
public int totalTime() {
int totalTime = 0;
for (int i=0; i<count; i++) {
totalTime += songs[i].getLength();
}
return totalTime;
}
public String formattedTotalTime() {
long time = totalTime();
String lengthString;
double overflow = time;
long h = time / HOURS;
long overFlow = time % HOURS;
long m = overFlow / MINS;
overFlow = time % MINS;
long s = overFlow / SECS;
lengthString = String.format("%02d",h) + ":" +
String.format("%02d",m) + ":" +
String.format("%02d",s);
return lengthString;
}
public void clear() {
for (int i=0; i<songs.length; i++) {
songs[i] = null;
count = 0;
}
return ;
}
}
Song.java
歌曲.java
public class Song {
public String name;
public String artist;
public String album;
public int length;
public Song(String songName, String artistName, String albumName, int trackLength) {
this.name = songName;
this.artist = artistName;
this.album = albumName;
this.length = trackLength;
}
public void setName(String songName) {
name = songName;
}
public String getName() {
return name;
}
public void setArtist(String artistName) {
artist = artistName;
}
public String getArtist() {
return artist;
}
public void setAlbum(String albumName) {
album = albumName;
}
public String getAlbum() {
return album;
}
public void setLength(int trackLength) {
length = trackLength;
}
public int getLength() {
return length;
}
public String toString() {
return "Title: " + getName() + ", Artist: " + getArtist()
+ ", Album: " + getAlbum() + ", Track Length: " + getLength();
}
}
Driver class:
驱动类:
public class SongDriver {
public static void main(String[] args) {
Playlist one = new Playlist();
Song song1 = new Song("Hotline Bling", "Drake", "Hotline Bing - Single", 267000);
Song song2 = new Song("What Do You Mean?", "Justin Bieber", "What Do You Mean? - Single", 207000);
Song song3 = new Song("Watch Me", "Silento", "Watch Me (Whip / Nae Nae) - Single", 185000);
Song song4 = new Song("679", "Fetty Wap ft. Remy Boyz", "Fetty Wap", 185000);
Song song5 = new Song("Can't Feel My Face", "The Weeknd", "Beauty Behind the Madness", 213000);
Song song6 = new Song("Good for You", "Selena Gomez ft. A$AP Rocky", "Good for You - Single", 221000);
Song song7 = new Song("If You", "Big Bang", "MADE", 264000);
one.add(song1);
one.add(song2);
one.add(song3);
one.add(song4);
one.add(song5);
one.add(song6);
one.add(song7);
one.print();
one.remove("679");
one.print();
one.remove("Watch Me");
one.print();
one.clear();
one.print();
}
}
采纳答案by MadProgrammer
First, get rid of your static
references to you class's fields
首先,摆脱对static
类字段的引用
public class Song {
public static String name;
public static String artist;
public static String album;
public static int length;
This basically means that EVERY instance of Song
will have the EXACT same values as each other (those which were applied last)
这基本上意味着每个实例都Song
将具有彼此完全相同的值(最后应用的值)
Next, in your Song
's constructor, actually assign the parameters to your fields...
接下来,在您Song
的构造函数中,实际将参数分配给您的字段...
public Song(String songName, String artistName, String albumName, int trackLength) {
this.name = name;
this.artist = artist;
this.album = album;
this.length = length;
}
In this context, this.name = name;
is simply assigning the value back to itself. Instead you want to do something more like...
在这种情况下,this.name = name;
只是将值分配回自身。相反,你想做一些更像......
public Song(String songName, String artistName, String albumName, int trackLength) {
this.name = songName;
this.artist = artistName;
this.album = albumName;
this.length = trackLength;
}
Next, I'd remove all static
modifiers to your methods...
接下来,我将删除static
您方法的所有修饰符...
public static String getArtist() {
should be
应该
public String getArtist() {
for example.
例如。
I strongly recommend that you go back through the rest of your code and make sure you haven't made the same mistakes
我强烈建议您返回代码的其余部分并确保您没有犯同样的错误
But now there is just one last thing. The track length time is supposed to be in hh:mm:ss format but it's still in milliseconds
但现在只有最后一件事。轨道长度时间应该是 hh:mm:ss 格式,但它仍然以毫秒为单位
It's been a long time since I've needed to do this, but in the past, I've used something like...
自从我需要这样做已经很长时间了,但在过去,我使用过类似......
public static long HOURS = 60 * 60 * 1000;
public static long MINS = 60 * 1000;
public static long SECS = 1000;
public static void main(String[] args) {
long time = (1 * HOURS) + (30 * MINS);
double overflow = time;
long h = time / HOURS;
long overFlow = time % HOURS;
long m = overFlow / MINS;
overFlow = time % MINS;
long s = overFlow / SECS;
System.out.printf("%02d:%02d.%02d%n", h, m, s);
}
All the test code...
所有测试代码...
package javaapplication620;
public class SongDriver {
public static void main(String[] args) {
Playlist one = new Playlist();
Song song1 = new Song("Hotline Bling", "Drake", "Hotline Bing - Single", 267000);
Song song2 = new Song("What Do You Mean?", "Justin Bieber", "What Do You Mean? - Single", 207000);
Song song3 = new Song("Watch Me", "Silento", "Watch Me (Whip / Nae Nae) - Single", 185000);
Song song4 = new Song("679", "Fetty Wap ft. Remy Boyz", "Fetty Wap", 185000);
Song song5 = new Song("Can't Feel My Face", "The Weeknd", "Beauty Behind the Madness", 213000);
Song song6 = new Song("Good for You", "Selena Gomez ft. A$AP Rocky", "Good for You - Single", 221000);
Song song7 = new Song("If You", "Big Bang", "MADE", 264000);
one.add(song1);
one.add(song2);
one.add(song3);
one.add(song4);
one.add(song5);
one.add(song6);
one.add(song7);
one.print();
one.remove("679");
one.remove("Watch Me");
one.print();
one.clear();
}
public static long HOURS = 60 * 60 * 1000;
public static long MINS = 60 * 1000;
public static long SECS = 1000;
public static class Playlist {
private Song[] songs;
private int count;
private String playlistName;
public Playlist() {
songs = new Song[12];
count = 0;
}
public String getPlaylistName() {
return playlistName;
}
public void setPlayListName() {
this.playlistName = playlistName;
}
public void add(Song a) {
if (count == songs.length) {
System.out.println("ERROR: Collection is full. Songs were not added to the Playlist.");
}
songs[count] = a;
count++;
}
public Song get(int i) {
if (count > i) {
return songs[i];
} else {
return null;
}
}
public Song remove(String name) {
boolean found = false;
int indexToRemove = 0;
while (indexToRemove < count && !found) {
if (songs[indexToRemove].getName().equals(name)) {
found = true;
} else {
indexToRemove++;
}
}
if (indexToRemove < count) {
for (int from = indexToRemove + 1; from < count; from++) {
songs[from - 1] = songs[from];
}
songs[count - 1] = null;
count--;
}
return null;
}
public void print() {
String result = "NumSongs = " + count
+ " / PlayList song limit = " + songs.length + "\n";
for (int i = 0; i < count; i++) {
result += ("songList[" + i + "] = <"
+ songs[i] + ">\n");
}
result += " / " + formattedTotalTime();
System.out.println(result.toString());
}
public int size() {
return count;
}
public int totalTime() {
int totalTime = 0;
for (int i = 0; i < count; i++) {
totalTime += songs[i].getLength();
}
return totalTime;
}
public String formattedTotalTime() {
return formatTime(totalTime());
}
public void clear() {
for (int i = 0; i < songs.length; i++) {
songs[i] = null;
count = 0;
}
return;
}
}
public static class Song {
public String name;
public String artist;
public String album;
public int length;
public Song(String songName, String artistName, String albumName, int trackLength) {
this.name = songName;
this.artist = artistName;
this.album = albumName;
this.length = trackLength;
}
public void setName(String songName) {
name = songName;
}
public String getName() {
return name;
}
public void setArtist(String artistName) {
artist = artistName;
}
public String getArtist() {
return artist;
}
public void setAlbum(String albumName) {
album = albumName;
}
public String getAlbum() {
return album;
}
public void setLength(int h, int m, int s) {
length = (h * 3600 + m * 60 + s);
if (h == 0) {
length = (m * 60 + s);
}
}
public int getLength() {
return length;
}
public String toString() {
return "Title: " + getName() + ", Artist: " + getArtist()
+ ", Album: " + getAlbum() + ", Track Length: " + formatTime(getLength());
}
}
public static String formatTime(long time) {
long overflow = time;
long h = time / HOURS;
overflow = time % HOURS;
long m = overflow / MINS;
overflow = time % MINS;
long s = overflow / SECS;
return String.format("%02d:%02d.%02d", h, m, s);
}
}
This test code currently prints out
此测试代码当前打印出来
NumSongs = 7 / PlayList song limit = 12
songList[0] = <Title: Hotline Bling, Artist: Drake, Album: Hotline Bing - Single, Track Length: 00:04.27>
songList[1] = <Title: What Do You Mean?, Artist: Justin Bieber, Album: What Do You Mean? - Single, Track Length: 00:03.27>
songList[2] = <Title: Watch Me, Artist: Silento, Album: Watch Me (Whip / Nae Nae) - Single, Track Length: 00:03.05>
songList[3] = <Title: 679, Artist: Fetty Wap ft. Remy Boyz, Album: Fetty Wap, Track Length: 00:03.05>
songList[4] = <Title: Can't Feel My Face, Artist: The Weeknd, Album: Beauty Behind the Madness, Track Length: 00:03.33>
songList[5] = <Title: Good for You, Artist: Selena Gomez ft. A$AP Rocky, Album: Good for You - Single, Track Length: 00:03.41>
songList[6] = <Title: If You, Artist: Big Bang, Album: MADE, Track Length: 00:04.24>
/ 00:25.42
NumSongs = 5 / PlayList song limit = 12
songList[0] = <Title: Hotline Bling, Artist: Drake, Album: Hotline Bing - Single, Track Length: 00:04.27>
songList[1] = <Title: What Do You Mean?, Artist: Justin Bieber, Album: What Do You Mean? - Single, Track Length: 00:03.27>
songList[2] = <Title: Can't Feel My Face, Artist: The Weeknd, Album: Beauty Behind the Madness, Track Length: 00:03.33>
songList[3] = <Title: Good for You, Artist: Selena Gomez ft. A$AP Rocky, Album: Good for You - Single, Track Length: 00:03.41>
songList[4] = <Title: If You, Artist: Big Bang, Album: MADE, Track Length: 00:04.24>
/ 00:19.32
回答by Yassin Hajaj
All your fields and getters are static when it should be referring to instance fields :
当应该引用实例字段时,所有字段和 getter 都是静态的:
public static String getName() {
return name;
}
Should really be :
真的应该是:
public String getName(){
return name;
}
And
和
public static String name;
public static String artist;
public static String album;
public static int length;
Should be :
应该 :
private String name;
private String artist;
private String album;
private int length;
Otherwise, like I said, you were referring to class variables when your logic needs instance variables.
否则,就像我说的,当您的逻辑需要实例变量时,您指的是类变量。