使用Java,面向对象和构造函数创建Creature应用程序。

时间:2014-08-21 04:11:20

标签: java object constructor

这是Java的新手。我正在处理一个项目,我从用户那里收集两种类型的生物信息。菜单看起来像: 1.以土地为基础 2.水基 3.展示动物 4.退出。

我想从用户那里收集用户信息,然后将其显示给他们。我想我一直坚持从不同的对象构建对象构造函数。

这是我到目前为止所拥有的:

超类:

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

这是我的Land Subclass:

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;

这是我的Water子类:

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

然后这是我的主叫王国:

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

    }

我觉得我正走在正确的道路上,但最后的步骤并没有为我点击,我一直在研究,阅读,视频,没有任何东西在点击。

另外,如果我在这篇文章中犯了新手错误,我道歉。我将接受所有批评,建议和帮助作为积极的教训。谢谢。

2 个答案:

答案 0 :(得分:0)

总的来说,你的代码是相当正确的。

除了: Creature userInfo = null;你在第一个IF中定义它,它的范围将限制在那个IF。 一旦你离开它,它就不再存在,因此你不能在下面的IF中使用它。

考虑以下范围变更:

if(selection==1 || selection==2){ // main IF
    Creature userInfo = null;
    ...
    if(selection == 1){
        ...
    }
    else {
        ...
    }
    System.out.println(userInfo.displayCr());
} // end of main IF

答案 1 :(得分:0)

首先扩展尺寸,重量和userInfo的范围意味着将其保持在主要内部但在条件之外,因为它在任何地方都被使用。这样的事情。

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

而不是这个 creature.add(userInfo);应该是

user.add(userInfo);

并像这样调用显示

userInfo.displayCr();因为方法的返回类型是void,所以不能在sysout中使用,它应该在else if(){}