簡體   English   中英

將類對象移動到數組中的Java問題。 不確定構造函數或數組聲明是否有錯誤

[英]Java problems with moving class objects into an array. Not sure if there is a fault with the constructors or the array declaration

將我創建的對象移動到數組時遇到一些麻煩。 因此,我實際上需要做的是創建對象,而不是將它們移動到數組中。 我不太確定自己在做什么錯。

如果您認為我應該使用arraylist而不是array,請這樣說

我舉了一個簡短的示例,其數據字段少於實際程序,但與我遇到的較大問題完全相同。 感謝您的時間。

    public class Music {

private static String songTitle;
private static double songLength;
private int rating;




    public Music(String songTitle, double songLength, int rating) {
    // TODO Auto-generated constructor stub
    }
    public static String getsongTitle()
    {
        return songTitle;
    }
    public static double getsongLength()
     {
    return songLength;
    }
     public static   int rating()
    {
      return rating();
     }

     //constructors for music objects
     Music song1 = new Music ("song name", 5.32, 10);
     Music song2 = new Music ("billy",1.2, 8 );
     Music song3 = new Music ("hello", 1.5, 9 );

     static        //Create array and make posistion 0 = song1

     Music[] songDetails = new Music[3];{
      songDetails[0] = song1;
        }

       public static void main(String[] args) {
       //print first place in array
        System.out.println(songDetails[0]);


       }

Edit在代碼中存在拼寫錯誤,並且在數組聲明中缺少static一詞

這里幾乎一切都OK;)有很多方法。 只需從非靜態方法訪問songDetails(並將Music字段更改為非靜態,並實現Music構造函數):

public class TryMusic {      

    Music song1 = new Music("song name", 5.32, 10);
    Music song2 = new Music("billy", 1.2, 8);
    Music song3 = new Music("hello", 1.5, 9);
    //Create array and make posistion 0 = song1
    Music[] songDetails;// = new Music[3];

    {
       //some initializations goes here
       //...
       //create array when you know how many songs you have
       songDetails = new Music[3];
       // and now fill the array. Possibly iteration? if no then simply use {} syntax
        songDetails[0] = song1;
        songDetails[1] = song2;
        songDetails[2] = song3;
    }

    public void go() {
        //print first place in array
        System.out.println(songDetails[0]);
    }

    public static void main(String[] args) {
        new TryMusic().go();
    }
}

您可能還想這樣做:

public class TryMusic {

    //Create array and make posistion 0 = song1
    Music[] songDetails;// = new Music[3];

    {
        //if you still need initialization block, but don't need field for each song
        songDetails = new Music[3];
        //possibly iteration? if no then simply use {} syntax instead
        songDetails[0] = new Music("song name", 5.32, 10);
        songDetails[1] = new Music("billy", 1.2, 8);
        songDetails[2] = new Music("hello", 1.5, 9);
    }

    public void go() {
        //print first place in array
        System.out.println(songDetails[0]);
    }

    public static void main(String[] args) {
        new TryMusic().go();
    }
}

或此(更具可讀性):

public class TryMusic {

    //Create array and make posistion 0 = song1
    //if simply array is enough
    Music[] songDetails = { new Music("song name", 5.32, 10),
         new Music("billy", 1.2, 8),
        new Music("hello", 1.5, 9)
    };

    public void go() {
        //print first place in array
        System.out.println(songDetails[0]);
    }

    public static void main(String[] args) {
        new TryMusic().go();
    }
}

或(更靈活):

public class TryMusic {

    //Create array and make posistion 0 = song1
    List<Music> songDetails = new ArrayList(){{
       add(new Music("song name", 5.32, 10));
       add(new Music("song name", 5.32, 10));
       add(new Music("hello", 1.5, 9));
    }};


    public void go() {
        //print first place in array
        System.out.println(songDetails.get(0));
    }

    public static void main(String[] args) {
        new TryMusic().go();
    }
}

編輯提示:數組是靜態的,但初始化不是靜態的。 您在初始化塊之前錯過了static關鍵字:

public class TryMusic {

//Create array and make posistion 0 = song1
static Music[] songDetails = new Music[3];
static {
    songDetails[0] = new Music("song name", 5.32, 10);
    songDetails[1] = new Music("billy", 1.2, 8);
    songDetails[2] = new Music("hello", 1.5, 9);
}


public static void main(String[] args) {
    System.out.println(songDetails[0]);
}

}

和帶有列表的靜態版本:

    public class TryMusic {

    //Create array and make posistion 0 = song1
    static List<Music> songDetails = new ArrayList(){{
       add(new Music("song name", 5.32, 10));
       add(new Music("song name", 5.32, 10));
       add(new Music("hello", 1.5, 9));
    }};

    public static void main(String[] args) {
        System.out.println(songDetails.get(0));
    }
}

哦,我現在知道了,您的音樂課也壞了。 使用實例字段代替靜態字段,並在構造函數中分配值:

public class Music {

    private String songTitle;
    private double songLength;
    private int rating;

    public Music(String songTitle, double songLength, int rating) {
        this.songTitle = songTitle;
        this.songLength = songLength;
        this.rating = rating;

    }

    public String getsongTitle() {
        return songTitle;
    }

    public double getsongLength() {
        return songLength;
    }

    public int rating() {
        return rating;
    }

    @Override
    public String toString() {
        return "Music{" + "songTitle=" + songTitle + ", songLength=" + songLength + ", rating=" + rating + '}';
    }
}

一個非常簡單的方法是:

 //constructors for music objects
 static Music song1 = new Music ("song name", 5.32, 10);
 static Music song2 = new Music ("billy",1.2, 8 );
 static Music song3 = new Music ("hello", 1.5, 9 );

 static Music[] songDetails = { song1, song2, song3 };

 ...

 public static void main(String[] args) {

    System.out.println(songDetails[0].getsongTitle());

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM