如何正确使用 toString 方法?
How to properly use a toString method?
所以我在我的计算机科学实验室项目上取得了领先,基本上我们正在创建一个 activity 时间跟踪器。该程序的目标是在控制台中输入分钟和秒,程序将获取这些值,并打印总时间,重复该过程,直到用户输入无效数字,程序将终止。
ActivityManager class 的大部分内容已完成,由教授创建,只有几行需要更改,并用注释指出。
这是class:
{
public static void main(String[] args)
{
// declare totalTime and activityTime of type Itime
Itime totalTime, activityTime;
int minutes; double seconds; // user input values
Scanner input = new Scanner (System.in); // to read user input
// display purpose and author
System.out.println ("This program tracks total time in minutes");
System.out.println ("and seconds for a series of activities.");
System.out.println (); // print blank line
System.out.println ("Author: ");
System.out.println (); // print blank line
// specify format for input
System.out.println ("Enter activity time in minutes and"
+ " seconds, all in a");
System.out.println ("single line with spaces in between. Entering"
+ " values" );
System.out.println ("outside appropriate ranges will terminate"
+ " the program.");
System.out.println (); // print blank line
// create the totalTime object of type Itime with 0 minutes and 0.0 seconds
totalTime = new Itime(0,0.0);
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// prompt and read time for an activity
System.out.print ("Enter time for an activity: ");
minutes = input.nextInt();
seconds = input.nextDouble();
// Accumulate if appropriate
while (minutes >= 0 && seconds >= 0 && seconds < 60) {
// create the activityTime object of type Itime with given minutes and seconds
activityTime = new Itime(minutes,seconds);
// add totalTime and activityTime and put the result in totalTime
totalTime = totalTime.addItime(activityTime);
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// prompt and read time for another activity
System.out.print ("Enter time for an activity: ");
minutes = input.nextInt();
seconds = input.nextDouble();
}
// wrap up and print final total
System.out.println ("Sentinel received");
System.out.println (); // print blank line
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// print closing remarks
System.out.println ("Program has terminated.");
System.out.println (); // print blank line
}
我们的任务是通过创建一个 Itime class 来完成项目,它在这里:
{
private int minutes;
private double seconds;
public Itime(int minutes, double seconds){
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
public int getMinutes(){return minutes;}
public double getSeconds(){return seconds;}
public String toString(){
Itime totalTime = new Itime(minutes, seconds);
String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;}
public Itime addItime(Itime bTime){
int totalMinutes = this.minutes+bTime.getMinutes();
double totalSeconds = this.seconds+bTime.getSeconds();
if(totalSeconds>60){
totalSeconds-=60;
totalMinutes+=1;
}
Itime totalTime = new Itime(totalMinutes,totalSeconds);
return totalTime;
}
我对这个项目的问题是,无论我输入什么值,它 returns 默认起始值 0 分钟和 0.0 秒。最初我认为我的问题是 addItime 方法,但在查看代码后我认为问题出在 toString 方法中。
控制台打印如下:
此程序以分钟为单位跟踪总时间
和一系列活动的秒数。
作者:版本:2019-01-25
输入activity时间,以分秒为单位,全部在一个
单行,中间有空格。输入值
超出适当范围将终止程序。
到目前为止的总时间是:0 分 0.0 秒
输入 activity 的时间:20 20
到目前为止的总时间是:0 分 0.0 秒
输入 activity 的时间:
有什么建议吗?
欢迎来到 Stack Overflow。 (我这么说是因为我认为这是你第一次使用它,因为你在问题描述中附上了你拥有的所有代码。对于以后的问题,尽量只关注你认为问题所在的代码。无论如何,我希望你喜欢我们的社区)。
现在让我们关注这里:
public String toString() {
Itime totalTime = new Itime(minutes, seconds);
String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;
}
首先,您不需要创建 class Itime
的另一个实例,因为您已经可以访问 toString()
方法中的变量。此外,这种方法并没有被破坏;一切正常。
现在,检查构造函数:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
您永远不会将 minutes
或 seconds
分配给 ITime
class 的实例。这就是为什么当您尝试打印任何给定实例时(我猜是通过控制台),您总是会得到默认值(零)作为结果。
构造函数应该更像这样:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
this.minutes = minutes;
this.seconds = seconds;
}
希望对您有所帮助!
所以我在我的计算机科学实验室项目上取得了领先,基本上我们正在创建一个 activity 时间跟踪器。该程序的目标是在控制台中输入分钟和秒,程序将获取这些值,并打印总时间,重复该过程,直到用户输入无效数字,程序将终止。
ActivityManager class 的大部分内容已完成,由教授创建,只有几行需要更改,并用注释指出。
这是class:
{
public static void main(String[] args)
{
// declare totalTime and activityTime of type Itime
Itime totalTime, activityTime;
int minutes; double seconds; // user input values
Scanner input = new Scanner (System.in); // to read user input
// display purpose and author
System.out.println ("This program tracks total time in minutes");
System.out.println ("and seconds for a series of activities.");
System.out.println (); // print blank line
System.out.println ("Author: ");
System.out.println (); // print blank line
// specify format for input
System.out.println ("Enter activity time in minutes and"
+ " seconds, all in a");
System.out.println ("single line with spaces in between. Entering"
+ " values" );
System.out.println ("outside appropriate ranges will terminate"
+ " the program.");
System.out.println (); // print blank line
// create the totalTime object of type Itime with 0 minutes and 0.0 seconds
totalTime = new Itime(0,0.0);
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// prompt and read time for an activity
System.out.print ("Enter time for an activity: ");
minutes = input.nextInt();
seconds = input.nextDouble();
// Accumulate if appropriate
while (minutes >= 0 && seconds >= 0 && seconds < 60) {
// create the activityTime object of type Itime with given minutes and seconds
activityTime = new Itime(minutes,seconds);
// add totalTime and activityTime and put the result in totalTime
totalTime = totalTime.addItime(activityTime);
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// prompt and read time for another activity
System.out.print ("Enter time for an activity: ");
minutes = input.nextInt();
seconds = input.nextDouble();
}
// wrap up and print final total
System.out.println ("Sentinel received");
System.out.println (); // print blank line
System.out.println ("Total time so far is: "
+ totalTime.toString());
System.out.println (); // print blank line
// print closing remarks
System.out.println ("Program has terminated.");
System.out.println (); // print blank line
}
我们的任务是通过创建一个 Itime class 来完成项目,它在这里:
{
private int minutes;
private double seconds;
public Itime(int minutes, double seconds){
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
public int getMinutes(){return minutes;}
public double getSeconds(){return seconds;}
public String toString(){
Itime totalTime = new Itime(minutes, seconds);
String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;}
public Itime addItime(Itime bTime){
int totalMinutes = this.minutes+bTime.getMinutes();
double totalSeconds = this.seconds+bTime.getSeconds();
if(totalSeconds>60){
totalSeconds-=60;
totalMinutes+=1;
}
Itime totalTime = new Itime(totalMinutes,totalSeconds);
return totalTime;
}
我对这个项目的问题是,无论我输入什么值,它 returns 默认起始值 0 分钟和 0.0 秒。最初我认为我的问题是 addItime 方法,但在查看代码后我认为问题出在 toString 方法中。
控制台打印如下:
此程序以分钟为单位跟踪总时间 和一系列活动的秒数。
作者:版本:2019-01-25
输入activity时间,以分秒为单位,全部在一个 单行,中间有空格。输入值 超出适当范围将终止程序。
到目前为止的总时间是:0 分 0.0 秒
输入 activity 的时间:20 20
到目前为止的总时间是:0 分 0.0 秒
输入 activity 的时间:
有什么建议吗?
欢迎来到 Stack Overflow。 (我这么说是因为我认为这是你第一次使用它,因为你在问题描述中附上了你拥有的所有代码。对于以后的问题,尽量只关注你认为问题所在的代码。无论如何,我希望你喜欢我们的社区)。
现在让我们关注这里:
public String toString() {
Itime totalTime = new Itime(minutes, seconds);
String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;
}
首先,您不需要创建 class Itime
的另一个实例,因为您已经可以访问 toString()
方法中的变量。此外,这种方法并没有被破坏;一切正常。
现在,检查构造函数:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
您永远不会将 minutes
或 seconds
分配给 ITime
class 的实例。这就是为什么当您尝试打印任何给定实例时(我猜是通过控制台),您总是会得到默认值(零)作为结果。
构造函数应该更像这样:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
this.minutes = minutes;
this.seconds = seconds;
}
希望对您有所帮助!