0

嗨,我还是 java 新手,在方法之间传递值时遇到了麻烦。我所做的所有研究仍然无法正确解决。无论如何,任何意见或建议都将受到欢迎。为了节省您阅读下面代码的时间,我有两个返回值的方法,我将它们传递给 showTime()。但是,使用当前格式,我只能得到零。除了现在放弃之外的任何建议。

import java.util.Scanner;

public class First
{

 static int sH, sM;
public static void main(String args[]){


    getHour();
    getMinute();
   showTime(sH,sM);
}

static int getHour(){
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter the hour: ");
    int setHour = input.nextInt();


    if(setHour <= 24){
        System.out.println("You entered " +setHour+ " for the hour.");
    }else{
        System.out.println("Please enter the hour number from 0 to 24");
        getHour();
    }
 return sH;
}

 static int getMinute(){
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter the mintues: ");
    int setMinute = input.nextInt();

    if(setMinute <= 60){
        System.out.println("You entered " +setMinute+ " for the minutes.");
    }else{
        System.out.println("Please enter the hour number from 0 to 60");
        getMinute();
    }
    return sM;
}

private static void showTime(int sH, int sM){


    System.out.println(+sH+":"+sM);
}
 }
4

6 回答 6

1

您没有将值保存在方法中sHsM方法中,而是在返回它们。因此,返回的值将是0 only.

int setHour = input.nextInt();

这应该是: -

sH = input.nextInt();

此外,如果您已将它们声明为 main 方法之外的静态变量,则实际上不需要返回它们。


一个更好的主意是不使用static variables. sH将 , 中的和sM变量声明main method为局部变量。

现在,当您从 中返回值时getHour(),您可以将它们分配给局部变量。然后与他们合作。

因此,您的main方法可以修改为: -

public static void main(String args[]) {
    int sH = getHour();
    int sM = getMinute();
    showTime(sH, sM);
}

在 中getHour(),将您的更改return sH;return setHour;. 方法上也getMinute()一样。

在 else 部分,将getHour()调用更改为return getHour();

于 2012-11-23T11:46:30.727 回答
1

在您的getMinute()getHour()方法中,您需要返回存储用户输入的值。同样在这种情况下,不需要静态 int sH 和 sM,因为所有内容都由同一个事件处理,除非您以后想从不同的事件中访问它们。

public static void main(String args[]){

//Store the returnb value of getHour in sH
int sH = getHour();

//Store the returnb value of getMinute() in sM
int sM = getMinute();

//Display the stored values
showTime(sH,sM);
}

private int getHour(){
Scanner input = new Scanner(System.in);
System.out.println("Please enter the hour: ");
int setHour = input.nextInt();


if(setHour <= 24){
    System.out.println("You entered " +setHour+ " for the hour.");

    //return the users input
    return setHour;
}else{
    System.out.println("Please enter the hour number from 0 to 24");
    getHour();
}

return 0;

}

private int getMinute(){
Scanner input = new Scanner(System.in);
System.out.println("Please enter the mintues: ");
int setMinute = input.nextInt();

if(setMinute <= 60){
    System.out.println("You entered " +setMinute+ " for the minutes.");

    //return the users input
    return setMinute;
}else{
    System.out.println("Please enter the hour number from 0 to 60");
    getMinute();
}

    return 0;

}

private static void showTime(int sH, int sM){
System.out.println(+sH+":"+sM);
}
}
于 2012-11-23T11:59:01.587 回答
0

您的变量 sH 和 sM 永远不会被赋值,您只是将它们原封不动地返回。尝试返回setHoursetMinute而是将它们传递给showTime.

于 2012-11-23T11:45:35.760 回答
0

您没有将方法中的值分配给静态属性。

 static int sH, sM;

所以这就是你得到0的原因。

sH = input.nextInt(); sM = input.nextInt();

于 2012-11-23T11:51:00.683 回答
0

您有静态变量sHsM它们被传递到showTime打印时间,但它们从未被赋值。事实上,你甚至根本不需要它们。

相反,你应该让你的getHour函数返回setHour变量,而你的getMinute方法返回setMinute变量。

然后您可以像这样简单地调用 showTime 方法:

public static void main(String args[]) {
    int hour = getHour();
    int minute = getMinute();
    showTime(hour, minute);
}

getHour您的和getMinute方法中也存在问题。当输入无效输入时,它们会递归调用自己,但不会返回递归方法调用。因此,一旦递归完成,程序逻辑将简单地继续并返回原始的无效数据。这可以通过更改来解决:

if (setHour <= 24) {
  System.out.println("You entered " + setHour + " for the hour.");
} else {
  System.out.println("Please enter the hour number from 0 to 24");
  getHour();
}

到:

if (setHour <= 24) {
  System.out.println("You entered " + setHour + " for the hour.");
} else {
  System.out.println("Please enter the hour number from 0 to 24");
  return getHour();
}

显然也为您的getMinute方法执行此操作。

于 2012-11-23T12:04:20.387 回答
0

您的代码中有很多错误,必须替换以下代码

public class First
{

static int sH, sM;
public static void main(String args[]){


First.sH = getHour();

First.sM = getMinute();
showTime(abc.sH,abc.sM);
}

static int getHour(){
Scanner input = new Scanner(System.in);
System.out.println("Please enter the hour: ");
int setHour = input.nextInt();


if(setHour <= 24){
    System.out.println("You entered " +setHour+ " for the hour.");
    return setHour;
}else{
    System.out.println("Please enter the hour number from 0 to 24");
    getHour();
    return sH;
}

}

 static int getMinute(){
Scanner input = new Scanner(System.in);
System.out.println("Please enter the mintues: ");
int setMinute = input.nextInt();

if(setMinute <= 60){
    System.out.println("You entered " +setMinute+ " for the minutes.");
    return setMinute;
}else{
    System.out.println("Please enter the hour number from 0 to 60");
    getMinute();
    return sM;
}

}

private static void showTime(int sH, int sM){


System.out.println(First.sH+":"+First.sM);
}
 }

您的 return sh 和 return sm 没有返回任何内容,应该替换为 return setHour 和 return setMinute

于 2012-11-23T12:04:50.590 回答