setter方法实际上并没有设置任何内容



我目前很困惑,为什么我的代码工作不正常,或者没有显示我想要的字符串值。

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是错误的。

  • 你应该尽量使用一致的、没有误导性的名字。

    例如,您已将songNamegetSongNamesetSongName用于字符串的数组的属性。除非打算将单个名称表示为多个字符串(这对我来说听起来很疯狂),否则songName应该是songNames,依此类推。(但在其他地方,确实使用songNames甚至Name…保持一致!!

相关内容

  • 没有找到相关文章