2017-02-16 12 views
-5

Это моя вторая неделя в курсе Java, так что несите меня. Я пытаюсь сделать программу, которая позволяет пользователю вводить «рок», «бумагу» или «ножницы». Я уверен, что есть более эффективные способы, чем то, что я сделал, и я думал, что я действительно добиваюсь прогресса, но теперь я застрял.java.lang.String не может быть преобразован в int ... не уверен, что я делаю неправильно

Мое применимое знание этой программы ограничено операторами if и else, а также операторами switch. Я попытался получить пользовательский ввод для скалы, бумаги или ножниц, преобразовать их в число и сравнить их с произвольно сгенерированным числом, причем 0 представляет собой камень, 1 представляет собой бумагу, а 2 представляют собой ножницы.

import java.util.*; 

public class RockPaperScissors 
{ 
    public static void main(String[] args) { 

     int computer; 

     computer = (int)(Math.random() * 2 + 1); 

     Scanner input = new Scanner(System.in); 

     String player; 
     System.out.println("Enter the word rock, paper, or scissors."); 
     player = input.next(); 

    if (computer == 0) {  
      System.out.println("The computer chose rock."); 
    } 
    else if (computer == 1) { 
      System.out.println("The compuer chose paper."); 
    } 
    else if (computer == 2) { 
      System.out.println("The computer chose scissors."); 
    } 


    // personally starting from here is where I feel like I started to make mistakes. 
    int rock = 0; 
    int paper = 1; 
    int scissors = 2; 
    player = (int)player; 

     switch (player) { 
      case "r" : rock = 0; 
      player = 0; 
      break; 
      case 'p' : paper = 1; 
      player = 1; 
      break; 
      case 's' : scissors = 2; 
      player = 2; 
      break; 
      default : System.out.println("Invalid input"); 
    } 

    if (player == computer) { 
      System.out.println("You tied") ;  
     } 
    else if (player = 1 && computer = 0^player = 2 && computer = 0) { 
     System.out.println("You won"); 
     } 
    else { 
     System.out.println("You lost"); 
    } 
} 
} 
+1

Почему вы бросаете строку в целое число ?! 'player' - это строка! – Li357

+0

@AndrewLi, он усложняет это lol. он мог бы просто использовать целое число для вычисления и вернуть его как строку в случай – FreedomPride

+0

Вы не понимаете фундаментальной идеи. Вы не можете хранить строки (ссылочный тип) и ints (примитив) в одной и той же переменной! Java строго типизирован, что означает, что 'player' не может хранить строку и целое число! Также двойные кавычки для строк и одинарные кавычки для символов! – Li357

ответ

0

В Java, вы можете использовать Integer.parseInt(), чтобы преобразовать строку в целое.

  1. Integer.parseInt() Примеры Пример для преобразования строки «10» к примитивным Int.

    String number = "10"; 
    
    int result = Integer.parseInt(number); 
    
    System.out.println(result); 
    

Выход

10 

2.

Integer.valueOf() Примеры В качестве альтернативы, вы можете использовать Integer.valueOf(), он будет возвращает объект Integer.

String number = "10"; 
Integer result = Integer.valueOf(number); 
System.out.println(result); 

Выход

10 

Примечание

В заключение, parseInt(String) возвращает примитивный Int, в то время как valueOf(String) возвращает объект new Integer().

+0

Но вся предпосылка преобразования строки в int просто неверна! Посмотрите в инструкции switch - они пытаются проверить, если * строка * равна * другой строке *! Зачем конвертировать в целое число в первую очередь ...? ** Настоящая ** проблема заключается в том, что они пытаются использовать 'player' больше, чем должно быть. Они пытаются хранить целые числа и строки в одной и той же переменной. – Li357

+0

@AndrewLi, правда. Если это я, я буду использовать функцию equal(), но я просто предоставляю ответ на основе заголовка заголовка. – FreedomPride

+0

Это действительно неважно, что в заголовке. Ответ должен ответить на все проблемы, и есть несколько основных из них, на которые не отвечает этот ответ. – Li357

 Смежные вопросы

  • Нет связанных вопросов^_^