2013-04-16 40 views
3

我很難從一本書中的練習中瞭解一些東西(完整的初學者)。Java:變量持有者及其值?

示例代碼是用三個玩家進行猜謎遊戲,它爲所有三個玩家生成一個隨機int,它必須與遊戲中隨機生成的int相同。

該代碼包含三個類,但這是我有一個問題的最重要的一個。另外兩個是GameLauncher類和Player(與其他三個玩家對戰)的類。

public class GuessGame { 

Player p1; 
Player p2; 
Player p3; 

public void startGame(){ 
    p1 = new Player(); 
    p2 = new Player(); 
    p3 = new Player(); 

    int guessp1 = 10; 
    int guessp2 = 0; 
    int guessp3 = 0; 

    boolean p1isRight = false; 
    boolean p2isRight = false; 
    boolean p3isRight = false; 

    int targetNumber = (int) (Math.random() * 10); 
    System.out.println("I'm thinking of a number between 0 and 9..."); 

    while(true){ 
     System.out.println("Number to guess is "+targetNumber); 

     p1.guess(); 
     p2.guess(); 
     p3.guess(); 

     guessp1 = p1.number; 
     System.out.println("Player one has guessed " + guessp1); 
     guessp2 = p2.number; 
     System.out.println("Player two has guessed " + guessp2); 
     guessp3 = p3.number; 
     System.out.println("Player three has guessed " + guessp3); 

     if (guessp1 == targetNumber) { 
      p1isRight = true; 

     }if (guessp2 == targetNumber){ 
      p2isRight=true; 

     }if (guessp3 == targetNumber){ 
      p3isRight=true; 
     } 
     if (p1isRight||p2isRight||p3isRight){ 
      System.out.println("We have a winner!"); 
      System.out.println("Player one got it right? " + p1isRight); 
      System.out.println("Player two got it right?" + p2isRight); 
      System.out.println("Player three got it right? " + p3isRight); 
      System.out.println("The game is over."); 
      break; 
     }else{ 
      System.out.println("None of you got it right! Try again!"); 
     } 
    } 
} 

} 

從上面的代碼:

int guessp1 = 10; 
    int guessp2 = 0; 
    int guessp3 = 0; 

是一個,我不明白。最初,他們都被賦值爲0.我試圖分配10來看看會發生什麼,但沒有任何變化。遊戲的效果也一樣。

我的問題是,如果有的話,賦值給一個聲明的整數的值有什麼意義?特別是在這種情況下。

不包括像打印它或用數學操作它等正常使用。

回答

2

在你的日常後來你重寫指定的值INT下面的代碼行:

guessp1 = p1.number; 
System.out.println("Player one has guessed " + guessp1); 
guessp2 = p2.number; 
System.out.println("Player two has guessed " + guessp2); 
guessp3 = p3.number; 
System.out.println("Player three has guessed " + guessp3); 

所以基本上指定的值不beeing USET可言,但通常是一個很好的做法意味着設置默認值的變量所以在以後使用時,您可以確定是否分配了值或變量仍具有其默認值。

定義默認值有助於避免意外情況。在某些編程語言中,未分配或設置爲null的創建對象可能根據它們引用的內存地址產生垃圾數據。

有些人使用像-1那樣的值,只有正數是預期的,並且通過詢問缺省值是否存在來捕獲沒有賦值的情況。在你的情況下,默認值是0.

+1

哦,所以一旦我用p1.number創建的數字覆蓋它們,原始值就會丟失它的所有值,並且僅用於執行打印命令? – LearnIT

+0

好吧,所以我只是嘗試和 \t \t \t System.out.println(「玩家一猜到了」+ p1.number); 工作原理是一樣的,沒有 guesspp1.number; 但是,你在說什麼,這使我無法驗證是否有輸入? – LearnIT

+0

您可以將guessp1設置爲-1,並在行之間檢查是否(guessp1!= -1)這意味着分配了一個值。 – CloudyMarble