Como resolver esse problema em específico: Main.java:12: error: cannot find symbol?

É possível preparar a string para receber apenas um valor ?

 public class Lampada {
    private boolean estado = true;
    public void getEstado(boolean alterarEstado) {
        this.estado = alterarEstado;
    }
    public boolean getEstado() {
        return estado;
    }
}


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

public class Main {
    private static final PrintStream echo = System.out;
    public static void main (String [] args) {

    echo.println("\n\n Comando 'ligar' ou 'desligar' lampada.");
    String comando, ligar, desligar;
    comando = new Scanner(System.in).nextLine();
    ligar = lampada.getEstado(true);
    desligar = lampada.getEstado(true);
    Lampada lampada = new Lampada();
    
    switch(comando){

        case "ligar": // ligar é lampada.getEstado(true); 
        echo.println("Lampada ligada.");
        echo.println("-");
        break;

        case "desligar": // desligar é lampada.getEstado(false);
        echo.println("Lampada desligada.");
        echo.println("-");
        break;
    }
  }
}   

erros

symbol: variable lampada
location: class Main
Main.java:12: error: cannot find symbol

Como assim “preparar a string para receber apenas um valor”?

Se o que você quer é restringir os possíveis valores de input do usuário para a stdin do seu processo, não tem como. Você precisa escrever a camada de interface entre o cliente e o domínio da sua aplicação. É nessa camada onde você vai barrar input inválida. No seu exemplo, o cliente é um teletype e você já escreveu essa camada usando o switch.

1 curtida

Seria possível limitar os dados do teclado? :smiley:

Não dá pra entender o que você quer fazer. Pode explicar com mais clareza?

Seria possível limitar os dados do teclado? :smiley:

Do stdin não. Você não tem controle do ambiente onde o usuário está entrando com informações se quiser usar a stdin pra ler dados. Pode ser bash (ou outro shell qualquer), pode ser através de uma system call pra exec, etc.

O que você pode fazer é fazer a interface gráfica do seu próprio terminal e o usuário digita lá ao invés de usar o teletype pra mandar dados pra stdin do seu processo.

De qualquer forma, em algum lugar você vai ter que escrever o switch, de uma forma ou de outra.

ligar = lampada.getEstado(true);    // onde foi declarada a variável lampada?
desligar = lampada.getEstado(true); // onde foi declarada a variável lampada?
Lampada lampada = new Lampada();    // só aqui que você declarou a variável lampada
1 curtida

A variável lampada é da classe Lampada.java

E como é que você pretende usar a variável antes de ter declarado ela?

Na primeira e segunda linha você está tentando usar ela, mas ela só é declarada na terceira linha, ou seja, na primeira e segunda linha ela ainda não existe.

1 curtida

Main.java:13: error: incompatible types: void cannot be converted to String
ligar = lampada.getEstado(true);

O q significa e como resolvo o error?

  1. Traduz a mensagem de erro.

  2. Verifica qual o tipo de dado da variável ligar.

  3. Verifica qual o tipo de dado retornado pelo método getEstado(Boolean)

1 curtida