所以我已经学习了大约8周的Java,而且我必须设计一个形状猜测游戏。是的,它是家庭作业。所以我已经构建了我的四个形状类,下面是一个示例。
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.多少方面? 你的身边长度一样吗? 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];
}
}
任何读过这篇文章的人,无论如何都可能有时间开导我。非常感谢。
谢谢,
答案 0 :(得分:1)
isEqual()需要基类中的实现,形状,以及要在所有形状上调用的所有方法。使基本形状返回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,所以你必须调用形状的基本方法。但是,在运行时,如果对象是方形或矩形,当您调用shapeChoice.getSides()时,它将调用方形或矩形实现,为您提供所需的答案! :)
然后你所要做的就是循环回来,一遍又一遍地问问题,如果用户想要,让他猜,并检查他的答案! (比较.equals(shapeChoice.getName()))
所以有一个很长的(真正的)永远循环,在其中你可以问一个问题,然后检查他们是否想要回答。如果他们回答正确,你会爆发。否则,你回过头来,不断询问他们想要的提示。
编辑:实际上,现在我看一下,因为你正在练习多态,你应该多用一点。现在,您拥有单独的类,但在构建它们时,您将传递所有信息。而不是: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();
并且正方形定义的一部分固有地定义
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";
}
}
每个方形对象都是这样的,所以没有理由它应该是一个参数。这是广场定义的一部分。