Error Non-Static method can not be reference

3

I'm having a problem with:

  

Non-static method write can not be referenced from a static context.

I have tried to change the function to static , however, there it gives problem:

  

non static variable

This is the Personagem class in my code:

import java.util.Random;

class Personagem extends Atributos
{

    //ATRIBUTOS

    public static String nome;
    public static String classe; 
    public static int defesa;
    public static int critico;
    public static int danoMinimo; 
    public static int danoMaximo; 
    public static int healthPoints;
    public static int manaPoints; 


    //CONSTRUTOR

    public Personagem ()
    {
        this.nome = ""; 
        this.classe = "Mago"; 
        this.vitalidade = 10;
        this.armadura = 10; 
        this.forca = 10;
        this.inteligencia = 10;
        this.agilidade = 10; 
        this.sorte = 10; 
        this.defesa = 10 + this.armadura; 
        this.critico = this.sorte / 100; 
        this.healthPoints = 100;
        this.manaPoints = 100; 
        this.danoMinimo = 10;
        this.danoMaximo = 20; 
    }

    //SETTERS 

    public void setNome (String nome)
    {
        this.nome = nome;
    }

    public void setClasse (String classe)
    {
        this.classe = classe;
    }

    public void setDefesa (int defesa)
    {
        this.defesa = defesa;
    }

    public void setCritico (int critico)
    {
        this.critico = critico; 
    }

    public void setHealthPoints (int healthPoints)
    {
        this.healthPoints = healthPoints;
    }

    public void setManaPoints (int manaPoints)
    {
        this.manaPoints = manaPoints;
    }

    public void setDanoMinimo (int danoMinimo)
    {
        this.danoMinimo = danoMinimo;
    }

    public void setDanoMaximo (int danoMaximo)
    {
        this.danoMaximo = danoMaximo; 
    }

    //GETTERS

    public String getNome ()
    {
        return this.nome;
    }

    public String getClasse ()
    {
        return this.classe;
    }

    public int getDefesa ()
    {
        return this.defesa;
    }

    public int getCritico ()
    {
        return this.critico; 
    }

    public int getHealthPoints ()
    {
        return this.healthPoints;
    }

    public int getManaPoints ()
    {
        return this.manaPoints; 
    }

    public int getDanoMinimo ()
    {
        return this.danoMinimo;
    }

    public int getDanoMaximo ()
    {
        return this.danoMaximo;
    }

    public void Ataque (Personagem inimigo)
    {
        Random rand = new Random();

        int ataque; 

        ataque = rand.nextInt(this.danoMaximo) + this.danoMinimo; 
        inimigo.recebeDano(ataque);

    }

    public void recebeDano (int ataque)
    {
        this.healthPoints = ataque - defesa;

    }

}

And this is the class Partida :

import java.util.Scanner;
import java.util.Random; 

class Partida 
{
    Scanner scanf = new Scanner(System.in);
    Random  rand  = new Random();

    Personagem jogador = new Personagem(); 
    Personagem inimigo = new Personagem(); 

    public static void main(String[] args)
    {
        Introducao();
        telaPersonagem();
        chamaTurno();
        jogadorTurno();
        cpuTurno();
        vitoria();

    }

    public static void Introducao ()
    {
        System.out.println("SEJA BEM-VINDO A ARENA, GUERREIRO! DIGA-NOS SEU NOME: "); 
        jogador.setNome("LUCAS"); 
        inimigo.setNome("CPU"); 

    }

    public void telaPersonagem() // MOSTRA A TELA COM INFORMAÇÕES DOS PERSONAGENS 
    {
        System.out.println("NOME: " + jogador.getNome() + "                 NOME:" + inimigo.getNome());
        System.out.println("HP: " + jogador.getHealthPoints() + "               HP: "  + inimigo.getHealthPoints());
        System.out.println("MP: " + jogador.getManaPoints() + "                 MP: "  + inimigo.getManaPoints());

    }

    public void chamaTurno() 
    {

        int jogadorAgi; 
        int cpuAgi; 

        do
        {

        jogadorAgi = rand.nextInt(1) + jogador.getAgilidade(); 
        cpuAgi = rand.nextInt(1) + inimigo.getAgilidade(); 

            if(jogadorAgi > cpuAgi)
            {
                jogadorTurno(); 

            } else
            {
                cpuTurno();

            }

        } while(jogadorAgi != cpuAgi);

    }

    public void jogadorTurno()
    {
        int acao; 

        do
        {

            System.out.println("SEU TURNO"); 
            System.out.println(""); 
            System.out.println("Escolha uma ação"); 
            System.out.println("1 - Atacar"); 
            System.out.println("2 - Atacar forte"); 
            System.out.println("3 - Atacar FORTE MESMO"); 
            acao = scanf.nextInt(); 

            switch(acao)
            {
                case 1 : 
                    jogador.Ataque(inimigo);
                    System.out.println("Ataque realizado com sucesso"); 
                    chamaTurno(); 
                    break; 

                default : 
                    System.out.println("Digite um comando válido"); 
            }   

        } while(jogador.healthPoints != 0); 

    }

    public void cpuTurno()
    {
        int acao; 

        acao = rand.nextInt(1) + 3;

        System.out.println("TURNO INIMIGO"); 

        do
        {
            switch (acao)
            {
                case 1:
                    inimigo.Ataque(jogador); 
                    System.out.println("Você é atacado com sucesso"); 
                    chamaTurno();
                    break;

                case 2: 
                    inimigo.Ataque(jogador); 
                    System.out.println("Você é atacado com sucesso"); 
                    chamaTurno(); 
                    break;

                case 3:
                    inimigo.Ataque(jogador); 
                    System.out.println("Você é atacado com sucesso"); 
                    chamaTurno(); 
                    break;
            }
        } while(inimigo.healthPoints != 0);

    }

    public void vitoria()
    {
        if(jogador.healthPoints == 0)
        {
            System.out.println("Você perdeu!");
        }

        if(inimigo.healthPoints == 0)
        {
            System.out.println("Você venceu!");
        }
    }

}
    
asked by anonymous 08.06.2018 / 13:48

1 answer

4

This happens because you have these two lines outside the main method:

Personagem jogador = new Personagem(); 
Personagem inimigo = new Personagem();

When a class is instantiated (that is, created with new ), its variables are, by definition, non-static (since they are specific to that particular instantiated object), hence the error.

Move these two lines into main . Put the other two lines in too. You only need these objects while the main method is running, they do not (and should not) need to be class variables.

    
08.06.2018 / 13:52