Erro: ‘else’ sem ‘se’

Obtendo uma outra coisa sem declaração:

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

Eu preciso usar uma cascata, se é por isso que parece que. Além disso, você poderia por favor me avisar se eu fiz o cascading se corretamente? Eu não fui capaz de encontrar um bom exemplo de cascateamento se assim eu fiz o meu melhor de saber o que significa cascata.

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

Esse é o erro que estou recebendo

Remova o ponto e vírgula no final desta linha:

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

E por favor, por favor, use chaves! Java não é como o Python, onde o recuo do código cria um novo escopo de bloco. É melhor jogar com segurança e sempre usar chaves - pelo menos até você ter mais experiência com o idioma e entender exatamente quando você pode omití-las.

A questão é que o primeiro if if (temp > 95 || temp < 20); é o mesmo usando recuo normal como

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

Isto é, se a temperatura não estiver entre 20 e 95, execute um bloco vazio. Não há mais nada para isso.

A próxima linha mais não tem se corresponder a ela e, portanto, produz o seu erro

A melhor maneira de lidar com isso é sempre usa chaves para mostrar o que é executado após o if. Isso não significa que o compilador detecta os erros, mas, primeiro, é mais provável que você veja qualquer problema observando o recuo e também os erros podem parecer mais legíveis. No entanto, você pode usar ferramentas como eclipse, checkstyle ou FindBugs que informarão se você não usou {} ou usou um bloco vazio.

Uma maneira melhor seria separar a lógica enquanto você está testando novamente

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

Eu vou reformatar isso para você. Se você usar chaves, você nunca terá esse problema.

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