String Array di oggetti in Java

Sto cercando di stampare il primo elemento su due array nel mio Atleta classe, nazione e nome. Anche io ho bisogno di creare un oggetto che simula tre tentativi di immersione che un atleta (che è inizialmente impostato a zero). Sono nuovo di OOP e non so come andare abouts fare questo nel mio principale… fino costruttori andare. Questo è quello che ho fatto finora…

questo è il principale:

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]);   
    }
}

Io davvero non so cosa fare…

E questa è la classe con le matrici.

 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;
}

    }

grazie in anticipo per qualsiasi aiuto e contributo!
btw ci sono altre classi di troppo, solo che non pertinenti bancomat..

OriginaleL’autore choloboy | 2013-01-20

6 risposte

  1. 4

    Primo, come per l’Atleta classe, è possibile rimuovere il vostro Getter and Setter metodi dal momento che avete dichiarato la vostra variabili di istanza con un modificatore di accesso di public. È possibile accedere alle variabili tramite Class.variable.

    Tuttavia, se si vuole veramente utilizzare che Getter and Setter, modificare il public modificatore private invece.

    Secondo, per il costruttore, si sta cercando di fare una semplice tecnica chiamata shadowing. Shadowing è quando si dispone di un metodo per avere un parametro con il nome della variabile dichiarata. Questo è un esempio di shadowing:

    ----------Shadowing sample----------

    Si ha la seguente classe:

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

    Nel metodo principale per esempio, viene creata un’istanza del Person classe come segue:

    Person person = new Person("theolc");

    Variabile name sarà pari a "theolc".

    ----------End of shadowing----------

    Torniamo alla tua domanda. Se si desidera stampare il primo elemento con il tuo attuale codice, è possibile rimuovere il Getter and Setter. Rimuovere i parametri sul tuo constructor.

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

    Nel metodo principale, si potrebbe fare questo.

    public static void main(String[] args) {
           Athlete art = new Athlete();   
    
           System.out.println(art.name[0]);
           System.out.println(art.country[0]);
        }
    }
    Tuttavia, non riuscivo a capire cosa stai cercando di fare con immersione.

    OriginaleL’autore

  2. 3

    Attualmente non è possibile accedere all’array di nome nome e paese, perché sono variabili membro della vostra Atleta classe.

    Basato su che cosa si guarda come se fossi cercando a che fare, questo non funzionerà.

    Queste matrici appartengono nella tua classe principale.

    OriginaleL’autore

  3. 3

    Il tentativo di un atleta di classe sembra di avere a che fare con un gruppo di atleti, che è una colpa di progettazione.

    Definire una classe per rappresentare un singolo atleta, con i campi che rappresentano l’atleta attributi:

    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;
        }
    }

    Quindi il principale metodo sarebbe utilizzare ti piace questa:

    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
            }
        }
    }

    OriginaleL’autore

  4. 1

    Penso che sono un po ‘ incasinato con ciò che si fa.
    L’atleta è un oggetto, l’atleta ha un nome, è una città in cui vive.
    Atleta può immergersi.

    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);
    
    }
    }

    OriginaleL’autore

  5. 0

    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);   
    
    }

    OriginaleL’autore

  6. 0

    Prima di tutto, le matrici sono inutili, cerchiamo di sbarazzarsi di loro: tutto quello che stanno facendo è fornire valori per i dati mock. Come costruire oggetti fittizi è stato discusso fino alla nausea, ma chiaramente, il codice per creare il falso Atleti dovrebbero essere all’interno di una unità di test. Vorrei utilizzare Joshua Bloch statico del generatore per l’Atleta classe, ma hai solo due attributi, quindi passare solo quelli di un Costruttore. Sarebbe simile a questa:

    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);
        }
    }

    Quindi per l’Immersione di classe:

    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;
        }
    
    }

    Poi fare un test di unità e basta costruire le classi, e di manipolarli, assicurarsi che si sta lavorando. Per adesso non faccio nulla di tutto ciò che si può fare è affermare che essi sono mantenendo le Immersioni che si sta mettendo in. Esempio:

    @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));
        }

    Poi si potrebbe passare attraverso e aggiungere test per cose come, facendo in modo che si può costruire una immersione senza un atleta, etc.

    Si potrebbe spostare la costruzione degli atleti nel metodo di configurazione del test in modo che si può utilizzare in tutto il luogo. L’Ide di avere il supporto per farlo con un refactoring.

    ho bisogno di utilizzare le matrici
    Sul serio? Poi mettere i valori nell’array e l’iterazione con un metodo, che chiama il costruttore, con una costante, ad esempio: nuovo Atleta(set di dati[i][nome], il set di dati[i][paese]);
    Nulla in OP parlato di TDD. Mentre che è una grande conversazione di avere, non è una risposta a questa domanda.
    Sì buon punto, votare giù una risposta che incoraggia unmentioned migliori pratiche. Grazie, .NET poliziotto!

    OriginaleL’autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *