Meu código não funciona. Como usar Switch case para imprimir se a lampada está ligada ou desligada?

31 respostas
programação
1

Meu código não funciona. Estou tentando usar um switch case para imprimir se a lampada está ligada ou desligada. Estou tentando fazer uma classe lampada onde existe um estado boleano= False, true. Onde false é para a lampada desligada e true para a lampada ligada. Mas, não funciona. Eu já testei de outros modos, ficaria feliz se alguém conseguir me mostrar o erro e assim tentar fazer uma solução melhor

Lampada.java

public class Lampada {
	private boolean ligada = true;
	
	/*
	* Métodos acessores e modificadores
	*/
	public void setLigada(boolean alteraEstado){
		if(isLigada() != alteraEstado)
			this.ligada = alteraEstado;
	}
	
	public boolean isLigada(){
		return ligada;
	}
}

Main.java

import java.util.Scanner;
public class Main {

Scanner sc = new Scanner(System.in);
String comando = sc.nextLine();
Lampada lampada = new Lampada();

public static void main(String[] args){
System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");

switch (comando){

	     
	     case "ligar":
	     if(comando.equals("ligar")){lampada.isLigada();lampada.setLigada(true); System.out.println("\n\n lampada ligada."); }
	     break;
	            	 
       	 
       	 case "desligar":
       	 if(comando.equals("ligar")){lampada.isDesligada();lampada.setLigada(false); System.out.println("\n\n lampada desligada."); }
	     break;

         }
     }
}

31 Respostas

rodriguesabner

vc está tentando chamar variáveis não estáticas dentro de um método estático. Vc pode atribuir o static nelas:

static Scanner....

Ou fazer criar um método não estático e chama-lo dentro do public static void main

import java.util.Scanner;

public class Main {

    Scanner sc = new Scanner(System.in);
    String comando = sc.nextLine();
    Lampada lampada = new Lampada();

    private void setAcao() {
        System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");
        switch (comando) {
            case "ligar":
                if (comando.equals("ligar")) {
                    lampada.isLigada();
                    lampada.setLigada(true);
                    System.out.println("\n\n lampada ligada.");
                }
                break;

            case "desligar":
                if (comando.equals("desligar")) {
                    lampada.setLigada(false);
                    System.out.println("\n\n lampada desligada.");
                }
                break;
        }
    }

    public static void main(String[] args) {
        new Main().setAcao();
    }
}
1

Deu erro :face_with_raised_eyebrow::smiley:

Main.java:20: error: non-static variable lampada cannot be referenced from a static context if(comando.equals(“ligar”)){lampada.isDesligada();lampada.setLigada(fal
se)
; System.out.println("\n\n lampada desligada."); }
^

O q é esse erro?

rodriguesabner

Vc copiou e colou?

error: non-static variable lampada cannot be referenced from a static context

ta falando que a variavel lampada nao pode ser referenciada em um contexto estático, exatamente o q eu estava te explicando acima.

Mostra como vc colou aí

1

Sim, verdade. Mas, já mudei para para o contexto estático, mas não funciona.

rodriguesabner

pq nao funciona? oq acontece? manda código, manda erro

1

1
Main.java:20: error: non-static variable comando cannot be referenced from a sta

tic context

if(comando.equals(ligar)){lampada.isDesligada();lampada.setLigada(fal

se); System.out.println("\n\n lampada desligada."); }

^

Main.java:20: error: non-static variable lampada cannot be referenced from a sta

tic context

if(comando.equals(ligar)){lampada.isDesligada();lampada.setLigada(fal

se); System.out.println("\n\n lampada desligada."); }

^

Main.java:20: error: cannot find symbol

if(comando.equals(ligar)){lampada.isDesligada();lampada.setLigada(fal

se); System.out.println("\n\n lampada desligada."); }

^

symbol:   method isDesligada()

location: variable lampada of type Lampada

Main.java:20: error: non-static variable lampada cannot be referenced from a sta

tic context

if(comando.equals(ligar)){lampada.isDesligada();lampada.setLigada(fal

se); System.out.println("\n\n lampada desligada."); }

^

8 errors

Lampada.java

public class Lampada {
	private static boolean ligada = true;
	
	// Métodos acessores e modificadores
	
	public static  void setLigada(boolean alteraEstado){
		if(isLigada() != alteraEstado)
			this.ligada = alteraEstado;
	}
	
	public static  boolean isLigada(){
		return ligada;
	}
}

Main.java

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
    new Main().setAcao();

    Scanner sc = new Scanner(System.in);
    String comando = sc.nextLine();
    Lampada lampada = new Lampada();

    private static void setAcao() {
    System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");
    
        switch (comando) {
            case "ligar":
                if (comando.equals("ligar")) {
                    lampada.isLigada();
                    lampada.setLigada(true);
                    System.out.println("\n\n lampada ligada.");
                }
                break;

            case "desligar":
                if (comando.equals("desligar")) {
                    lampada.setLigada(false);
                    System.out.println("\n\n lampada desligada.");
                }
                break;
        }
      }
   }
 }
rodriguesabner

é que vc colocou tudo dentro do public static void main, pode copiar e colar do jeito que eu mandei aqui.

public class Main{

    Scanner sc = new Scanner(System.in);
    String comando = sc.nextLine();
    Lampada lampada = new Lampada();

    public static void main(String[] args) {
        new Main().setAcao();
    }

    private void setAcao() {
    System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");
    
        switch (comando) {
            case "ligar":
                if (comando.equals("ligar")) {
                    lampada.isLigada();
                    lampada.setLigada(true);
                    System.out.println("\n\n lampada ligada.");
                }
                break;

            case "desligar":
                if (comando.equals("desligar")) {
                    lampada.setLigada(false);
                    System.out.println("\n\n lampada desligada.");
                }
                break;
        }
      }
 }
1

Olha isso

:face_with_raised_eyebrow:

1

Fiz diferente

public class Main{

Scanner sc = new Scanner(System.in);
String comando = sc.nextLine();
Lampada lampada = new Lampada();

public static void main(String[] args) {
    new Main().Resultado();
}

private void Resultado() {
System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");

    switch (comando) {
        case "ligar":
            if (comando.equals("ligar")) {
                lampada.isLigada();
                lampada.setLigada(true);
                System.out.println("\n\n lampada ligada.");
            }
            break;

        case "desligar":
            if (comando.equals("desligar")) {
                lampada.setLigada(false);
                System.out.println("\n\n lampada desligada.");
            }
            break;
    }
  }

}

1

Na class Lampada fiz

public class Lampada {
private boolean ligada = true;
private boolean desligada = false;

// Métodos acessores e modificadores
public void Ligada(boolean alteraEstado){
	if(Ligada() != alteraEstado)
		this.ligada = alteraEstado;
}

public void Desligada(boolean alteraEstado){
	if(Desligada() != alteraEstado)
		this.desligada= alteraEstado;
}

public boolean Ligada(){
	return ligada;
}

public boolean Desligada(){
	return desligada;
}
 }

public class Main{

Scanner sc = new Scanner(System.in);
String comando = sc.nextLine();
Lampada lampada = new Lampada();

public static void main(String[] args) {
    new Main().Resultado();
}

private void Resultado() {
System.out.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");

    switch (comando) {
        case "ligar":
            if (comando.equals("ligar")) {
                // lampada.Ligada();
                lampada.setLigada(true);
                System.out.println("\n\n lampada ligada.");
            }
            break;

        case "desligar":
            if (comando.equals("desligar")) {
                lampada.setDesligada(false);
                System.out.println("\n\n lampada desligada.");
            }
            break;
    }
  }
  }
1
error: cannot find symbol

Scanner sc = new Scanner(System.in);

symbol: class Lampada

location: class Main

error: cannot find symbol :  Lampada lampada = new Lampada();

O que significa isso?

1

Outros erros

:face_with_raised_eyebrow:

main.java:3: error:  expected

Scanner sc = new static Scanner(System.in);

^

ain.java:3: error: ( or [ expected

Scanner sc = new static Scanner(System.in);

^

ain.java:3: error: ; expected

Scanner sc = new static Scanner(System.in);

^

ain.java:3: error: illegal start of type

Scanner sc = new static Scanner(System.in);

^

ain.java:3: error: ; expected

Scanner sc = new static Scanner(System.in);

^

ain.java:3: error:  expected

Scanner sc = new static Scanner(System.in);

^
rodriguesabner

Acabei dormindo… Me deixa perguntar, pq vc não usa uma ide?

staroski

Não tem que mudar nada pra estático.

Adicionou complexidade desnecessária.

Veja o exemplo abaixo:

Classe Lampada:

public class Lampada {

    private boolean ligada = true;

    /*
     * Métodos acessores e modificadores
     */
    public void setLigada(boolean alteraEstado) {
        this.ligada = alteraEstado;
    }

    public boolean isLigada() {
        return ligada;
    }
}

Classe Main

import java.io.PrintStream;
import java.util.Scanner;

public class Main {

    private static final PrintStream saida = System.out;
    private static final Scanner estrada = new Scanner(System.in);

    public static void main(String[] args) {
        Main programa = new Main();
        programa.executar();
    }

    public void executar() {
        Lampada lampada = new Lampada();

        saida.println("\n\n Comando 'ligar' lampada ou 'desligar' lampada.\n\n");
        String comando = estrada.nextLine();

        switch (comando) {
            case "ligar":
                lampada.setLigada(true);
                break;

            case "desligar":
                lampada.setLigada(false);
                break;
        }

        if (lampada.isLigada()) {
            saida.println("\n\n lampada ligada.");
        } else {
            saida.println("\n\n lampada desligada.");
        }
    }
}
Lucas_Camara

Tem muita coisa que pode ser melhorada no seu código:

  • Faça identação correta do código. Isso ajuda a entender mais rápido e é uma boa prática;
  • Não acho que a classe Lampada precise de dois atributos para representar o estado da lâmpada (ligado e desligado). Acredito que apenas um atributo resolveria;
  • Ao ligar e desligar a lâmpada, acho desnecessário esses IFs. Basta simplesmente ligar e desligar;
  • Não achei o comando que lê a entrada do usuário usando a classe Scanner;
  • No switch, dentro de cada case, é desnecessário a verificação do comando usando equals, sendo que já é tratado pelo switch.

Bom, montei um exemplo simples aqui, dê uma olhada e sinta-se a vontade para melhorá-lo:

Lampada

public class Lampada {

    private boolean ligada;

    public Lampada() {
        super();
    }
    
    public void ligar() {
        ligada = true;
    }
    
    public void desligar() {
        ligada = false;
    }

    public boolean isLigada() {
        return ligada;
    }
}

Main

public class MainLampada {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Lampada lampada = new Lampada();
        
        System.out.println("Comando 'ligar' lampada ou 'desligar' lampada:");
        String comando = scanner.nextLine();
        
        switch (comando) {
        case "ligar":
            lampada.ligar();
            System.out.println("Lâmpada ligada.");
            break;
        case "desligar":
            lampada.desligar();
            System.out.println("Lâmpada desligada.");
            break;
        }
        
        scanner.close();
    }
}
1

Não funciona :sweat_smile:

1

Não funciona esse código :sweat_smile:

1

Creio que a IDE não ajuda muito iniciantes

Lucas_Camara

Rodei aqui e funcionou de boa. Qual problema está aparecendo pra vc?

javaflex

Muito pelo contrário. Se tivesse debugando em uma IDE teria mais facilidade pra resolver esses problemas sozinho.

1

Acho que pela minha dificuldade, ela não está me ajudando muito :sweat_smile:

1

Esses erros :sweat_smile::face_with_raised_eyebrow::smiley:

Main.java:1: error: class MainLampada is public, should be declared in a file na

med MainLampada.java

public class MainLampada {

^

Main.java:4: error: cannot find symbol

Scanner scanner = new Scanner(System.in);

^

symbol:   class Scanner

location: class MainLampada

Main.java:4: error: cannot find symbol

Scanner scanner = new Scanner(System.in);

^

symbol:   class Scanner

location: class MainLampada

3 errors
Lucas_Camara

Como vc está rodando o código?

1

javac Main.java

java Main

Lucas_Camara

Qual o nome do arquivo java onde vc colocou esse código?

1

Main.java e Lampada.java

staroski

Então tem 3 possibilidades:

  1. Você copiou errado;
  2. Você não compilou;
  3. Você não sabe executar.
staroski

O erro do compilador está dizendo que você chamou a classe de MainLampada:

Main.java:1: error: class MainLampada is public, should be declared in a file named MainLampada.java
1

Ah :sweat_smile:

1

Resolvi, era problema no cmd.exe

Criado 15 de outubro de 2019
Ultima resposta 19 de out. de 2019
Respostas 31
Participantes 5