2014-10-17 74 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