2013-12-08 3 views
0

Я пытаюсь сделать игру ножницы для каменной бумаги в java. У меня есть базовый код здесьjava не разрешает переменную

import java.util.Scanner; 
import java.util.Random; 
public class RPSBase 
{ 
    public static void main(String args[]) 
    { 
    Random rndm = new Random(); 
    int c =0 + rndm.nextInt(3); 
    Scanner c2 = new Scanner(System.in); 
    String pc = c2.next(); 
    switch (c) 
    { 
     case 1: 
     String choice = "r"; 
     char ch = choice.charAt(0); 
     break; 
     case 2: 
     choice = "p"; 
     ch = choice.charAt(0); 
     break; 
     case 3: 
     choice = "s"; 
     ch = choice.charAt(0); 
     break; 
    } 
    switch (ch) 
    { 
     case 'r': 
     if (pc == "r") 
      System.out.println("It's a tie"); 
     else if (pc == "p") 
      System.out.println("win"); 
     else if (pc == "s") 
      System.out.println("lose"); 
     break; 
     case 'p': 
     if (pc == "p") 
      System.out.println("It's a tie"); 
     else if (pc == "s") 
      System.out.println("win"); 
     else if (pc == "r") 
      System.out.println("lose"); 
     break; 
     case 's': 
     if (pc == "s") 
      System.out.println("It's a tie"); 
     else if (pc == "r") 
      System.out.println("win"); 
     else if (pc == "p") 
      System.out.println("lose"); 
     break; 
    } 
    } 
} 

по какой-то причине, когда я скомпилировать программу я получаю эту ошибку

1 error found: 
File: C:\Users\Larry\RPSBase.java [line: 26] 
Error: ch cannot be resolved to a variable 

Почему я получаю эту ошибку и как это исправить? Я тоже попытался переключиться (выбор), и это тоже не сработало.

+2

Рассмотрите, где объявлен 'ch'? Переменные имеют область действия. Они могут использоваться только внутри этой области. –

ответ

2

Вы либо должны объявить ch над switch (c), или объявить ch в каждом case коммутатора.

И так как вы, кажется, хотите использовать ch на более позднем этапе, вам нужен этот фрагмент:

char ch = '\u0000'; 
switch (c) 
{ 
    case 1: 
    String choice = "r"; 
    ch = choice.charAt(0); 
    break; 
    case 2: 
    String choice = "p"; 
    ch = choice.charAt(0); 
    break; 
    case 3: 
    String choice = "s"; 
    ch = choice.charAt(0); 
    break; 

Примечание декларанта (char ch) в верхней части, а в case s есть только задание ,

UPDATE: То же самое касается String choice, однако для этого, кажется, что лучше объявить его в каждом case.

Много кода можно было бы улучшить, но я просто отвечаю на ваш вопрос здесь, вы можете, например, просто наберите ch = 'r' вместо String choice = "r"; ch = choice.charAt(0);

+1

Примитив не может быть «null». –

+0

Вы не можете инициализировать 'char' как' null' (см. [Этот пост] (http://stackoverflow.com/questions/14844793/comparing-a-character-to-check-if-it-is-null)) , И если вы не инициализируете, вы получите ошибку компиляции. – eebbesen

+0

@SotiriosDelimanolis Моя ошибка там (не набрав ее в IDE), исправил ее. – skiwi

1

При объявлении обугленного «ч» в случае переключения заявления , его можно использовать только в этом случае с этим заявлением о переключении, чтобы исправить это, вы должны заявить:

char ch;

вне выключателя; сразу после объявления строки pc.

Я предлагаю использовать IDE, чтобы помочь вам, если вы, IDE автоматически подберете это и скажете, чтобы исправить ошибку.