你好我还是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);
}
}
答案 0 :(得分:1)
您没有在方法中的sH
或sM
中保存您的值,而是在返回它们。因此,返回的值将为0 only
。
int setHour = input.nextInt();
这应该是: -
sH = input.nextInt();
此外,如果您已将它们声明为主方法之外的静态变量,则实际上不需要返回它们。
更好的想法是不要使用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();
答案 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永远不会被赋值,您只是将它们保持不变。
请尝试返回setHour
和setMinute
,然后将其传递给showTime
。
答案 3 :(得分:0)
您没有在方法中为静态属性赋值。
static int sH, sM;
这就是为什么你得到0。
sH = input.nextInt(); sM = input.nextInt();
答案 4 :(得分:0)
您将静态变量sH
和sM
传递到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
方法执行此操作。
答案 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