2013-10-24 68 views
0

我一直在嘗試獲取字符串初始化,但無濟於事。我已經嘗試過所有我遇到的解決方案,但我不確定是因爲我的能力不足還是因爲我需要一個新的解決方案,我已經掌握了該程序的邏輯,所以我只需要幫助,試圖初始化字符串值。如果有人能夠幫助,我會非常感激!字符串變量可能尚未初始化(錯誤dieces到第34行)

P.S詛咒我想要挑戰和使用srings。 -_-

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

public class RockPaperScissors 
{ 
public static void main (String[] args) 
{ 
    String player, computer; 
    int answer; 
    Scanner scan = new Scanner (System.in); 

    Random generator = new Random(); 
    answer = generator.nextInt(3) + 1; 

    if (answer < 1 || answer > 3) 
      answer = generator.nextInt(3) + 1; 

    if (answer == 1) 
     computer = "rock"; 
    if (answer == 2) 
     computer = "paper"; 
    if (answer == 3) 
     computer = "scissors"; 

    System.out.println ("Please choose rock, paper, or scissors."); 
    player = scan.nextLine(); 

    if (!player.equalsIgnoreCase("rock") || !player.equalsIgnoreCase("paper") 
      || !player.equalsIgnoreCase("scissors")) 
    { 
     System.out.println ("Please correctly enter one of the three 
        choices: rock, paper, and scissors."); 
     player = scan.nextLine(); 
    } 

    if (player.compareTo(computer) == 0) 
     System.out.println ("It's a draw! You both chose " + player + 
        "!"); 

    if ((computer.equalsIgnoreCase("rock") && 
      player.equalsIgnoreCase("scissors")) && 
      (computer.equalsIgnoreCase("scissors") && player.equalsIgnoreCase("paper")) 
      && (computer.equalsIgnoreCase("paper") && player.equalsIgnoreCase("rock"))) 
     System.out.println ("You lost! The computer chose " + computer + " 
        and you chose " + player + "."); 

    if ((player.equalsIgnoreCase("rock") && 
      computer.equalsIgnoreCase("scissors")) && 
      (player.equalsIgnoreCase("scissors") && 
      computer.equalsIgnoreCase("paper")) && 
      (player.equalsIgnoreCase("paper") &&  
      computer.equalsIgnoreCase("rock"))) 
      System.out.println ("You won! CONGRATULATIONS! The computer chose    
        " + computer + " and you chose " + player + "."); 

} 

}

+1

因此,當你聲明它們時,將你的字符串變量設置爲「」。 – OldProgrammer

回答

1
String computer; // not initialized 

改變這對

String computer = null; or ""// initialized 
if (player.compareTo(computer) == 0) 

因爲,可變計算機將基於所述條件進行分配。如果你提到的上述條件不滿意。該值爲無,因此只顯示錯誤。

0

如果我明白你的問題在所有的,不是記住你不能在Java中做到這一點:

String str = "here is some 
    random text"; 

你可以做的是

String str = "here is some " + 
    "random text"; 

換句話說 - 可以」不要在行末打破字符串,必須關閉它並使用+符號。

0

您可以用兩種方式初始化的Strings值:

String abc = "I love basketball"; 

String abc = new String("I love basketball"); 

你們看到的是一個警告,而不是一個錯誤。如果你堅持不把一個值到String,只是做

String abc = null;  

String abc = "" 

在後一種情況下,你的字符串初始化爲報價之間的字符。沒有,基本上,但它不是null

爲了避免潛在的問題NPE,比較String S作爲如下:

"rock".equalsIgnoreCase(playerChoice); 
1

的compilator看你有字符串的計算機。他還可以看到這臺電腦被初始化爲回答1或2或3.但是因爲它不能讀取邏輯,所以它不知道任何有關答案是否可以更低或更高,因此它假設最壞的可能性 - 那臺計算機將不會被初始化。

你的上線只是改變

String computer = ""; 

,它應該是罰款。