我目前难以理解为什么我的代码无法正常运行,或者没有显示我想要的字符串值。
public class Main {
public static void main(String[] args) {
String[] songNames = {
"Array 1",
"Array 2",
"Array 3",
"Array 4",
"Array 5",
"Array (...)",
"Array 40",
};
for (@SuppressWarnings("unused") String x : songNames) {
int minutes = 0;
int seconds = 0;
Song songTime = new Song(songNames, minutes, seconds);
seconds = songTime.getSeconds();
minutes = songTime.getMinutes();
songNames = songTime.getSongName(songNames);
Song SongTitle = new Song(songNames);
songNames = SongTitle.getSongName(songNames);
System.out.println(songNames + ": " + minutes +
" m " + seconds + " s.");
}
}
}
}
这是另一个类:
public class Song {
private String name;
/*the time durations are made up - random lengths
*/
private double minutes;
private double seconds;
public int getMinutes(){
minutes = Math.random()*15;
return (int) this.minutes;
}
public int getSeconds(){
seconds = Math.random()*59;
return (int) this.seconds;
}
public void setMinutes(int minutes){
this.minutes= minutes;
}
public void setSeconds(int seconds){
this.seconds= seconds;
}
public String getSongName() {
return name;
}
public String setSongName(String name) {
return name = this.name;
}
public Song( int minutes, int seconds){
this.minutes = getMinutes();
this.seconds= getSeconds();
}
public Song(String name){
this.getSongName();
}
public Song (String[] songNames){
name = setSongName(name);
}
}
目前name的输出是null但我希望它是“Array 1”但是由于某些原因我的编码显然没有按预期工作。我需要做些什么改变才能接受任何数组1并在控制台中显示。我发布了一个类似的帖子,其他人正在花时间帮助我,但我担心他可能刚刚停止过夜。我是java的初学者,所以请耐心等待。
答案 0 :(得分:1)
您实际调用 setter 方法的唯一位置是在此构造函数中:
public Song (String[] Names){
this.setName(songName);
}
但是如果仔细观察,你会发现你用错误的参数调用了setter。您忽略 Names
参数,并且(实际上)将songName
设置为其当前值。那是一个无操作; a"什么都不做"动作。
您的代码中还有其他错误......但如果您自己查找,我认为您会了解更多。
但我想指出一些重要的风格问题:
您永远不应该使用大写字母启动变量名称。调用变量Names
是错误的。
您应该尝试使用一致且无误导性的名称。
例如,您使用songName
,getSongName
和setSongName
作为数组字符串的属性。除非你打算将单个名称表示为多个字符串(这听起来很疯狂),那么songName
应该是songNames
,依此类推。 (但在其他地方,你做使用songNames
甚至Name
... 一致!! )