好吧所以我正在参加AP计算机科学课程直到现在我发现内容容易且没有挑战性,因为我已经有了Java背景。但是现在我遇到了一些问题,其中包含了课程为我提供的一些代码,并根据它编写了一个函数。我用谷歌搜索了它,测试了许多不同的东西,试图让它工作,但无济于事。所以希望你们能够对此有所了解,也许可以帮助我解决这个问题。
首先,本书为我提供了这段代码作为基本的时间类:
public class Time extends Object {
private int itsHour;
private int itsMin;
/** Create an object for the given hour and minute. If min
* is negative, adjust the values to make 0 <= min < 60. */
public Time (int hour, int min) { // constructor
super();
itsHour = hour;
for (itsMin = min; itsMin < 0; itsMin = itsMin + 60) {
itsHour--;
}
} //=======================
/** Return the time expressed in military time. */
public String toString() {
if (itsHour < 10) {
return ("0" + itsHour) + itsMin;
} else {
return ("" + itsHour) + itsMin;
}
}
/** Return the result of adding this Time to that Time. */
public Time add (Time that) {
// Read below at issue #2
}
}
这是他们给我们使用的主要类,然后他们给了一个名为TimeTester的类,用于执行命令。这些评论决定了应该发生什么。
import javax.swing.JOptionPane;
class TimeTester {
public static void main (String[] args) {
Time t1 = new Time (13, 25);
Time t2 = new Time (8, -150);
JOptionPane.showMessageDialog (null, "1 " + t1.toString());
JOptionPane.showMessageDialog (null, "2 " + t2.toString());
Time t3 = t1.add (t2);
JOptionPane.showMessageDialog (null, "3 " + t3.toString());
t1 = t2.add (t3);
JOptionPane.showMessageDialog (null, "1 " + t1.toString());
System.exit (0);
} //=======================
}
就像我说的那样,这段代码实际上交给了我,它正在理解代码并让它为我工作,而我实际上根本无法做到。所以下面基本上是我遇到的关键问题。
1)我理解它应该如何运行以及执行程序的作用,但我不明白它为实现结果究竟做了什么。
2)第一组代码中的add函数基本上是它的主类,是赋值的主要部分。作业内容如下:
练习4.15(更难)编写Time方法public Time add(Time 那个):执行器返回一个新的Time对象,它是的总和 两个,例如,0740加1430是 2210.如果金额超过2359,则额外减少24小时,例如1300加1400则为300。 分配自:http://www.cs.ccsu.edu/~jones/chap04.pdf
当我将值传递给执行“now.add(wait)”的TimeTester中的add函数时,我会使用“that”来拉取结果,但值不会向前拉。
我也尝试改变这些功能,或许让我自己理解并让它适合我。我在TimeTester中更改了Time以后的调用,然后编辑了函数add以接受2个值。然后将此代码添加到add函数:
public Time add (Time time1, Time time2) {
String t1String = time1.toString(); // Value is: "0730"
String t2String = time2.toString(); // Value is: "0245"
int t1convert = Integer.parseInt(t1String, 2); // Value is 730
int t2convert = Integer.parseInt(t2String, 2); // Value is: 245
int total = t1convert + t2convert; // Value added together is: 1015
return total; // Return value of total
}
所以我的电话看起来像这样:
public static void main (String[] args) {
now = new Time (7, 30); // 7:30 in the morning
wait = new Time (2, 45); // 2 hours 45 minutes
later = now.add (now, wait); // produces 10:15 in the morning
JOptionPane.showMessageDialog(null, now + " + " + wait + " = " + later.toString());
System.exit (0);
}
但是,所有代码都不能编译并生成可以返回给TimeTester
的结果,它总是产生一个“不兼容类型”的编译错误,指的是我的返回总数;线。所以它显然无法返回整数。所以我完全坚持要做什么才能让它加两次。
3)我不能使用内置的Java时间函数,它用分号格式化。我知道如何做到这一点,这就是为什么这种不同的方式让我不得不走上墙。
4)我不希望你为我编写代码,我想更好地理解它,也许我的错误指出,以便我能理解世界上正在发生什么
我知道这是一个很长的帖子,但是当我寻求帮助时,我喜欢描述并提供我能做的一切,因为我知道从长远来看它会帮助我更好,并希望帮助帮助我追踪的人快点回答。
(PS。所有这些都是在一个名为BlueJ的程序中编译和运行的。这是一个在线课程,所以我没有课堂上的老师询问我们所有的是监视器。)
答案 0 :(得分:1)
当你将函数返回类型定义为“Time”时,编译器抱怨你正在返回一个int:
public Time add (Time time1, Time time2) {
String t1String = time1.toString(); // Value is: "0730"
String t2String = time2.toString(); // Value is: "0245"
int t1convert = Integer.parseInt(t1String, 2); // Value is 730
int t2convert = Integer.parseInt(t2String, 2); // Value is: 245
int total = t1convert + t2convert; // Value added together is: 1015
return total; // Return value of total
}
返回类型为时间:
您返回“total”,其类型为“int”:
您需要做的是创建一个新的Time对象,其中存储了答案。例如:
关于评论中的问题,
@ Mike'Pomax'Kamermans看着你的评论我设法写了这个 代码行,看看我是否可以这样执行它,我不能。 “时间 t1 =新时间(this.hour,that.hour); “吐出来”找不到符号 - 变量小时“。对此有何见解? - user1686765 3分钟前
“this.hour”正在查看当前的Time实例,它是一个名为“hour”的成员变量的Time类实例。如果你去你的Time类,你会发现它只有一些方法和2个变量叫做“itsHour”和“itsMin”。因此它找不到变量“hour”,因为它不存在。我想你的意思是把“this.itsHour”代替“this.hour”。
答案 1 :(得分:1)
考虑添加两个Time
实例(a
和b
)并返回新Time
实例的方法;这样的方法看起来像提供的Time
构造函数循环的反函数for (itsMin = min; itsMin < 0; itsMin = itsMin + 60)
,具体来说 - 它应该增加几个小时的计数(可能通过添加a和b的小时数),而分钟数是> 59
并一次减去60分钟...此方法可能看起来像这样
public static Time add(Time a, Time b) { // Add two Time(s) together.
if (a == null) { // if a is null, just return b.
return b;
} else if (b == null) { // if b is null, just return a.
return a;
}
int hours = a.itsHour + b.itsHour; // Add the hours together.
int minutes = a.itsMin + b.itsMin; // Add the minutes together.
for (; minutes > 59; minutes -= 60) { // Increment hours as necessary, while
// decrementing the minute count by 60.
hours++;
}
return new Time(hours, minutes); // Return the new Time instance.
}
public static void main(String[] args) {
Time now = new Time(7, 30); // 7:30 in the morning
Time wait = new Time(2, 45); // 2 hours 45 minutes
Time later = Time.add(now, wait); // produces 10:15 in
// the morning
System.out.println(later);
}
输出
1015