setter方法实际上并没有设置任何东西

时间:2014-10-05 05:57:17

标签: java arrays class main

我目前难以理解为什么我的代码无法正常运行,或者没有显示我想要的字符串值。

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的初学者,所以请耐心等待。

1 个答案:

答案 0 :(得分:1)

您实际调用 setter 方法的唯一位置是在此构造函数中:

public Song (String[] Names){
    this.setName(songName);
}

但是如果仔细观察,你会发现你用错误的参数调用了setter。您忽略 Names参数,并且(实际上)将songName设置为其当前值。那是一个无操作; a"什么都不做"动作。


您的代码中还有其他错误......但如果您自己查找,我认为您会了解更多。

但我想指出一些重要的风格问题:

  • 您永远不应该使用大写字母启动变量名称。调用变量Names是错误的。

  • 您应该尝试使用一致且无误导性的名称。

    例如,您使用songNamegetSongNamesetSongName作为数组字符串的属性。除非你打算将单个名称表示为多个字符串(这听起来很疯狂),那么songName应该是songNames,依此类推。 (但在其他地方,你使用songNames甚至Name ... 一致!!