我无法找到与我的问题相关的问题。当我测试我的程序时,除了一件事之外,一切都检查正常。在我执行程序时的打印语句中,它们没有像应有的那样正确更新运行状况。
import java.util.Random;
import java.util.Scanner;
public class Dragon {
private static int health;
private static int attack;
private static boolean isAlive = true;
private static int dragonHealth;
private static int dragonAttack;
private static boolean isDragonAlive = true;
public static int getHealth() {
if(health <= 0)
{
health = 0;
}
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public static int getDamage()
{
Random generator = new Random();
int attack = generator.nextInt(10) + 1;
health = health - dragonAttack;
return attack;
}
public static boolean getAlive()
{
if(getHealth() <= 0)
{
isAlive = false;
}
return isAlive;
}
///////////////////////////////////////////////////////
public static int getDragonHealth()
{
if(dragonHealth <= 0)
{
dragonHealth = 0;
}
return dragonHealth;
}
public void setDragonHealth(int dragonHealth)
{
this.dragonHealth = dragonHealth;
}
public int getDragonAttack() {
return dragonAttack;
}
public void setDragonAttack(int dragonAttack) {
this.dragonAttack = dragonAttack;
}
public static int getDragonDamage()
{
Random generator = new Random();
int dragonAttack = generator.nextInt(10) + 1;
dragonHealth = dragonHealth - attack;
return dragonAttack;
}
public static boolean getDragonAlive()
{
if(getDragonHealth() <= 0)
{
isDragonAlive = false;
}
return isDragonAlive;
}
/////////////////////////////
public String getWelcome()
{
String welcome = "Hello and welcome to Dragonslayer!";
return welcome;
}
public static String getStab()
{
String stab = "You choose to stab the dragon and dealt " + getDamage() + " damage. The dragon now has " + getDragonHealth() + " health remaining.";
return stab;
}
public static String getSlash()
{
String slash = "You choose to slash the dragon and dealt " + getDamage() + " damage. The dragon now has " + getDragonHealth() + " health remaining.";
return slash;
}
public static String getCut()
{
String cut = "You choose to cut the dragon and dealt " + getDamage() + " damage. The dragon now has " + getDragonHealth() + " health remaining.";
return cut;
}
public static String dragonAttack()
{
String dragonsAttack = "The dragon has done " + getDragonDamage() + " to you. You now have " + getHealth() + " health remaining.";
return dragonsAttack;
}
public static String getWinner()
{
String result = "";
if(getAlive() == false && getDragonAlive() == false)
{
result = "It is a horrid day today, as both you and the dragon have fallen.";
}
else if(getAlive() == true && getDragonAlive() == false)
{
result = "Congratulations you have killed the dragon, and survived!";
}
else if(getAlive() == false && getDragonAlive() == true)
{
result = "You have sadly fallen to the dragon, better luck next time.";
}
else
{
result = "SOMETHING WENT WRONG!!!";
}
return result;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("You come across the dragon and you have two options. Do you run or fight? ");
Dragon dragon1 = new Dragon();
dragon1.setHealth(50);
Dragon dragon2 = new Dragon();
dragon2.setDragonHealth(50);
while(in.hasNextLine())
{
switch(in.nextLine())
{
case "run":
System.out.println("I am so sorry, you could not outrun the dragon, you have been killed!");
break;
case "fight":
while(getAlive() && getDragonAlive())
{
System.out.println("Do you want to stab, slash, or cut the dragon? ");
switch(in.nextLine())
{
case "stab":
System.out.println(getStab() + "\n" + dragonAttack());
break;
case "slash":
System.out.println(getSlash() + "\n" + dragonAttack());
break;
case "cut":
System.out.println(getCut() + "\n" + dragonAttack());
break;
default:
System.out.println("I am sorry that is not valid, try again. ");
}
}
break;
default:
System.out.println(getWinner());
break;
}
System.out.println("Congratulations, you have slayed the dragon!");
break;
}//end of while loop in.hasNextLine().
}//end of main
}//end of class
最佳答案
In my print statements while I execute the program, they do not update the health correctly like they should.
您的健康字段是一个静态字段,因此是类的字段,而不是实例的字段。每条龙都会共享完全相同的生命值,这不是你想要的。我建议:
- 首先创建更多类,因为您不应该在 Dragon 中拥有所有这些代码。您还应该创建一个战士类,一个代表与龙战斗的人,一个应该有自己的生命值和类似字段的类。
- 这里的大多数字段和方法都应该是非静态的。我能看到的唯一异常(exception)应该是 main 方法,仅此而已。请阅读Why are static variables considered evil?
- 我将从我的 Warrior 和 Dragon 类中获取所有用户界面代码,而让它们只专注于维护自己的状态(字段值)和行为(方法)。
- 使用另一个类进行用户交互。如果简单的话,这一切都可以在主方法中,但是这种类型的代码不能很好地“扩展”。
- 也是一个吹毛求疵的人,但永远不要使用
== true
或== false
,而是使用更简洁且易于阅读的代码,仅测试 boolean 变量或表达式本身。因此,不要使用if (foo == true)
和if (bar == false)
而是使用if (foo)
和if ( !bar)
。
例如:
class Creature {
private int health;
private int attack;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health < 0 ? 0 : health;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public boolean isAlive() {
return health > 0;
}
}
class Dragon extends Creature {
// add Dragon specific methods
}
class Warrior extends Creature {
// add Warrier specific methods
}
关于java - 修复 Java OOP 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342588/