Я знаю, что это задание java было задано здесь снова и снова, но вместо копирования других методов (поскольку, кажется, существует множество способов написания такого кода), я бы скорее хотел помочь на шахтах, чтобы я мог больше - легко понять понятия. Кроме того, профессор, вероятно, мог бы легко проверить, изменен ли я, ха-ха.
Ошибок с этим кодом нет, однако он не работает, как предполагается. Выходы просто... случайные.
Я чувствую, что мне не хватает целой части кода, но я читал свой учебник снова и снова и, похоже, не обнаружил происхождение ошибки. : | Пожалуйста помоги!
edit: Я обновил свой пост много с фиксированными изменениями.
import java.util.Scanner;
public class RockPaperScissors
{
public static void main(String[] args)
{
String playerTwo = "";\\to be honest I'm not sure what this is even for
Scanner keyboard = new Scanner(System.in);
System.out.println("Lets play rock-paper-scissors! Please enter your move:");
int Choice = (int) (Math.random()*2);
if (Choice == 0)
playerTwo = "ROCK";\\rock = 0
else if (Choice == 1)
playerTwo = "PAPER";\\paper = 1
else if (Choice == 2)
playerTwo = "SCISSORS";\\scissors = 2
String playerOne = keyboard.nextLine();
playerOne = playerOne.toUpperCase();
if (playerOne.equals(playerTwo)){
System.out.println("It a tie, so nobody wins!");
}
if (playerOne.equals("ROCK")){
if (playerTwo.equals("PAPER")){
System.out.println("Your rock got covered by my paper. You lose!");
}
if (playerTwo.equals("SCISSORS")){
System.out.println("Your rock smashes my scissors. You win!");
}
}
if (playerOne.equals("PAPER")){
if (playerTwo.equals("ROCK")){
System.out.println("Your paper covers my rock. You win!");
}
if (playerTwo.equals("SCISSORS")){
System.out.println("Your paper got cut by my scissors. You lose!");
}
}
else if (playerOne.equals("SCISSORS")){
if (playerTwo.equals("ROCK")){
System.out.println("Your scissors got smashed by my rock. You lose!");
}
if (playerTwo.equals("PAPER")){
System.out.println("Your scissors cut my paper. You win!");
}
}
else
System.out.println("Error. Please restart and enter either: \"rock\", \"paper\", or \"scissors\".");
}
}
Прежде чем я выясню, что не так с вашим кодом, вот несколько советов:
Math.round()
не требуется. Если вы производите тип int
он автоматически округляется до ближайшего целого.
Вы должны объявить Enum с тремя типами результатов. Затем вы можете ссылаться на них по имени вместо цифр или строк:
public enum Outcome { ROCK, PAPER, SCISSOR };
Теперь вы можете назначать переменные, а также использовать операторы switch:
Outcome player1 = Outcome.ROCK;
// switch statement example
switch (player1) {
case ROCK:
// do something
case PAPER:
// do something
case SCISSOR:
// do something
Кроме того, комментарии выполняются с двумя косой чертой FORWARD, а не BACK slashes
Теперь для момента WTF в вашем коде. Что, черт возьми это:
if (playerOne.equals("ROCK")){}
else if (playerTwo.equals("PAPER")){
System.out.println("Your rock got covered by my paper. You lose!");
}
else if (playerTwo.equals("SCISSORS")){
System.out.println("Your scissors got smashed by my rock. You win!");
}
В принципе, вы просто сказали компьютеру, что если игрок One выбрал рок, ничего не делайте. Синтаксис оператора if выглядит так:
if (condition) {
// do something
}
Если вы хотите иметь несколько операторов if внутри оператора if, выполните следующие действия:
if (condition) {
if (condition) { // do something }
else if (condition) { // do something else if first did not work }
else { // do something if nothing worked }
}
В вашем коде вы набрали это:
if (condition) {} // this does nothing if condition is true
else if (condition) {...} // if the first if statement is true, this will not be reached
else if (condition) {...} // neither will this!
Поэтому, чтобы исправить вашу проблему, ваш фрагмент кода должен выглядеть так:
if (playerOne.equals("ROCK")) {
if (playerTwo.equals("PAPER")) {
System.out.println("Your rock got covered by my paper. You lose!");
}
else if (playerTwo.equals("SCISSORS")) {
System.out.println("Your scissors got smashed by my rock. You win!");
}
} // terminates outer if
Если у вас есть еще вопросы, прокомментируйте этот ответ!
if (playerOne.equals("ROCK")){}
else if (playerTwo.equals("PAPER")){
System.out.println("Your rock got covered by my paper. You lose!");
}
else if (playerTwo.equals("SCISSORS")){
System.out.println("Your scissors got smashed by my rock. You win!");
}
Ваши условные блоки написаны неправильно. Если какое-либо условие истинно, будет выполнен следующий {} блок. В вашем коде вы проверяете, что входит в состав playerOne, но вы ничего не делаете, когда вход соответствует "ROCK". Блок просто пуст.
Условие else, если условие будет проверено далее (при условии, что playerTwo.equals("ROCK")) System.out.println("Ваша скала..."); будет выполняться только на основании того, что вход playerOne не равен "ROCK".
Вы можете захотеть просмотреть свои заметки, чтобы понять, как и когда работает инструкция else if.
Вместо этого вы должны проверить, что playerOne.equals("ROCK"), а затем проверить, что playerTwo.equals("PAPER") и что-то сделать.
Это относится ко всем случаям, когда вы проверяете вход игрока.
Я не собираюсь писать вашу программу для вас, вместо этого я собираюсь указать на недостатки в вашей логике.
if (playerOne.equals("ROCK"))**{}** //notice you aren't actually executing any logic here?
**else** if (playerTwo.equals("PAPER")){ //this line is being called if playerOne does **not** equal rock.
System.out.println("Your rock got covered by my paper. You lose!");
}
Эта же логика применяется и к вашим другим блокам кода.
Вместо этого он должен быть чем-то вроде
if (playerOne.equals("ROCK")){
if (playerTwo.equals("PAPER")){
System.out.println("Your rock got covered by my paper. You lose!");
}
}
if (playerOne.equals("PAPER") {}
. Кроме того, вы пропускаете закрывающее }
перед финальным остальным.