2014-10-17 71 views
0

userInput已分配,所以我不知道爲什麼會出現錯誤。我已經瀏覽了類似的問題,用Google搜索了一下,沒有找到我想要的東西。 ps的新的編程在分配的變量上獲取未分配的變量錯誤

static void Main(string[] args) 
{ 
    //declare variables 
    int hours, minutes, seconds, remainder, userInput; 
    const int SECONDS_PER_MINUTE = 60; 
    const int SECONDS_PER_HOUR = 3600; 

    userInput = getUserInput(userInput); //error 

    hours = CalculateHours(userInput, SECONDS_PER_HOUR); 
    remainder = CalculateRemainder(userInput, SECONDS_PER_HOUR); 
    minutes = CalculateMinutes(remainder, SECONDS_PER_MINUTE); 
    seconds = CalculateSeconds(remainder, SECONDS_PER_MINUTE); 


    DisplayResults(hours, minutes, remainder, userInput, seconds); 

} 


//prompt the user to enter number of seconds 
public static int getUserInput(int userInput)  
{ 
    Console.WriteLine("How about you enter a number of " + 
         " seconds and Ill see what I can do for you. "); 
    return userInput = int.Parse(Console.ReadLine()); 
} 

//this method takes in userinput and converts to hours if necessary 
//userInput/SECONDS_PER_HOUR will be returned to CalculateHours 
//in main and stored in the hours variable. same goes for the rest 
//except DisplayResults 
public static int CalculateHours(int userInput, int SECONDS_PER_HOUR) 
{ 
    return userInput/SECONDS_PER_HOUR; 
} 
//this method takes userinput and gives a remainder to be used for minutes and seconds 
public static int CalculateRemainder(int userInput, int SECONDS_PER_HOUR) 
{ 
    return userInput % SECONDS_PER_HOUR; 
} 

public static int CalculateMinutes(int remainder, int SECONDS_PER_MINUTE) 
{ 
    return remainder/SECONDS_PER_MINUTE; 
} 

public static int CalculateSeconds(int remainder, int SECONDS_PER_MINUTE) 
{ 
    return remainder % SECONDS_PER_MINUTE; 
} 
+0

新的張貼在這裏。由於某種原因,我的代碼似乎被切斷了。 – MilesLong 2014-10-17 15:37:53

+6

您將'userInput'作爲參數傳遞給getUserInput方法。在通話時,它是未分配的。它不需要是一個參數,所以將它從方法和調用中刪除。 – 2014-10-17 15:38:04

+0

它告訴你在使用時沒有分配給哪個對象? – deathismyfriend 2014-10-17 15:38:48

回答

2

這裏是有問題的代碼:

userInput = getUserInput(userInput); 

userInput被該語句後分配,但認爲它是這樣的:

int tmp = getUserInput(userInput); 
userInput = tmp; 

什麼都沒有分配值爲userInput之前該方法調用。目前還不清楚爲什麼你要指定一個參數,說實話 - 你並沒有真正使用它。代碼將更清潔,因爲:

int userInput = GetUserInput(); 

... 

public static int GetUserInput() 
{ 
    Console.WriteLine("..."); 
    return int.Parse(Console.ReadLine()); 
} 

請注意我是如何在第一次使用時聲明變量 - 這是一個好主意。此外,如果您將常量聲明爲以外的方法並且將其用於Calculate*方法(爲什麼要用常量參數化方法?),那麼它會更乾淨。所以,你的Main方法會比較清楚的:

const int SecondsPerMinute = 60; 
const int SecondsPerHour = SecondsPerMinute * 60; 

static void Main(string[] args) 
{ 
    int userInput = GetUserInput(); 
    int hours = CalculateHours(userInput); 
    int remainder = CalculateRemainder(userInput); 
    int minutes = CalculateMinutes(remainder); 
    int seconds = CalculateSeconds(remainder); 
    DisplayResult(hours, minutes, remainder, userInput, seconds); 
} 

(我建議改變DisplayResults參數爲了更加一致也有一些其他的東西一起,但是這可能足夠了。)

+2

嗯...我雖然會留下更容易的n00bs。 – mihai 2014-10-17 15:41:22

+0

謝謝喬恩。我的教科書沒有提到任何關於在Main之外聲明變量的內容,但是我確定它遲早會來。但是你所說的話對我來說很有意義,再次感謝。 – MilesLong 2014-10-17 19:42:37

+0

我還有一個問題Jon。爲什麼SecondsPerHour = SecondsPerMinute * 60而不是SecondsPerHour = 3600? – MilesLong 2014-10-17 20:14:37