2015-11-05 128 views
1

我正在製作一個遊戲類型的事物與三個類組合。 不是家庭;愛好。名稱輸出顯示「null」Java

代碼爲三類:

亞軍:

public class CounterGameRunner 
    { 
    // instance variables - replace the example below with your own 
    public static void main(String [] args){ 
    Scanner input = new Scanner(System.in); 

    CounterGameCounter game = new CounterGameCounter(); 

    System.out.println("You want to play a game I see. What is your name?"); 

    String name = input.next(); 

    game.NameIn(name); 


    CounterGAME game1 = new CounterGAME(); 

    game1.actual(); 

} 
} 

實際遊戲:

public class CounterGAME 
{ 
    // instance variables - replace the example below with your own 

     Scanner input = new Scanner(System.in); 

     int number; 
     int count=1; 
     boolean loop = true; 
    public CounterGAME(){ 


    } 

    public void actual(){ 

     CounterGameCounter game2 = new CounterGameCounter(); 


     System.out.println("Guess a number between 1 and 101, see how many times you get it!"); 

     number=input.nextInt(); 
     int r = (int)(Math.random() * (100) + 1); 
     while(loop==true){ 


    if(number < r){ 
     System.out.println("Too small, try again"); 
     number = input.nextInt(); 
     count++; 
     game2.Counter(count); 

     } else if(number == r){ 
     System.out.println("Wow, you won! Who'd have thought?"); 
      count++; 
      game2.Counter(count); 
      break; 

    System.out.println(game2.done()); 

     } else if(number > r){ 
     System.out.println("Too large, try again"); 
      number = input.nextInt(); 

      count++; 

     game2.Counter(count); 
    } 


     } 





     } 



} 

Counter類:

public class CounterGameCounter 
    { 
     // instance variables - replace the example below with your own 



private String Name; 

String done1; 
int correct; 

public CounterGameCounter(){ 



} 



public String NameIn (String nm){ 
    Name = nm; 
    return Name; 
} 

public String NameOut(){ 

    return Name; 

} 


public void Counter(int count){ 

    correct = count; 

} 

public int getCount(){ 



    return correct; 

} 


public String done(){ 
    done1 = "Name: "   + NameOut() + "\n" + 
      "Times Answered: " + getCount(); 




    return done1; 
    } 



} 

問題:

計數器正常工作,並最終一切顯示和功能正常。但是,我在開始時輸入的任何名稱在運行程序時總是顯示「null」。爲什麼?

回答

3

你的變量名是真正的混亂,有很多的代碼中的不良行爲,但null的名字是因爲你創建一個新的CounterCounterGAME

public void actual(){  
    // here 
    CounterGameCounter game2 = new CounterGameCounter(); 
    // more code 
} 

更改實際接收CounterGameCounter

public void actual(CounterGameCounter game2){ 
    // more code 
} 

,並調用它像:

public static void main(String [] args){ 
    Scanner input = new Scanner(System.in); 
    CounterGameCounter game = new CounterGameCounter(); 
    System.out.println("You want to play a game I see. What is your name?"); 
    String name = input.next(); 
    game.NameIn(name); 
    CounterGAME game1 = new CounterGAME();  
    game1.actual(game); 
    // more stuff 
} 

FREE TIPS:

  • 使用String getName()void setName(String)
  • 開始變量,對象和屬性名與lowercase

    String name; 
    Object object; 
    
  • 變量名必須是代表性和說明性的

    CounterGameCounter counterGameCounter = new CounterGameCounter(); 
    

    這也適用於Object名稱:

    GameCounter gameCounter = new CounterGameCounter(); 
    
+0

什麼的game1.actual (遊戲)代表發送? – Aakarsh

+0

@Aakarsh是我修正的'actual'方法的調用,最後你解決了它?讓我知道如果有任何問題的名稱。 –

-1

試試這個:的

String name = input.nextLine(); 

代替:

String name = input.next();