0

次のコードで理由がわかりません。

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);{
 if (starttimeHours >=6 && starttimeHours <=9 ){
 int peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  int peaktimeWage = 2;}

else {int peaktimeFare = 3;}{
  System.out.println(peaktimeWage);

「peaktimeWage を変数に解決できません」というエラーが表示され続けます。コードの最後の行は次のとおりです。

  System.out.println(peaktimeWage);          

それは以前に定義された変数であり、その変数の隣に変数が使用されていないことさえあるからです。先ほどのコードと同じように書いていることをプリントアウトして確認しました。だから、何が問題なのかわからない。誰でも知っていますか?

4

6 に答える 6

1

のスコープは、とpeaktimeWageに限定されます。あなたの外にそれをデカールifelseif else

int peaktimeWage = -1;
if (starttimeHours >=6 && starttimeHours <=9 ){
    peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
    peaktimeWage = 2;
}
于 2012-09-19T04:14:53.427 に答える
0

問題はpeaktimeWage、コンパイラが確実に認識できる場所を定義していないことです。コンパイル時に、コンパイラはこれらの if ステートメントのいずれかが確実に評価されるかどうかを知りません。

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
int peaktimeWage = 0; // Have a default value in case it doesn't get set
if (starttimeHours >=6 && starttimeHours <=9 )
{
     peaktimeWage = 4;
}
else if (starttimeHours >=1 && starttimeHours <=5 )
{
     peaktimeWage = 2;
}
else
{
     int peaktimeFare = 3;
}
System.out.println(peaktimeWage); 

peaktimeFare他のifステートメントがfalseの場合にのみ定義されることを考えると、 にも問題があります。peaktimeFare( =でない限りpeaktimeWage)

于 2012-09-19T04:13:59.200 に答える
0

環境では定義されておらず、if句内で定義されているため(したがって、この変数のスコープは内ifまたは内のみelse ifです)、実行が完了すると、if存在しません...

ところで、2 つの閉じ括弧がありません}

コードを次のように変更します。

int peaktimeWage = 0;
System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
{
 if (starttimeHours >=6 && starttimeHours <=9 ){
 peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;}

 else {int peaktimeFare = 3;}
{
  System.out.println(peaktimeWage);
}
于 2012-09-19T04:14:28.823 に答える
0

peaktimeWage は if ブロック内で宣言されています。これは、if ブロックの最後に範囲外になり、ガベージ コレクターによってクリーンアップされることを意味します。また、peaktimeFare 変数でも同じ問題が発生します。

代わりに試してください

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
{    
int peaktimeWage = 0;
int peaktimeFare = 0;
 if (starttimeHours >=6 && starttimeHours <=9 ){
 peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;}

else {peaktimeFare = 3;}{
  System.out.println(peaktimeWage);
于 2012-09-19T04:18:18.373 に答える
0

変数のスコープが正しくありません。

あなたを変える

if (starttimeHours >=6 && starttimeHours <=9 ){
     int peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
      int peaktimeWage = 2;
}

int peaktimeWage = -1;
int peaktimeWage = -1;

if (starttimeHours >=6 && starttimeHours <=9 ){
  peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;
}
于 2012-09-19T04:16:15.293 に答える
0

これは、問題の変数のスコープに関係しています。これはあなたが書いたものです:

if (starttimeHours >=6 && starttimeHours <=9 ){
 int peaktimeWage = 4;
}

上記のステートメントは、変数のスコープがステートメントpeaktimeWageifのみにあることを意味します。外部のステートメントは、変数の存在を認識しません。

解決策:ブロックの外側で変数を定義し、if場合によってはこのブロック内の値を変更します。

于 2012-09-19T04:16:28.857 に答える