4

ifステートメントなしでelseを取得する:

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 ("Swimming");
                else if (temp >=60) 
                    if (temp <= 80)
                    System.out.println ("Tennis");
                    else if (temp >= 40)
                        if (temp < 60)
                        System.out.println ("Golf");
                        else if (temp < 40)
                            if (temp >= 20)
                            System.out.println ("Skiing");                                                                                                                                                                                                                                                                   
    }
}

そのように見えるのであれば、カスケードを使用する必要があります。また、カスケードが正しく行われたかどうかを教えてください。カスケードの良い例を見つけることができなかったので、カスケードの意味を知ることから最善を尽くしました。

LazyDaysCamp.java:14: error: 'else' without 'if'
            else if (temp <= 95)
            ^
1 error

それは私が得ているエラーです

4

4 に答える 4

20

この行の最後にあるセミコロンを削除します。

if (temp > 95 || temp < 20);

そして、中かっこを使用してください!Javaは、コードをインデントすると新しいブロックスコープが作成されるPythonとは異なります安全にプレイし、常に中括弧を使用することをお勧めします。少なくとも、言語の経験を積み、いつ省略できるかを正確に理解するまでは。

于 2012-10-25T00:09:27.020 に答える
2

問題は、最初の ifif (temp > 95 || temp < 20);が通常のインデントを使用して同じであるということです

if (temp > 95 || temp < 20)
{
}

つまり、temp が 20 から 95 の間でない場合は、空のブロックを実行します。これには他にありません。

次の行 else にはそれに対応する if がないため、エラーが発生します

これに対処する最善の方法は、常に中かっこを使用して、if の後に実行される内容を示すことです。これは、コンパイラがエラーをキャッチするという意味ではありませんが、まず、インデントを確認することで問題が発生する可能性が高くなり、エラーが読みやすくなる可能性があります。ただし、Eclipse、checkstyle、FindBugs などのツールを使用して、{} を使用していないか、空のブロックを使用しているかどうかを確認できます。

より良い方法は、再テストするときにロジックを整理することです

if (temp > 95 || temp  < 20)  
{
  System.out.println ("Visit our shops");
} else if (temp >= 80)
{
    System.out.println ("Swimming");
} else if (temp >=60)
{ 
   System.out.println ("Tennis");
} else if (temp >= 40)
{
     System.out.println ("Golf");
} else if (temp >= 20)
{
   System.out.println ("Skiing");                                                                                                                                                                                                                                                                   
}
于 2012-10-25T00:13:32.627 に答える
1

私はあなたのためにこれを再フォーマットするつもりです。中括弧を使用すると、この問題は発生しません。

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) //<-- I removed the semicolon that caused the error
        {
            System.out.println ("Visit our shops");
        }
        else if (temp <= 95)
        {
            if (temp >= 80)
            {
                System.out.println ("Swimming");
            }
            else if (temp >=60)
            {
                if (temp <= 80)
                {
                    System.out.println ("Tennis");
                }
                else if (temp >= 40)
                {
                    if (temp < 60)
                    {
                        System.out.println ("Golf");
                    }
                    else if (temp < 40)
                    {
                        if (temp >= 20)
                        {
                            System.out.println ("Skiing");
                        }
                    }
                }
            }
        }
    }
}
于 2012-10-25T01:28:35.653 に答える