0

こんにちは、私はまだJavaに慣れていないので、メソッド間で値を渡すのに苦労しています。私が行ったすべての調査で、私はまだそれを正しく理解できません。とにかく、コメントやアドバイスは大歓迎です。以下のコードを読む手間を省くために、値を返す 2 つのメソッドを用意し、それらを 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

getMinute()getHour()メソッドでは、ユーザー入力を格納する値を返す必要があります。また、この場合、後で別のイベントからアクセスする場合を除いて、すべてが同じイベントによって処理されるため、staticintsHおよび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 に答える
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();

于 2012-11-23T11:46:30.727 に答える
0

メソッドの値を静的プロパティに割り当てていません。

 static int sH, sM;

そのため、0を取得しています。

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

于 2012-11-23T11:51:00.683 に答える
0

時間を印刷するために渡される静的変数がsHありますが、値が割り当てられることはありません。実際、それらはまったく必要ありません。sMshowTime

代わりに、getHour関数がsetHour変数をgetMinute返し、メソッドが変数を返すようにする必要がありますsetMinute

次に、次のように showTime メソッドを呼び出すだけです。

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

getHourandメソッド内にも問題があります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 に答える
0

変数 sH と sM に値が割り当てられることはありません。変更せずに返すだけです。戻りsetHoursetMinute代わりにそれらを に渡してみてくださいshowTime

于 2012-11-23T11:45:35.760 に答える