0

私は私のプログラムで再び同じ問題を抱えています。

今回の問題は、59から20の間、プログラムが何も出力しないことです。プログラムは終了するだけです。私の知る限り、すべてのifステートメントは同じようにフォーマットされていますが、脳がエラーをブロックしているので、新鮮な目が必要なのかもしれません。

コードは次のとおりです。

import java.util.Scanner;

public class LazyDaysCamp
{
    public static void main (String[] args)
    {
        int temp;
        Scanner scan = new Scanner(System.in);

        System.out.println ("What's the current temperature?");
        temp = scan.nextInt();
        if (temp > 95 || temp < 20)
        {
            System.out.println ("Visit our shops!");
        } else if (temp <= 95)
            if (temp >= 80)
            {
                System.out.println ("It's good weather for swimming");
            } else if (temp >=60) 
                if (temp < 80)
                {
                    System.out.println ("It's good weather for tennis");
                } else if (temp >= 40)
                    if (temp < 60)
                    {
                        System.out.println ("It's good weather for golf");
                    } else if (temp >= 20)
                        if (temp < 40)
                        {
                            System.out.println ("It's good weather for skiing"); 
                        }
                    }
                }                                                                                                                                                                                                                                                                  
            }
        }
    }
}

誰かが指摘したように、ifステートメントが少し過剰であることは知っていますが、そうする必要があります(ifのカスケード)。それ以外の場合は、論理演算子を使用します。

出力は次のとおりです。

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
100
Visit our shops!

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
85
It's good weather for swimming

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
70
It's good weather for tennis

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
50

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
30

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
15
Visit our shops!

 ----jGRASP: operation complete.
4

3 に答える 3

2

あなたの問題はelseステートメントの中にあります。たとえば、「50」を試してみると

else if (temp >=60) 

そのステートメントはfalseを返し、次のifステートメントにも進みません。つまり、正しい結果を得るためにそのステートメントのelseをたどる可能性はありません。

他のすべてを削除し、ifステートメントを使用することをお勧めします。

于 2012-10-25T01:05:18.487 に答える
1

一部のifステートメントには、条件付きブロックを示す中括弧がありません。これにより、実際に何を達成しようとしているのかを判断するのが非常に困難になります。Javaでは、次の行に実行する必要のあるステートメントが含まれている場合、ifステートメントの後に中括弧を省略することができます。これはシナリオには当てはまらず、前述の規則はベストプラクティスではありません。条件文全体で中括弧を使用して、それらの分離を示すことをお勧めします。

于 2012-10-25T00:54:38.607 に答える
1

ifステートメントのいくつかは不要であることに注意してください。温度がの場合、それがであることを確認した時点>= 80以外にはなりません。これは数回行われます。< 80< 80

問題は、else-ifステートメントが、常に真になるこれらの不要なifステートメントの代わりに配置されていることです。その結果、else-if条件が評価されることさえありません。

if (temp < 80) // this is unnecessary because it's previously checked, and is always true
{
    System.out.println ("It's good weather for tennis");
}
else if (temp >= 40) // this is attached to the true-if and therefore isn't evaluated
于 2012-10-25T00:56:45.243 に答える