【问题标题】:Logical Error Game program逻辑错误游戏程序
【发布时间】:2017-01-25 19:42:51
【问题描述】:

我正在尝试创建的程序是棋盘游戏的一部分:

1- 要求用户输入敌人的基础生命值(promptBaseHp())。

2- 程序生成一个乘数(2 或 3),然后将其乘以基础健康值。

3- 敌人的基础生命值必须是 5,7,9,11,13(数组字段表示这些值),这就是我遇到问题的地方,我需要检查用户输入是否符合允许的值(5, 7,9,11,13)。

有一些我无法弄清楚的错误,当我运行程序时,它会提示用户两次,即使输入了正确的值(5,7,9,11,13)。 谁能帮我正确理解这个程序的功能(输入一个值,检查值是否为 5,7,9,11,13 ,然后将其乘以 2 或 3)?

package game1;
 import java.util.Scanner;
  import java.util.Random;

   public class Enemy {
   private String [] armorTyper = {      "Fire","Water","Nature","Steel","Scales","Flesh","Dark"};
private  int [] hpValues = { 5, 7, 9, 11 ,13 };
private int enemyHP = 0 ;

Scanner scanner = new Scanner(System.in);
Random random = new Random();

  public int getFinalHp (){
   return enemyHP;
 }


public int getMultiplier (){
int multiplier = random.nextInt(1) +2 ;
return multiplier;
}


public int promptBaseHp (){

    System.out.println ("Enter base hp value (5 or 7 or 9 or 11 or 13): ");
    int hpValue = scanner.nextInt();
    System.out.println(" enemy base hp entered is :"+ hpValue);
    return hpValue;
   }


public void setBaseHp (){


boolean isAcc = comparing(promptBaseHp());

do{

if(isAcc == true){ enemyHP = getMultiplier() * promptBaseHp() ;
getFinalHp ();
}
else{ System.out.println(" must be 5/7/9/11/13 ! ");
 promptBaseHp();
 isAcc = comparing(promptBaseHp());
}
}while (isAcc == false);
}

public boolean comparing( int val) {
    boolean isAcc = false;
    for (int value : hpValues){
     isAcc = (val == value); 
     if (isAcc == true){ return isAcc; }
     else { System.out.println("invalid entery !");
     isAcc = false;}
    }
    return isAcc;
    }
}





package game1;

public class Exceutor {

 public static void main ( String [] args){

    Enemy enem = new Enemy();

    enem.getMultiplier ();
    System.out.println(" enemy hp multiplier is :"+ enem.getMultiplier());

    enem.setBaseHp ();
    enem.getFinalHp ();

    System.out.println(" enemy final hp is : "+ enem.getFinalHp());



  }

}

【问题讨论】:

    标签: java loops logic user-input


    【解决方案1】:

    强烈建议您格式化您的代码,以便您阅读更有意义。

    您显然在多个地方两次调用它:

    else{ System.out.println(" must be 5/7/9/11/13 ! ");
     promptBaseHp();
     isAcc = comparing(promptBaseHp());
    }
    

    把这个改成

    else{ System.out.println(" must be 5/7/9/11/13 ! ");
     int value = promptBaseHp();
     isAcc = comparing(value);
    }
    

    你也在这里调用了两次

    boolean isAcc = comparing(promptBaseHp());
    
    do{
    
    if(isAcc == true){ enemyHP = getMultiplier() * promptBaseHp() ;
    

    把它改成:

    int valueBaseHp = promptBaseHp();
    boolean isAcc = comparing(valueBaseHp);
    do{
    if(isAcc == true){ enemyHP = getMultiplier() * valueBaseHp ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      相关资源
      最近更新 更多