时间程序中的计算错误

时间:2013-10-23 05:55:47

标签: java class loops

仍在研究这个愚蠢的时间计划....我的新问题是在计算中,minuts似乎没有增加总数,我不知道为什么...任何inout将非常感谢一如既往:)

public  class Time {

    public int Minutes, Hours, TotalMin;
    private String  correctedMinutes ;
    public String valid, TimeofDay;
    public String error, noerror;


    //-----------------------------------------------------------------
    //  Sets up the time by defining its minutes and hours 
    //-----------------------------------------------------------------

public Time() {
    this.Hours = 0;
    this.Minutes = 0;}

public Time(int hour, int minute, String timeofday) {
    this.Hours = hour;
    this.Minutes = minute;
    this.TimeofDay = timeofday;}


public String testTimeofDay ( String timeofday)

{ 
    if  (TimeofDay.equals ("AM")) {TimeofDay="AM";
         return "";}

     else if (TimeofDay.equals("PM")) {TimeofDay="PM";
         return "";}

        else {TimeofDay="AM";
        return "Invalid Entry: AM/PM";}
    }

public String testHoursMinutes(int hours, int minutes)

{
    if (Minutes>59|| Minutes<0||Hours>23 || Hours<0) 
        {Minutes=0;
        Hours=0;
        TimeofDay="AM";
        return "Invalid Entry: Incorrect Value";}

            else {Hours=hours;
            Minutes=minutes;
            return "";}



}


public int addMinutes (int hours, int minutes, int elapsedMin)
    { 
        if (elapsedMin<0)
            TotalMin=minutes;

            else {
            TotalMin=elapsedMin+Minutes;}

            return TotalMin;}

public String ConvertMintoHour (int hours, int minutes){        
        while (TotalMin>60)
            {TotalMin=TotalMin-60;
            Hours=Hours+1;   
            if (Hours==13)
             { Hours=0;

             Minutes=TotalMin;
             }}
return(Hours+ " " +Minutes);




    }   
public String toString ()
        {
            String correctedMinutes = String.format("%02d", Minutes);
            return (Hours+ ":" + correctedMinutes + TimeofDay);     }





}

这是测试代码:

import java.util.Scanner;


public class TimeTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


int minutes, hours, elapsedMin; 
String timeofday, startTime;

Scanner scan=new Scanner (System.in);

System.out.println("Please enter starting hour (1-12):");
hours=scan.nextInt();
System.out.println("Please enter starting minute (0-59):");
minutes=scan.nextInt();
System.out.println("Please enter AM or PM:");
timeofday=scan.next();


Time classtime = new Time (hours, minutes, timeofday);

System.out.println(classtime.testTimeofDay(timeofday));
System.out.println(classtime.testHoursMinutes (hours, minutes));
 System.out.println(classtime.toString());


System.out.print("The class begins at ");
System.out.println (classtime.toString());

startTime=classtime.toString();

System.out.println("Enter a time in minutes representing the class duration:");
elapsedMin=scan.nextInt();

classtime.addMinutes (hours, minutes, elapsedMin);
System.out.println ("Class End Time:" + classtime.toString());


System.out.print(elapsedMin + " minutes after "+ startTime + " is ");
System.out.println (classtime.toString());





System.out.print("The class ends at ");
System.out.println (classtime.toString());


System.out.print("The class ends at ");

System.out.print("MILITARY");
}}

3 个答案:

答案 0 :(得分:1)

方法String ConvertMintoHour (int hours, int minutes)。改变你的状况

while (TotalMin>60)

while (TotalMin>59)

答案 1 :(得分:1)

您遇到了许多问题,但我们先从addMinutes方法开始......

public int addMinutes(int hours, int minutes, int elapsedMin) {
    if (elapsedMin < 0) {
        TotalMin = minutes;
    } else {
        TotalMin = elapsedMin + Minutes;
    }

    return TotalMin;
}

基本上,hoursminutes永远不会有意义,应该被丢弃。

您将elapsedMin添加到TotalMin,但它永远不会用于生成输出。

相反,您应该将值应用回HoursMinutes变量,例如......

public int addMinutes(int elapsedMin) {

    int time = (Hours * 60) + Minutes;
    time += elapsedMin;

    Hours = time / 60;
    time = time % 60;
    Minutes = time;

    return time;

}

此概念也适用于您的ConvertMintoHour方法;)

一个更简单的解决方案是将时间的内部概念作为自午夜以来的分钟数来管理。

这样您就可以在“时间”课程中简单地添加或减去分钟数。当你准备好了,你可以使用上面的算法来生成生成输出所需的小时和分钟...恕我直言

我确定其他人已经向您指出了这一点,但您应该花时间阅读Code Conventions for the Java Programming Language,这将有助于您为其他开发人员更轻松地阅读代码;)

答案 2 :(得分:0)

方法ConvertMintoHour可以简单地写成如下:

public String ConvertMintoHour() {
        int noOfHrs = TotalMin / 60;
        Hours = (Hours + noOfHrs) % 13;
        Minutes = TotalMin % 60;
        return Hours + " " + Minutes;
}