Création d'une application Créature avec Java, Orienté objet et Constructeurs.


Débutant ici à Java. Je travaille sur un projet où je collecte des informations d'un utilisateur pour deux types de créatures. Le menu ressemblerait à: 1. Sur terre 2. À base d'eau 3. Affichage Des Animaux 4. Quitter.

Je veux collecter les informations utilisateur auprès de l'utilisateur, puis les leur afficher. Je pense que je suis coincé sur la construction des constructeurs d'objets à partir des différents objets.

Voici ce que j'ai jusqu'à présent:

Superclasse:

package com.animal;

public class Creature {
private String size;
private String weight;

public Creature (String size, String weight){
    this.size = size;
    this.weight = weight;
}

public String getSize() {return size;}

public void setSize(String size) {this.size = size;}

public String getWeight() {return weight;   }

public void setWeight(String weight) {this.weight = weight; }

void displayCr(){
    System.out.println("***Creatures***");
    System.out.println("Size: " + size);
    System.out.println("Weight: " + weight);

C'est ma terre Sous-classe:

package com.animal;

public class Land extends Creature {
private String landAnimal;

public String getLandAnimal() {return landAnimal;}
public void setLandAnimal(String landAnimal) {this.landAnimal = landAnimal;}

public Land(String size, String weight, String landAnimal) {
    super(size, weight);
    this.landAnimal = landAnimal;

Ceci est ma sous-classe de l'eau:

package com.animal;

public class Water extends Creature {
private String fish;

public String getFish() {return fish;}
public void setFish(String fish) {this.fish = fish;}

public Water(String size, String weight, String fish) {
    super(size, weight);
    this.fish = fish;
}

Alors c'est mon Royaume appelé principal:

package com.animal;

import java.util.ArrayList;
import java.util.Scanner;


public class Kingdom {

public static void main(String[] args) {
    ArrayList<Creature> user = new ArrayList<Creature>();
    Scanner input = new Scanner(System.in); 

    int selection = 0; 
    while(selection != 4){
        System.out.println("****Main Menu****");
        System.out.println("Enter 1 for Land Animal");
        System.out.println("Enter 2 for Water Animal");
        System.out.println("Enter 3 to Display Animal");
        System.out.println("Enter 4 to quit");

        selection = input.nextInt();
        if(selection==1 || selection==2){

            Creature userInfo = null;

            System.out.println("Enter Size ");
            String size = input.next();
            System.out.println("Enter Weight: ");
            String weight = input.next();
            }
        if(selection == 1){
            System.out.println("Enter Land animal type: ");
            String landAnimal = input.next();
            //userInfo = new Land(size, weight, landAnimal);
            //user.add(userInfo);
        }
        else if(selection == 2){
            System.out.println("Enter Water animal type: ");
            String fish = input.next();
            //userInfo = new Water(size, weight, fish);

        }
        //creature.add(userInfo);
        //System.out.println(user.displayCr());

    }

J'ai l'impression d'être sur la bonne voie, mais les dernières étapes ne sont tout simplement pas en train de cliquer pour moi et j'ai travaillé là-dessus, lu, vidéos et rien ne clique.

Aussi, je m'excuse si j'ai fait les erreurs de débutant dans ce post. J'accepterai toutes les critiques, suggestions et aide comme une leçon positive. Grâce.

Author: user3591640, 2014-08-21

2 answers

Dans l'ensemble, votre code est assez juste.

Sauf: Creature userInfo = null; vous le définissez dans le premier IF, sa portée sera limitée à ce IF. Dès que vous quittez cela S'il cesse d'exister, vous ne pouvez donc pas l'utiliser dans lesFs suivants.

Considérez le changement de portée suivant:

if(selection==1 || selection==2){ // main IF
    Creature userInfo = null;
    ...
    if(selection == 1){
        ...
    }
    else {
        ...
    }
    System.out.println(userInfo.displayCr());
} // end of main IF
 0
Author: ulyssesrr, 2014-08-21 04:21:37

Tout d'abord,élargir la portée de la taille, du poids et de l'userInfo signifie le garder à l'intérieur de main mais en dehors des conditions car il est utilisé partout. Quelque chose comme cela.

    int selection = 0;
    String size = null;
    String weight = null;
    Creature userInfo = null;

Au lieu de cela creature.add(userInfo); devrait être

user.add(userInfo);

Et affichage d'appel comme ceci

userInfo.displayCr(); parce que le type de retour de la méthode est void, il ne peut donc pas être utilisé dans sysout et il devrait être à l'intérieur de cela else if(){}

 0
Author: SparkOn, 2014-08-21 04:38:34