我目前很困惑,为什么我的代码工作不正常,或者没有显示我想要的字符串值。
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的初学者,请容忍我的缺乏经验。
实际调用setter方法的唯一位置是在这个构造函数中:
public Song (String[] Names){
this.setName(songName);
}
但如果你仔细观察,你会发现你用错误的参数调用setter。您正在忽略Names
参数,并(实际上)将songName
设置为其当前值。这是一个禁止行动;"无所事事"的行为。
您的代码中还有其他错误。。。但我认为,如果你自己去寻找,你会学到更多。
但我想指出几个重要的风格问题:
变量名不应该以大写字母开头。调用变量
Names
是错误的。你应该尽量使用一致的、没有误导性的名字。
例如,您已将
songName
、getSongName
和setSongName
用于字符串的数组的属性。除非打算将单个名称表示为多个字符串(这对我来说听起来很疯狂),否则songName
应该是songNames
,依此类推。(但在其他地方,确实使用songNames
甚至Name
…保持一致!!)