我对编程非常陌生,这段代码远非完整,所以请原谅业余爱好者。
此代码是通过使用多个类来增加运行时间
这是我的时间班:
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"
有什么见解?我意识到代码还有其他问题,但是一旦我能够运行更多的话,我就会修复它们
(顺便说一下,我知道方法时间2似乎非常多余,我的老师要求它上课或我只是将它包含在构造函数中)
任何输入都会非常感激
答案 0 :(得分: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());
话虽如此,您确实需要更好地组织和处理您的代码。使用适当的命名约定并以可读的方式缩进/构造它。
答案 1 :(得分: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语句应该有大括号。因此,THOSE大括号内的任何代码都应该在......中进一步缩进。
public int addMinutes(int hours, int minutes, int elapsedMin){
if(elapsedMin < 0){
return -1;
}
}
注意if的右括号如何与if中的字母i匹配,并且方法的右括号与public的字母p匹配。
此外,您永远不应该在代码中看到}}
使用正确的命名约定。方法名称应以小写字母开头。类名和构造函数以大写字母开头,因此当您声明
时 public int Time2
它看起来像是Time2对象的构造函数和方法之间的交叉。
遵循这些约定不仅可以使您的代码更具可读性,还可以使论坛上的人更有可能帮助您解决问题。如果你发布一堆混乱的格式化代码,有些人甚至不会花时间阅读它。
这是一个很棒的链接,可以填写任何细节,老实说,你可以在5分钟内阅读它。它推荐了一个替代的大括号放置约定,其中一切都是相同的,除了开口大括号放在方法下面一行而不是与方法在同一行上。两者都是可以接受的,但一般来说,你应该选择这两个约定中的一个,并且在编码时严格遵守它。