2014-03-01 92 views
0

我正在關注一個我必須創建一個猜謎遊戲的mooc。我有點理解這個問題,但我不知道如何解決這個問題。創建一個猜謎遊戲

問題是,對於「循環」numberDrawn方法不是一個定義的整數。但我在放置「循環」的主要參數體中定義了它,所以「循環」怎麼看不到我已經定義了它。

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

public class GuessingNumberGame { 

    private static int drawNumber() { 
     return new Random().nextInt(101); 
    } 


    public static void main(String[] args) { 

     Scanner reader = new Scanner(System. in); 

     System.out.println("Guess a number: "); 
     int num = Integer.parseInt(reader.nextLine()); 
     int numberDrawn = drawNumber(); 

     if (numberDrawn > num) { 
      System.out.println("The number is greater"); 
      loop(); 
     } else if (numberDrawn < num) { 
      System.out.println("The number is lesser"); 
      loop(); 
     } else { 
      System.out.println("Congratulations, your guess is correct!"); 
     } 
    } 

    public static void loop() { 

     Scanner reader = new Scanner(System. in); 
     System.out.println("Guess a number: "); 
     int num = Integer.parseInt(reader.nextLine()); 

     if (numberDrawn > num) { 
      System.out.println("The number is greater"); 
      loop(); 
     } else if (numberDrawn < num) { 
      System.out.println("The number is lesser"); 
      loop(); 
     } else { 
      System.out.println("Congratulations, your guess is correct!"); 
     } 
    } 
} 
+0

請在發生問題時發佈確切的錯誤消息;解釋釋義可能有點困難。 – chrylis

+0

錯誤:無法找到符號 如果(numberDrawn> NUM){ 符號:變量numberDrawn 位置:類GuessingNumberGame – Natantantan

+0

^那是因爲你試圖訪問的變量在'main'方法從不同的方法。見藍冰的答案;這就是你應該如何去做的。你不需要遞歸循環函數。 – ujvl

回答

1

問題是numberDrawn是本地main(),距離loop()無法訪問。除非通過,否則該變量不能在loop()中使用。

但是,在我看來,第二個loop()函數是不必要的,並且會創建遞歸循環。我修改main()正常工作,幷包含一個循環:

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

public class GuessingNumberGame { 

private static int drawNumber() { 
    return new Random().nextInt(101); 
} 


public static void main(String[] args) { 

    Scanner reader = new Scanner(System.in); 

    while(true) { 
     System.out.println("Guess a number: ");   
     int num = Integer.parseInt(reader.nextLine()); 
     int numberDrawn = drawNumber(); 


     if (numberDrawn > num) { 
      System.out.println("The number is greater"); 

     } else if (numberDrawn < num) { 
      System.out.println("The number is lesser"); 

     } else { 
      break; 
     } 

    } 

    System.out.println("Congratulations, your guess is correct!"); 
} 
+0

對不起,我不跟隨。什麼第二循環功能?循環是我爲循環程序而創建的方法的名稱 – Natantantan

+0

它不是一個函數,但我做的'while(true)'循環將運行猜數部分,直到給出正確的答案。 –

+0

哇,我不相信這是這麼簡單。我不知道爲什麼我會亂用不必要的方法。謝謝! – Natantantan

0

這不會起作用,因爲主()也被認爲是在Java中不同的方法,並在main()中定義的所有變量不能由外部的訪問方法直接即。循環()在你的情況。一種解決方案是將變量numberdrawn作爲參數傳遞給方法。另一個是你可以在主要方法外定義變量numberdrawn。

1

問題是您已經在方法中定義了您的「numberDrawn」變量,方法中定義的變量對於方法而言是本地的。只需在變量聲明中定義變量,並使其變爲static

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

public class GuessingNumberGame { 


    static int numberDrawn=0; 
    private static int drawNumber() { 
     return new Random().nextInt(101); 
    } 


    public static void main(String[] args) { 

     Scanner reader = new Scanner(System. in); 

     System.out.println("Guess a number: "); 
     int num = Integer.parseInt(reader.nextLine()); 
     numberDrawn= drawNumber(); 

     if (numberDrawn > num) { 
      System.out.println("The number is greater"); 
      loop(); 
     } else if (numberDrawn < num) { 
      System.out.println("The number is lesser"); 
      loop(); 
     } else { 
      System.out.println("Congratulations, your guess is correct!"); 
     } 
    } 

    public static void loop() { 

     Scanner reader = new Scanner(System. in); 
     System.out.println("Guess a number: "); 
     int num = Integer.parseInt(reader.nextLine()); 

     if (numberDrawn > num) { 
      System.out.println("The number is greater"); 
      loop(); 
     } else if (numberDrawn < num) { 
      System.out.println("The number is lesser"); 
      loop(); 
     } else { 
      System.out.println("Congratulations, your guess is correct!"); 
     } 
    } 
} 
0

嘗試此,在類級這樣聲明烏爾變量:在烏爾主

public class GuessingNumberGame { 
    private static int numberDrawn; 

();

int num = Integer.parseInt(reader.nextLine());//no change here 
numberDrawn = drawNumber();//remove int keyword