4 votes

Erreur : "else" sans "if

Obtenir une instruction else sans 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 ("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");                                                                                                                                                                                                                                                                   
    }
}

J'ai besoin d'utiliser un if en cascade, c'est pourquoi cela ressemble à cela. Par ailleurs, pourriez-vous me dire si j'ai fait le cascading if correctement ? Je n'ai pas réussi à trouver un bon exemple de cascading if, alors j'ai fait de mon mieux en sachant ce que signifie le terme "cascading".

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

C'est l'erreur que je reçois

20voto

Óscar López Points 97105

Supprimez le point-virgule à la fin de cette ligne :

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

Et s'il vous plaît, s'il vous plaît, utilisez des accolades ! Java est pas comme Python, où l'indentation du code crée une nouvelle portée de bloc. Il est préférable de jouer la sécurité et de toujours utiliser les accolades, du moins jusqu'à ce que vous ayez acquis plus d'expérience avec le langage et que vous compreniez exactement ce qu'est un bloc. quand vous pouvez les omettre.

2voto

Mark Points 21191

Le problème est que le premier si if (temp > 95 || temp < 20); est le même en utilisant l'indentation normale que

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

C'est-à-dire que si la température n'est pas comprise entre 20 et 95, il faut exécuter un bloc vide. Il n'y a rien d'autre à faire.

La ligne suivante else n'a pas de if correspondant et produit donc votre erreur

La meilleure façon de gérer cela est de toujours utiliser des accolades pour montrer ce qui est exécuté après le if. Cela ne veut pas dire que le compilateur détecte les erreurs, mais vous avez plus de chances de voir les problèmes en voyant l'indentation et les erreurs peuvent aussi paraître plus lisibles. Cependant, vous pouvez utiliser des outils comme eclipse, checkstyle ou FindBugs qui vous diront si vous n'avez pas utilisé {} ou si vous avez utilisé un bloc vide.

Une meilleure façon de procéder serait de trier la logique au fur et à mesure que vous testez à nouveau les choses.

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");                                                                                                                                                                                                                                                                   
}

1voto

byteherder Points 305

Je vais reformater ça pour vous. Si vous utilisez des accolades, vous n'aurez jamais ce problème.

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");
                        }
                    }
                }
            }
        }
    }
}

0voto

KMR Adi Points 1

Cette erreur se produit parce que vous avez saisi un point-virgule après l'instruction if. Supprimez le point-virgule à la fin de la première instruction if à la ligne 12.

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

0voto

paniz kiani Points 1

Si (temp > 95 || temp < 20) ; supprimer ce point-virgule

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X