0

我需要帮助 我是 Java 编程新手,但我不知道如何修复我的代码。

我正在尝试制作007游戏。我已经创建了if语句并且它没有循环。如果我在-循环!中的每个语句前面添加一个,它会导致一个无限循环。dowhile

我怎样才能修复我的编程。

import java.util.Scanner;
import java.util.Random;

public class DoubleOSeven {

public static void main(String[] args) {

    System.out.println("Let's Play a game of 007 ");
    System.out.println("You can SHOOT, BLOCK, AND RELOAD");
    System.out.println("Both you and I start with one bullet");

    Scanner input = new Scanner(System.in);

    System.out.println("Let's Start, Enter (shoot, reload , or block) ");
    String INput = input.nextLine();

    //User and Computer ammo
    int Userammo = 1;
    int ammo = 1;

    //Creates a random number between 1 and 3
    Random rand = new Random();
    int  output = rand.nextInt(3) + 1;


    do{
    //User chooses shoot
    if(INput.equals("shoot")){
        Userammo --;
        System.out.println("You took a shot, Your ammo count is at: " + Userammo);

    //User chooses reload
    }else if (INput.equals("reload")){
        Userammo ++;
        System.out.println("You reloaded, Your ammo count is at: " + Userammo);

    //User chooses block    
    }else if(INput.equals("block")){
        System.out.println("You blocked, Your ammo count is at: " + Userammo);  

    //If random is 1 shoot
    }if(output == 1){
        ammo ++;
        System.out.println("I took a shot at you, My ammo count is at: " + ammo);

    //If random is 2 block
    }else if(output == 2){
        System.out.println("I blocked, My ammo count is at: " + ammo);

    //If random is 3 reload 
    }else if(output == 3){
        ammo ++;
        System.out.println("I reloaded, My ammo count is at: " + ammo);

    //If both User and Computer shoot
    }if(output ==  1 && INput == "shoot"){
        System.out.println("It's a tie you we both die");

    }
    }while((output == 3 && INput == "shoot") && (output == 1 && INput == "reload") && (output ==  1 && INput == "shoot"));

  }
}
4

4 回答 4

2
while((output == 3 && INput == "shoot") && (output == 1 && INput == "reload") && (output ==  1 && INput == "shoot"));

应该

while((output == 3 && INput.equals("shoot")) || (output == 1 && INput.equals("reload")) || (output ==  1 && INput.equals("shoot")));
于 2013-03-30T09:26:09.093 回答
0

根据您的情况如下

while((output == 3 && INput == "shoot") && (output == 1 && INput == "reload") && (output ==  1 && INput == "shoot"));

只有当 3 个条件为真时,才会执行循环。

你需要对你的病情做一些改变

于 2013-03-30T09:27:45.100 回答
0

为此循环评估的所有 && 案例都会导致错误。

假设 T 代表所有真实案例,F 代表所有 F 案例

If T&&T&&T then yes we = T (the case for adding !)
If T&&F&&F then F
IF F&&T&&F then F
...
IF F&&F&&F then F

因此,您需要重新评估要导致循环的条件。

我们在寻找

(output==3 && Input=="shoot") || (output==1 && input=="reload") || (output==1 && input=="shoot") 

导致下一次迭代?

这将证明,其中任何一个都是 T,我们得到 T。如果它们都是 F,那么我们得到 F。

于 2013-03-30T09:29:16.360 回答
0

首先:为了让循环正常工作,用户的问题和计算机的随机决定必须在循环内。这样,每个循环都有一组新的变量值。

// Declare variables 
String INput = "";
Random rand = new Random();
int output = 0;

do{
    // Ask user
    System.out.println("Enter (shoot, reload , or block) ");
    INput = input.nextLine();

    // Computer decision
    output = rand.nextInt(3) + 1;

    ...

第二:您需要明确决定何时终止循环(即游戏)。这可以通过以下方式之一完成

  • 用户想要结束游戏(quit在用户选择中需要多一个选项)
  • 计算机想要结束游戏(这需要第四个随机数,这意味着quit)。
  • 用户/计算机弹药和用户/计算机射击组合的一些条件。也就是说,如果某个玩家被击中并且弹药为零,您可以结束游戏。

在所有这些情况下,您需要

  • 在循环之前声明一个游戏结束的变量
  • 决定在循环中做什么
  • 如果游戏没有结束则继续循环

这是这个的片段:

boolean endOfGame = false;
...
do {
    ...
    if (  INput.equals("quit") 
       || (INput.equals("shoot") && ammo == 0)
       || (Userammo == 0 && output == 1) ) {
         endOfGame = true;
    } 
    ...
} while (!endOfGame);

如果你把决定放在 中,你可以有同样的效果while,但这样游戏结束的决定就更清楚了。也可以在循环中的许多不同位置设置endOfGameto true

编辑:关于编码风格等的一些注释

  • 变量的名称以小写字母开头是一种常见的良好做法(例如,而不是Userammouse userAmmo)。以大写字母开头的名称表示类。
  • 如果名称具有某种含义,它会使代码更易于阅读。例如,我会建议对您的一些变量进行以下更改
    • 输入 → 用户操作
    • 用户弹药 → 用户弹药
    • 输出 → 压缩动作
    • ammo → compAmmo
  • Use final constants to give meaning to numbers or strings that appear in your code repeatedly.
  • Start the if statement on a new line. (else if on the same line is ok)

Using these you could have written (and some comments are not needed)

public class DoubleOSeven {
    public static final String S_SHOOT = "shoot";
    public static final String S_BLOCK = "block";
    public static final String S_RELOAD = "reload";
    public static final int I_SHOOT = 1;
    public static final int I_BLOCK = 2;
    public static final int I_RELOAD = 3;

    ...
    System.out.println("Enter ("+ S_SHOOT + ", " + S_RELOAD + " or " + S_BLOCK + ") ");

    ...
    } else if(userAction.equals(S_BLOCK)){
        System.out.println("You blocked, Your ammo count is at: " + userAmmo);  
    }

    if(compAction == I_SHOOT){
        compAmmo--;    // I changed ++ to -- in order to be a fair game
        System.out.println("I took a shot at you, My ammo count is at: " + compAmmo);
    } else if(compAction == I_BLOCK){
        System.out.println("I blocked, My ammo count is at: " + compAmmo);
    ...
于 2013-03-30T14:03:38.957 回答