Java 石头剪纸游戏不会运行
好的,大家好。这是我第一次在stackoverflow上,我在这里做了很多搜索,所以我想这将是一个获得一些答案的好地方。我是一个初学者程序员,目前在学校。我正在完成我的任务,制作一个石头、布、剪刀的游戏。到目前为止,我觉得我的代码很好,我编译了它,但它根本不会运行。看一看:Java 石头剪纸游戏不会运行,java,Java,好的,大家好。这是我第一次在stackoverflow上,我在这里做了很多搜索,所以我想这将是一个获得一些答案的好地方。我是一个初学者程序员,目前在学校。我正在完成我的任务,制作一个石头、布、剪刀的游戏。到目前为止,我觉得我的代码很好,我编译了它,但它根本不会运行。看一看: import java.util.Scanner; public class RPSGame { public static void gameModeSelect () { Sy
import java.util.Scanner;
public class RPSGame {
public static void gameModeSelect ()
{
System.out.println("Welcome to Rock, Paper, Scissors 1.0 !\n Please select your game mode: ");
System.out.println("1. Player vs. Computer\n 2. Player vs. Player ");
}
public static void winLoss ()
{
int P1 = 0, P2 = 0;
if (P1 == 'P' && P2 == 'R'){
System.out.println("Paper covers rock!\nPlayer one wins!");
} else if (P1 == 'R' && P2 == 'P'){
System.out.println("Paper covers rock!\nPlayer two wins!");
}
if (P1 == 'R' && P2 == 'S'){
System.out.println("Rock breaks scissors!\nPlayer one wins!");
} else if (P1 == 'S' && P2 == 'R'){
System.out.println("Rock breaks scissors!\nPlayer two wins!");
}
if (P1 == 'S' && P2 == 'P'){
System.out.println("Scissor cuts paper!\nPlayer one wins!");
} else if (P1 == 'P' && P2 == 'S'){
System.out.println("Scissor cuts paper!\nPlayer two wins!");
}
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int P1;
P1 = 0;
int P2;
P2 = 0;
int modeSelect;
modeSelect = keyboard.nextInt();
gameModeSelect ();
if (modeSelect == 1){
System.out.println("Oops, this feature in currently unavailable. Play with a friend for now :-)");
} else if (modeSelect == 2){
System.out.println("Rules of the game: R = Rock, P = Paper, S = Scissors\n Good luck! ");
System.out.println("Player one: Enter your move");
P1 = keyboard.nextInt();
System.out.println("Player two: Enter your move");
P2 = keyboard.nextInt();
} else if (modeSelect > 2){
winLoss();
}
}
}
它编译时没有错误,但没有运行,但是当我在“运行”部分输入任何内容时,会出现以下错误:
run:
S
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at RPSGame.main(RPSGame.java:41)
C:\Users\AVLG2\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 12 seconds)
我被困在这里了,我的作业明天就要交了。有什么建议吗?我们将不胜感激。顺便说一句,很高兴成为stackoverflow社区的一员 因为在
main
方法中调用了
modeSelect = keyboard.nextInt();
在打印任何东西之前。此调用将停止主线程,直到用户提供一些要读取的数据。如果数据类型为int
控制流将把您移动到下一行,如果数据类型为int
将抛出异常(就像您的情况一样,因为R
无效int
)
要让用户知道正在进行的操作,请打印说明程序正在等待其输入的消息:
System.out.print("Please provide game mode (<mode explanation here>): ");
modeSelect = keyboard.nextInt();
System.out.print(“请提供游戏模式():”;
modeSelect=keyboard.nextInt();
另外,当您向用户询问字符时,您不能使用nextInt()
,因为R
不是int
。改用next()
如果出现问题,请阅读:
如前所述,
扫描仪#nextInt()
只能解析用户输入的整数。对于字符,它抛出一个异常
以下是您的代码,并对其进行了一些小的更改:
public class RPSGame {
public static void gameModeSelect() {
System.out.println("Welcome to Rock, Paper, Scissors 1.0 !\n Please select your game mode: ");
System.out.println("1. Player vs. Computer\n 2. Player vs. Player ");
}
public static void winLoss() {
int P1 = 0, P2 = 0;
if (P1 == 'P' && P2 == 'R') {
System.out.println("Paper covers rock!\nPlayer one wins!");
} else if (P1 == 'R' && P2 == 'P') {
System.out.println("Paper covers rock!\nPlayer two wins!");
}
if (P1 == 'R' && P2 == 'S') {
System.out.println("Rock breaks scissors!\nPlayer one wins!");
} else if (P1 == 'S' && P2 == 'R') {
System.out.println("Rock breaks scissors!\nPlayer two wins!");
}
if (P1 == 'S' && P2 == 'P') {
System.out.println("Scissor cuts paper!\nPlayer one wins!");
} else if (P1 == 'P' && P2 == 'S') {
System.out.println("Scissor cuts paper!\nPlayer two wins!");
}
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String P1 = null;
String P2 = null;
int modeSelect;
gameModeSelect();
modeSelect = keyboard.nextInt();
if (modeSelect == 1) {
System.out.println("Oops, this feature in currently unavailable. Play with a friend for now :-)");
} else if (modeSelect == 2) {
System.out.println("Rules of the game: R = Rock, P = Paper, S = Scissors\n Good luck! ");
System.out.println("Player one: Enter your move");
P1 = keyboard.next();
System.out.println("Player two: Enter your move");
P2 = keyboard.next();
} else if (modeSelect > 2) {
winLoss();
}
}
}
缺少评估,但我想这取决于你
public static void gameModeSelect() {
System.out.println("Welcome to Rock, Paper, Scissors 1.0 !\n Please select your game mode: ");
System.out.println("1. Player vs. Computer\n 2. Player vs. Player ");
}
public static void winLoss(char P1, char P2) {
if (P1 == 'P' && P2 == 'R') {
System.out.println("Paper covers rock!\nPlayer one wins!");
} else if (P1 == 'R' && P2 == 'P') {
System.out.println("Paper covers rock!\nPlayer two wins!");
}
if (P1 == 'R' && P2 == 'S') {
System.out.println("Rock breaks scissors!\nPlayer one wins!");
} else if (P1 == 'S' && P2 == 'R') {
System.out.println("Rock breaks scissors!\nPlayer two wins!");
}
if (P1 == 'S' && P2 == 'P') {
System.out.println("Scissor cuts paper!\nPlayer one wins!");
} else if (P1 == 'P' && P2 == 'S') {
System.out.println("Scissor cuts paper!\nPlayer two wins!");
}
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
char P1;
char P2;
int modeSelect;
gameModeSelect();
modeSelect = keyboard.nextInt();
if (modeSelect == 1) {
System.out.println("Oops, this feature in currently unavailable. Play with a friend for now :-)");
} else if (modeSelect == 2) {
System.out.println("Rules of the game: R = Rock, P = Paper, S = Scissors\n Good luck! ");
System.out.println("Player one: Enter your move");
P1 = keyboard.next().charAt(0);
System.out.println("Player two: Enter your move");
P2 = keyboard.next().charAt(0);
winLoss(P1, P2);
}
}
我不确定这个回复是否被允许,因为我读到了“只有问题和答案”,但谢谢!我最初试图使P1和P2字符,但无法使其工作。你建议的“keyboard.next().charAt(0);”是我找不到的关键。再次感谢。我想我是从这里得到的!可能重复的