Void

mano eu estou fazendo um código de teste pq sou iniciante e deu erro na linha 8, alguém pode me ajudar?

1 package teste_de_vida;
2
3 public class main {
4
5 public static void main(String[] args) {
6
7 int vida = 100;
8 void dano() {
9 vida-=20;
10 }
11 dano();
12
13
14 System.out.println(vida);
15
16 }
17
18 }
19

Na linha 8 vc está declarando um método dentro do método main. Em Java este tipo de coisa não é possível fazer.

1 curtida

Como já dito acima, a linguagem não permite que se crie um método dentro de outro. Mas ainda sim não vai resolver. Por exemplo, se vc só mover o método para fora do main:

public static void main(String[] args) {
    int vida = 100;
    dano();

    System.out.println(vida);
}

void dano() {
    vida -= 20;
}

Ainda sim não vai funcionar. Primeiro porque main é um método estático e dano não (então dano precisaria de uma instância da classe para ser chamado).

Outro ponto é que vida é uma variável local ao método main (pois foi criada dentro dele), então o método dano não consegue vê-la (e muito menos modificá-la).

Se a ideia é ter uma classe que tem um valor que pode ser alterado, uma forma de fazer é criar outra classe para gerenciar isso. Por exemplo, primeiro você cria um arquivo Personagem.java com esta classe:

public class Personagem {
    private int vida;
    // cria um personagem, com um valor inicial de vida
    public Personagem(int vida) {
        this.vida = vida;
    }

    public void dano(int valorDano) {
        // a vida pode ser negativa? Eu entendo que não, então se o dano for maior, a vida é zerada
        if (valorDano > this.vida) {
            this.vida = 0;
        } else {
            this.vida -= valorDano;
        }
    }

    public int getVida() {
        return vida;
    }
}

Ou seja, um personagem começa com um determinado valor de vida, e pode tomar dano (se o dano for maior que a vida atual, a vida é zerada).

E aí no main você cria este personagem:

public static void main(String[] args) {
    Personagem p = new Personagem(100); // personagem começa com 100 de vida
    p.dano(20); // toma 20 de dano
    System.out.println(p.getVida()); // 80
}

Claro que tem várias formas diferentes de fazer, tudo depende do que você precisa (em um projeto real, teria requisitos definindo bem cada coisa, etc). Mas a ideia geral é essa.


Mas se é iniciante, eu sugiro começar pelo básico. Dê uma olhada nestes tutoriais.

2 curtidas