使用显示为字符串的时间

时间:2013-12-17 00:05:04

标签: java

好吧所以我正在参加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的程序中编译和运行的。这是一个在线课程,所以我没有课堂上的老师询问我们所有的是监视器。)

2 个答案:

答案 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
    }

返回类型为时间:

  • 公开时间添加(时间1,时间2)...

您返回“total”,其类型为“int”:

  • int total = t1convert + t2convert;
  • 返回总计; ...

您需要做的是创建一个新的Time对象,其中存储了答案。例如:

  • 时间 t3 =新时间(0,总计); // 这假设“total”代表分钟

关于评论中的问题,

  

@ 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实例(ab)并返回新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