2015-10-18 103 views
0

如何比较字符串与int?我正在制作一款Rock-paper-scissors游戏,如何将用户输入的字符串转换为int,以便程序可以检查谁赢了?如用户输入“摇滚”程序注册为等?如何比较字符串与整数?

package rpc; 

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

public class Main { 
    public static void main(String[] args) { 
     /* Random number generator */ 
     Random random = new Random(); 

     /* Scanner object for input */ 
     Scanner scanner = new Scanner(System.in); 

     /* 
     * Integer variables to hold the user and computer choice. 
     * 0 = Rock 
     * 1 = Paper 
     * 2 = Scissors 
     */ 
     String userChoice; 
     int computerChoice; 

     // Showing prompt and user input 
     System.out.println("Enter move (0 = Rock; 1 = Paper; 2 = Scissors):"); 
     userChoice = scanner.nextLine(); 

     // Checking if userChoice is 0, 1, or 2. 
     if (!userChoice.equalsIgnoreCase("Scissors") && !userChoice.equalsIgnoreCase("Paper") 
      && !userChoice.equalsIgnoreCase("rock")) { 
      System.out.println("Invalid choice. Ending program."); 

      // Exit program 
      Main.main(args); 
     } 

     // Generating random computer choice 
     computerChoice = random.nextInt(3); 

     // Determining the winner 

     // If the choices are equal, it's a tie. 
     if (userChoice == computerChoice) { 
      if (userChoice == 0) { 
       System.out.println("Both players chose rock!"); 
      } else if (userChoice == 1) { 
       System.out.println("Both players chose paper!"); 
      } else { 
       System.out.println("Both players chose scissors!"); 
      } 

      // Exit program 
      System.exit(0); 
     } 

     if (userChoice == 0) {  // User chooses rock 
      if (computerChoice == 1) { 
       System.out.println("You chose rock; Computer chose paper"); 
       System.out.println("Computer wins!"); 
      } else { 
       System.out.println("You chose rock; Computer chose scissors"); 
       System.out.println("You win!"); 
      } 
     } else if (userChoice == 1) { // User chooses paper 
      if (computerChoice == 0) { 
       System.out.println("You chose paper; Computer chose rock"); 
       System.out.println("You win!"); 
      } else { 
       System.out.println("You chose paper; Computer chose scissors"); 
       System.out.println("Computer wins!"); 
      } 
     } else { // User chooses scissors 
      if (computerChoice == 0) { 
       System.out.println("You chose scissors; Computer chose rock"); 
       System.out.println("Computer wins!"); 
      } else { 
       System.out.println("You chose scissors; Computer chose paper"); 
       System.out.println("You win!"); 
      } 
     } 
     scanner.close(); 
    } 
} 
+2

'Main.main(args); //退出程序'请重新考虑。 – Tom

+1

[如何从Java中的标准输入读取整数值]可能的重复(http://stackoverflow.com/questions/2506077/how-to-read-integer-value-from-the-standard-input-in- java) – BackSlash

+0

重复[我如何使if语句有多个字符串?](https://stackoverflow.com/questions/33199575/how-do-i-make-an-if-statement-have-multiple-strings )尽管得到了正确答案,但来自同一用户的同一用户使用不同的算法 –

回答

0

只需使用pareseInt和字符串转换为int

对于前:

if(Integer.parseInt(userChoice) == computerChoice) 

确保输入是不是null formattable为int

编辑:改变parese到解析

+2

您是否注意到包含'!userChoice.equalsIgnoreCase(“Scissors”)''等检查项的'if'?所以_we_已经知道,用户输入一个字符串/单词......他应该如何解析一个int? – Tom

0

Retrieving a random item from ArrayList

这不是你的问题的确切答案(Integer.parseInt(myInt)),但你可以尝试更像这样的可读性,避免使用不必要的整数。并简化您的代码

生成您的arrayList,然后选择随机“计算机”的选择。

List<String> posibilities = Arrays.asList("rock","paper","scissors"); 
String computerChoice = possibilites.get(Math.random(3)); 

然后做你的comparaison;)

/* Chose the possibilities */ 
List<String> posibilities = Arrays.asList("rock","paper","scissors"); 

/* Scanner object for input */ 
Scanner scanner = new Scanner(System.in); 

// Showing prompt and user input 
System.out.println("Enter move (0 = Rock; 1 = Paper; 2 = Scissors):"); 
String userChoice = scanner.nextLine(); 
userChoice = possibilities.get(Integer.parseInt(userChoice)); 

// Checking if userChoice is 0, 1, or 2. 
if(!possibilities.contains(userChoice)) { 
    System.out.println("Invalid choice. Ending program."); 

    // Exit program 
    Main.main(args); 
} 

// Generating random computer choice 
String computerChoice = possibilites.get(Math.random(3)); 

// Determining the winner 

// If the choices are equal, it's a tie. 
if(userChoice.equals(computerChoice)) { 
    System.out.println("Both players chose " + userChoice); 

    // Exit program 
    System.exit(0); 
} 

System.out.println("You chose " + userChoice + "; Computer chose " + computerChoice); 
if(userChoice.equals("rock")) { // User chooses rock 
    if(computerChoice.equals("paper")) { 
      System.out.println("Computer wins!"); 
    } else { 
     System.out.println("You win!"); 
    } 
} 
else if(userChoice.equals("paper")) { // User chooses paper 
    if(computerChoice.equals("rock")) { 
     System.out.println("You win!"); 
    } else { 
     System.out.println("Computer wins!"); 
    } 
} else { // User chooses scissors 
    if(computerChoice.equals("Scissors")) { 
     System.out.println("Computer wins!"); 
    } else { 
     System.out.println("You win!"); 
    } 
} 

scanner.close(); 
+0

你读过这个问题了吗? – BackSlash

+0

嗯,是的,但代码将更直接的比较直接字符串,而不是经历整个过程转换成int。避免使用不必要的注释 – Fundhor

+0

OP没有问如何让电脑选择一个随机数,他问如何将字符串转换为int。你的回答并不合理。重新阅读这个问题。 – BackSlash

-2

使用的Integer.parseInt方法解析字符串为int,然后比较其

+0

你有没有注意到包含诸如'!userChoice.equalsIgnoreCase(“Scissors”)''的检查的'if'?所以_we_已经知道,用户输入一个字符串/单词......他应该如何解析一个int? – Tom

+2

@Tom谢谢你澄清 – idk0namz

2

你可以使用一个枚举列举的三种可能选择:

enum Hand { 

    ROCK, 
    PAPER, 
    SCISSORS; 

    public static Hand from(String input) { 
     for (Hand hand : values()) { 
      if (hand.name().equalsIgnoreCase(input)) { 
       return hand; 
      } 
     } 
     throw new IllegalArgumentException("Invalid choice: " + input); 
    } 

} 

枚举有一个n内部整数值(对应于它们定义的位置)。例如,ROCK.ordinal()将返回0。

+2

Interessting方法,但我不会依赖'ordinal'并在该枚举中创建一个'int'字段并自己定义数字。 – Tom

+0

取决于使用方法/方法。在这种情况下,我猜想数字/序数不是必需的 - 枚举可以相互比较。 – ataulm

+1

是的,他们可以比较,但OP使用随机生成_number_为计算机:P。 – Tom