将值传递给方法

时间:2012-11-23 11:42:49

标签: java

你好我还是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);
}
 }

6 个答案:

答案 0 :(得分:1)

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

int setHour = input.nextInt();

这应该是: -

sH = input.nextInt();

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


更好的想法是不要使用static variables。在sH内声明您的sMmain 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();

答案 1 :(得分: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);
}
}

答案 2 :(得分:0)

您的变量sH和sM永远不会被赋值,您只是将它们保持不变。 请尝试返回setHoursetMinute,然后将其传递给showTime

答案 3 :(得分:0)

您没有在方法中为静态属性赋值。

 static int sH, sM;

这就是为什么你得到0。

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

答案 4 :(得分:0)

您将静态变量sHsM传递到showTime以打印时间,但永远不会为它们分配值。事实上,你根本不需要它们。

相反,您应该让getHour函数返回setHour变量,并使用getMinute方法返回setMinute变量。

然后你可以简单地调用showTime方法:

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

您的getHourgetMinute方法中也存在问题。当输入无效输入时,它们以递归方式调用自身,但不返回递归方法调用。因此,一旦递归完成,程序逻辑将继续,并返回原始的无效数据。这可以通过更改:

来解决
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方法执行此操作。

答案 5 :(得分: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);
}
 }

你的返回和返回sm什么也没有返回 应该由return setHour替换并返回setMinute