0

我对编程很陌生,这段代码还远未完成,所以请原谅业余爱好者。

此代码是通过使用多个类将时间添加到运行时间

这是我的时间课程:

public  class Time {

private int Minutes, Hours, TotalMin;
private String stringAM= "AM", stringPM = "PM", correctedMinutes ;
public String valid, TimeofDay;
public static int error;
public Object toString;

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




    //-----------------------------------------------------------------
public  Time(int  hours, int minutes)
    { if (minutes>59|| minutes<0|| hours>23 || hours<0) {
       Hours=0;
       Minutes=0;
          error=1;
          return;
          }
      else {Hours=hours;
            Minutes=minutes; 
            error=0;
            return;
      }}

public int Time2(int minutes, int hours) {
         if (Hours<12 || Hours>0 || TimeofDay.equals ("AM") || TimeofDay.equals ("PM")) {
               Hours=0;
               Minutes=0;
                  return error=0;

                      }
              else { 
                  Hours=hours;
                    Minutes=minutes;
                     return error=0;
                  }
            }

    public int addMinutes (int Hours, int Minutes, int elapsedMin)
    { 
        if (elapsedMin<0)
        return error=1;

            else {
            TotalMin=elapsedMin+Minutes;
                    return error=0;}
        }{

    while (TotalMin>60)
            {TotalMin=TotalMin-60;
            Hours=Hours+1;   if (Hours==25)
             { Hours=0;
             Minutes=TotalMin;
             }
    }
        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; 
String TimeofDay;
Scanner scan=new Scanner (System.in);

System.out.println("Please enter starting hour:");
hours=scan.nextInt();
System.out.println("Please enter starting minute:");
minutes=scan.nextInt();
System.out.println("Please enter AM or PM:");
TimeofDay=scan.next();

Time classtime = new Time (hours, minutes);
{}
classtime.Time2(minutes, hours);


int error=Time.error;
if (error==1)
    System.out.println("This is an invalid time");

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

    }}

基本上我只是想不通为什么当我运行我的代码时它没有完成运行而是打印:

"Null
 The class ends at Null"   

有什么见解吗?我意识到代码还有其他问题,但是一旦我可以让它运行更多,我会修复这些问题

(顺便说一句,我知道 Time 2 方法似乎非常多余,我的老师在课堂上需要它,否则我会将它包含在构造函数中)

任何意见将不胜感激

4

2 回答 2

4

不要,请不要盲目点击IDE中的第一个自动修复选项,特别是如果你没有阅读或理解它。

toString 应该是 String 类型的方法,而不是 Object 类型的字段:

Object toString;在课堂上剪掉。那是不需要的。

这是调用toString返回字符串的方法所需的代码:

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

话虽如此,您确实需要更好地组织和处理您的代码。使用适当的命名约定并以可读的方式缩进/构造它。

于 2013-10-22T19:58:30.673 回答
0

这并不能回答您的问题,而只是一些关于可读代码的提示:

  • 每当您编写一个方法时,在您编写该方法的第一行之后,立即跟进设置您的大括号并将您的光标定位在里面。所以当你做类似的事情时

    public int addMinutes(int hours, int minutes, int elapsedMin)

那么你的下一步应该是

public int addMinutes(int hours, int minutes, int elapsedMin){} //<--these braces

然后将光标放在中间并将大括号从中间切开

public int addMinutes(int hours, int minutes, int elapsedMin){|}

至...

public int addMinutes(int hours, int minutes, int elapsedMin){

}

并且始终使右大括号与上面的方法的第一个单词垂直匹配。如果您养成总是立即制作大括号并将其从中间切开的习惯,那么跟踪您的代码会容易得多

  • 仅当您在一组大括号内时才缩进

因此,如果您想将代码放入您的 addMinutes 方法中,请将这些大括号内的所有代码缩进一个缩进级别

public int addMinutes(int hours, int minutes, int elapsedMin){

    if(elapsedMin < 0)
}

if 语句应该有大括号。因此,那些大括号内的任何代码都应该缩进一级......

public int addMinutes(int hours, int minutes, int elapsedMin){

    if(elapsedMin < 0){
        return -1;
    }
}

注意 if 的右大括号如何与 if 中的字母 i 匹配,而方法的右大括号如何与 public 的字母 p 匹配。

  • 您永远不应该在代码中单独看到 {}。
  • 你也不应该在你的代码中单独看到 }}

  • 使用正确的命名约定。方法名称应以小写字母开头。类名和构造函数以大写开头,所以当你声明

    public int Time2

它看起来像是 Time2 对象的构造函数和方法之间的交叉。

遵循这些约定不仅会使您的代码更具可读性,而且会使论坛上的人更有可能帮助您解决问题。如果您发布了一堆乱七八糟的格式错误的代码,有些人甚至不会花时间阅读它。

这是一个很棒的链接,可以填写任何详细信息,老实说,您可能只需要 5 分钟就可以通读它。它推荐一种替代的大括号放置约定,除了左大括号放置在方法下方一行而不是与方法在同一行之外,其他所有内容都相同。两者都是可以接受的,但一般来说,您应该选择这两种约定中的一种,并在编码时严格遵守它。

http://www.cwu.edu/~gellenbe/javastyle/index.html

于 2013-10-22T20:45:45.633 回答