1

所以我已经学习 Java 大约 8 周了,在课堂上我不得不设计一个形状猜谜游戏。是的,这是家庭作业。所以我用下面的一个例子构建了我的四个形状类。

public class square extends shape {

    //square member variables
    boolean equalSides = true;

    // check if sides are equal
    public boolean isEqual() {
        return equalSides;
    }

    //constructor
    public square(int numsides, String shapeName, boolean b, String shapehint) {
        super(numsides, shapeName, shapehint);
    }
}

然后我创建了一个 shape.java 类

public class shape {

    int numSides;
    String shapeName;
    String shapeHint;

    public shape(int numsides, String shapename, String shapehint) {
        numSides = numsides;
        shapename = shapeName;
        shapehint = shapeHint;
    }

    //getter methods
    public int getSides() { 
        return numSides;
    }
    public String getName(){    
        return shapeName;
    }
    public String getHint(){
        return shapeHint;
    }
}

现在我已经达到了我开始有点挣扎的 shapeGuesser 类。我不确定如何为我的游戏和它的 JOptionPane 端加入一个守卫。我需要 shapeGuesser 运行,直到用户猜出正确的形状。

我已被指示在开始时向用户展示此选项。

我要问什么问题?

输入数字: 1. 几面?2.你的边长一样吗?3.提示

根据您输入的数字 1、2 或 3。系统将针对该形状询问该问题。因此,您的 Shape 必须准备好适当的响应。

import javax.swing.JOptionPane;
import java.util.Random;


public class shapeGuesser {
    public static void main(String[] args, Object Do) {
        // TODO Auto-generated method stub
        // the shape the program uses

        int random;         
        shape shapeChoice;      
        // create shapes
        square s = new 
                square(4, "Square", true, "Geeks were called this in the 80s");
        Rectangle r = new Rectangle(4, "Rectangle", false, "Not Pentangle");
        Triangle t = new Triangle(3, "Triangle",false, "Toblerone");
        Circle c = new Circle(0, "Circle",true, "Circle Circle Circle");

        //declare shape array
        shape[] Shapes;

        //create shape array
        Shapes = new shape[4];

        //put shape objects in shape array
        Shapes[0] = s;
        Shapes[1] = r;
        Shapes[2] = t;
        Shapes[3] = c;

        // generate random number
        random = (int) (1 + (Math.random() * 3));

        //pick shape from shape array based on random number
        shapeChoice = Shapes[random];               

    }

}

任何读到这里的人,无论如何都可能有时间启发我。将不胜感激。

谢谢,

4

1 回答 1

1

isEqual() 需要在基类 shape 中实现,就像您要在所有形状上调用的所有方法一样。让基本形状返回 false。(理想的形状应该是抽象的,所以你不能有一个基本的形状对象,只有正方形,矩形等。但没关系,你是新手,没有其他人会使用它。所以你自己永远不能创建一个基本形状. 但是对于未来,这就是抽象的 ^^) 然后,让你所有的其他形状覆盖基础 isEqual() 就像你的正方形已经做的那样。

你做得很好!您选择了一个随机形状,并创建了许多形状。

现在创建一个打印选项的循环,

system.out.println("Enter Number: 1.How many sides? 2.Are your sides the same length? 3. Hint");

然后获取用户输入,并将其解析为整数。有一个使用该整数的 if/else/else 或 switch/case。(或者,将 if/else/else 与字符串原样使用,但请确保使用 .equals() 而不是 ==)

所以现在你问了一个问题,并选择了一个。现在你打印出来

if(userInput.equals("1")){
system.outprintln("How many sides? " + shapeChoice.getSides());
}

对 2 和 3 执行相同的操作。您将处理 shapeChoice,因此您必须调用 shape 的基本方法。但是,在运行时,如果对象是正方形或矩形,当您调用 shapeChoice.getSides() 时,它将调用正方形或矩形实现,给您想要的答案!:)

然后你所要做的就是循环回来,一遍又一遍地问这个问题,如果用户想,让他猜,然后检查他的答案!(比较 .equals(shapeChoice.getName()))

所以有一个很大的 while(true) 永远循环,在里面你可以问一个问题,然后检查他们是否想回答。如果他们回答正确,你就会爆发。否则,你会循环回来,不断询问他们想要哪个提示。

编辑:实际上,现在我看它,因为您正在练习多态性,您可能应该多用一点。现在,您有单独的类,但是在构造它们时您传递了所有信息。代替:

square s = new square(4, "Square", true, "Geeks were called this in the 80s");
Rectangle r = new Rectangle(4, "Rectangle", false, "Not Pentangle");

是否更像

square s = new square();

并且有部分 square 的定义固有地定义

public class square extends shape {
//square member variables
boolean equalSides = true;
int numSides = 4;
//and so on

//OR even better, don't define them, since the base class already does!
//merely set the values in the constructor
public square(){
       numSides = 4;
       equalSides = true;
       shapeHint = "Geeks were called this in the 80s";
    }
} 

每个方形对象都会这样,所以没有理由它应该是一个参数。这是正方形定义的一部分。

于 2012-05-01T22:12:51.117 回答