Pertanyaan Objek String Array di Jawa


Saya mencoba mencetak elemen pertama pada dua larik di kelas, negara, dan nama Olahragawan saya. Saya juga perlu membuat objek yang mensimulasikan tiga upaya menyelam yang dimiliki seorang atlet (yang awalnya diatur ke nol). Saya baru mengenal OOP dan saya tidak tahu bagaimana cara melakukan hal ini di utama saya ... sejauh konstruktor pergi. Ini yang sudah saya lakukan sejauh ini ...

ini adalah yang utama:

import java.util.Random;
import java.util.List;


public class Assignment1 {
public static void main(String[] args) {
            Athlete art = new Athlete(name[0], country[0], performance[0]);   
    }
}

Aku benar-benar tidak yakin apa yang harus dilakukan ...

Dan ini adalah kelas dengan array.

 import java.util.Random;
 import java.util.List;

 public class Athlete {

public String[] name = {"Art", "Dan", "Jen"};
public String[] country = {"Canada", "Germant", "USA"};
    //Here i would like to create something that would be representing 3 dive attemps  (that relate to dive and score. eventually.)

 Athlete(String[] name, String[] country, Performance[] performance) {
    this.name = name;
    this.country=country;
    this.performance=performance;

}



public Performance Perform(Dive dive){
    dive.getDiveName();
    return null;        
}

public String[] getName() {
    return name;
}

public void setName(String[] name) {
    this.name = name;
}

public String[] getCountry() {
    return country;
}

public void setCountry(String[] country) {
    this.country = country;
}

    }

terima kasih sebelumnya atas bantuan dan masukan! btw ada kelas-kelas lain juga, hanya tidak relevan atm ..


5
2018-01-20 01:38


asal


Jawaban:


Pertama, seperti untuk kelas Olahragawan Anda, Anda dapat menghapus Getter and Setter metode karena Anda telah mendeklarasikan variabel instan dengan pengubah akses dari public. Anda dapat mengakses variabel melalui Class.variable.

Namun, jika Anda benar-benar ingin menggunakannya Getter and Setter, mengubah public pengubah menjadi private sebagai gantinya.

Kedua, untuk konstruktor, Anda mencoba melakukan teknik sederhana yang disebut shadowing. Shadowing adalah ketika Anda memiliki metode yang memiliki parameter dengan nama sebagai variabel yang dideklarasikan. Ini adalah contoh dari shadowing:
----------Shadowing sample----------
Anda memiliki kelas berikut:

public String name;

public Person(String name){
    this.name = name; // This is Shadowing
}

Dalam metode utama Anda misalnya, Anda memberi contoh Person kelas sebagai berikut:
Person person = new Person("theolc"); 

Variabel name akan sama dengan "theolc".
----------End of shadowing----------

Mari kembali ke pertanyaan Anda. Jika Anda hanya ingin mencetak elemen pertama dengan kode Anda saat ini, Anda dapat menghapus Getter and Setter. Hapus parameter Anda pada Anda constructor.

public class Athlete {

public String[] name = {"Art", "Dan", "Jen"};
public String[] country = {"Canada", "Germany", "USA"};

public Athlete() {

}

Dalam metode utama Anda, Anda bisa melakukan ini.

public static void main(String[] args) {
       Athlete art = new Athlete();   

       System.out.println(art.name[0]);
       System.out.println(art.country[0]);
    }
}

4
2018-01-20 01:56



Saat ini Anda tidak dapat mengakses array bernama nama dan negara, karena mereka adalah anggota variabel Anda Athelete kelas.

Berdasarkan apa yang terlihat seperti dirimu mencoba untuk melakukannya, ini tidak akan berfungsi.

Array ini termasuk dalam kelas utama Anda.


3
2018-01-20 01:45



Usaha Anda di kelas atlet tampaknya berhubungan dengan sekelompok atlet, yang merupakan kesalahan desain.

Tentukan kelas untuk mewakili seorang atlet tunggal, dengan bidang yang mewakili atribut atlet:

public class Athlete {
    private final String name;
    private final String country;
    private List<Performance> performances = new ArrayList<Performance>();
    // other fields as required

    public Athlete (String name, String country) {
        this.name = name;
        this.country = country;
    }
    // getters omitted

    public List<Performance> getPerformances() {
        return performances;
    }

    public Performance perform(Dive dive) {
        // not sure what your intention is here, but something like this:
        Performance p = new Performance(dive, this);
        // add new performance to list
        performances.add(p);
        return p;
    }
}

Maka metode utama Anda akan menggunakan ti seperti ini:

public class Assignment1 {
    public static void main(String[] args) {
        String[] name = {"Art", "Dan", "Jen"};
        String[] country = {"Canada", "Germant", "USA"};
        Dive[] dive = new Dive[]{new Dive("somersault"), new Dive("foo"), new Dive("bar")};
        for (int i = 0; i < name.length; i++) {
            Athlete athlete = new Athlete(name[i], country[i]);
            Performance performance = athlete.perform(dive[i]);   
            // do something with athlete and/or performance
        }
    }
}

3
2018-01-20 01:55



Saya pikir Anda sedikit kacau dengan apa yang Anda lakukan. Olahragawan adalah obyek, atlet punya nama, saya punya kota tempat tinggalnya. Atlet bisa menyelam.

public class Athlete {

private String name;
private String city;

public Athlete (String name, String city){
this.name = name;
this.city = city;
}
--create method dive, (i am not sure what exactly i has to do)
public void dive (){} 
}




public class Main{
public static void main (String [] args){

String name = in.next(); //enter name from keyboad
String city = in.next(); //enter city form keybord

--create a new object athlete and pass paramenters name and city into the object
Athlete a = new Athlete (name, city);

}
}

1
2018-01-20 01:51



public static void main (String [] args) {

        public String[] name = {"Art", "Dan", "Jen"};
        public String[] country = {"Canada", "Germant", "USA"};
        // initialize your performance array here too.

        //Your constructor takes arrays as an argument so you need to be sure to pass in the arrays and not just objects.
        Athlete art = new Athlete(name, country, performance);   

}

0
2018-01-20 01:52



Pertama, array tidak ada gunanya, mari kita menyingkirkannya: semua yang mereka lakukan adalah memberikan nilai untuk data tiruan. Bagaimana Anda membangun objek tiruan telah diperdebatkan ad nauseum, tetapi yang jelas, kode untuk menciptakan para Atlet palsu seharusnya di dalam tes unit. Saya akan menggunakan pembangun statis Joshua Bloch untuk kelas Olahragawan, tetapi Anda hanya memiliki dua atribut sekarang, jadi lewati saja dalam seorang Konstruktor. Akan terlihat seperti ini:

class Athlete {

    private String name;
    private String country;

    private List<Dive> dives;

    public Athlete(String name, String country){
       this.name = name;
       this.country = country;
    }

    public String getName(){
        return this.name;
    }

    public String getCountry(){
        return this.country;
    }

    public String getDives(){
        return this.dives;
    }

    public void addDive(Dive dive){
        this.dives.add(dive);
    }
}

Kemudian untuk kelas Dive:

class Dive {

    private Athlete athlete;
    private Date date;
    private double score;

    public Dive(Athlete athlete, double score){
        this.athlete = athlete;
        this.score = score;
        this.date = new Date();
    }

    public Athlete getAthlete(){
        return this.athlete;
    }

    public Athlete getAthlete(){
        return this.athlete;
    }

    public Athlete getAthlete(){
        return this.athlete;
    }

}

Kemudian buat tes unit dan buat kelas, dan manipulasi mereka, pastikan bahwa mereka bekerja. Saat ini mereka tidak melakukan apa pun sehingga semua yang dapat Anda lakukan adalah menegaskan bahwa mereka menahan Dives yang Anda letakkan di dalamnya. Contoh:

@Test
public void testThatDivesRetainInformation(){
    Athlete art = new Athlete("Art", "Canada");
    Dive art1 = new Dive(art, 8.5);
    Dive art2 = new Dive(art, 8.0);
    Dive art3 = new Dive(art, 8.8);
    Dive art4 = new Dive(art, 9.2);

    assertThat(art.getDives().size(), is(5));
    }

Kemudian Anda dapat melakukan dan menambahkan tes untuk hal-hal seperti, memastikan bahwa Anda tidak dapat membuat selam tanpa atlet, dll.

Anda dapat memindahkan konstruksi atlet ke dalam metode pengaturan tes sehingga Anda dapat menggunakannya di semua tempat. Kebanyakan IDE memiliki dukungan untuk melakukan itu dengan refactoring.


0
2018-01-20 02:29