Problema com método / objeto

16/09/2018

0

Oi, é o seguinte, eu sou novo em Java, estou fazendo um curso de T.I na minha cidade, mas o problema é que a turma é muito lenta, e eu sinto que não estou evoluindo. Por isso estou criando scripts pra me ajudar no dia a dia (e em jogos que eu jogo de vez enquando, que é esse caso).

Basicamente eu estou usando duas classes, uma principal e outra pra definir TUDO que eu preciso nela, a classe principal está basicamente pronta, o problema é que eu não estou sabendo como fazer pra colocar tudo na classe naves.
package pacoteClasses;

import java.util.Scanner;

public class main {
    public static void main (String[] args){
        Scanner input = new Scanner(System.in);

        //inicio programa
        while(true) {
            //menu
            System.out.println("1 - Consulta");
            System.out.println("2 - Compra");
            System.out.println("3 - Venda");
            //fim menu

            int menu = input.nextInt();
            switch (menu){
                case 1:
                    System.out.println("1 - Consultar naves disponiveis");
                    System.out.println("2 - Consultar recursos disponiveis");

                    int menuSwitch = input.nextInt();

                    if (menuSwitch == 1){
                        System.out.println(naves);
                    }
                    else {
                        //mostrando os meus recursos in-game
                        System.out.println("Você tem");

                        System.out.println(silicate + " Unidades de Silicate");
                        System.out.println(carbon + " Unidades de Carbon");
                        System.out.println(iridium + " Unidades de Iridium");
                        System.out.println(adamantite + " Unidades de Adamantite");
                        System.out.println(palladium + " Unidades de Palladium");
                        System.out.println(titanium + " Unidades de Titanium");
                        System.out.println(quantium + " Unidades de Quantium");
                        //fim monstrar recurso
                    }
                    break;
                case 2:
                    //inicio compra nave
                    System.out.println("Qual nave comprar?");
                    String nave = input.nextLine();
                    //fim compra nave
                    break;
                case 3:
                    System.out.println("Vou receber");
                    System.out.println(silicate + " Unidades de Silicate");
                    System.out.println(carbon + " Unidades de Carbon");
                    System.out.println(iridium + " Unidades de Iridium");
                    System.out.println(adamantite + " Unidades de Adamantite");
                    System.out.println(palladium + " Unidades de Palladium");
                    System.out.println(titanium + " Unidades de Titanium");
                    System.out.println(quantium + " Unidades de Quantium");
                    break;
            }
        }
        //fim programa
    }
}


Essa é a classe das naves que eu estou tentando fazer, o problema é que como eu disse ainda não sei usar métodos direito, pois não achei nada na internet que seja completinho e simples de entender (eu sou muito curioso e quando eu vi aqueles getAlgumaCoisa e depois vem o setOutraCoisa, e já comecei a procurar sobre, mas não encontrei o motivo daquilo existir e por que tem que ser daquela forma, daí eu acabei "desistindo" de método.)

Basicamente eu quero colocar 140 naves aí, cada uma contendo um valor de silicate, carbon, tudo, o problema é que eu não sei se ficaria mais fácil criar um objeto pra cada nave e depois "settar" cada valor pra cada nave.

package pacoteClasses;

import java.util.Scanner;

public class naves {
    Scanner input = new Scanner(System.in);

    public int silicate, carbon, iridium,adamantite, palladium, titanium, quantium;
    public float custo;
    public String nome;
}
Miguel Mansur

Miguel Mansur

Responder

Post mais votado

17/09/2018

Olá Miguel,
eu não vou explicar aqui como usar os métodos porque encontrei aqui no portal da DevMedia dois artigos sobre o assunto, então, vou te passar os links e você pode dar uma lida neles. Se ficar alguma duvida você volta a perguntar, ok.

Criando métodos get e set em Java - https://www.devmedia.com.br/criando-metodos-get-e-set-em-java/24623
Get e Set - Métodos Acessores em Java - https://www.devmedia.com.br/get-e-set-metodos-acessores-em-java/29241

Marcio Souza

Marcio Souza
Responder

Mais Posts

24/09/2018

Hélio Bianchi

Oi Miguel,

Pelo que eu entendi você quer fazer o seguinte com esse programa:
1. poder consultar um saldo de minerais
2. poder ver a lista de naves disponíveis para compra
3. comprar uma nave
4. vender uma nave

Mas neste tópico específico, você quer saber como criar uma lista de naves, com as propriedades de cada uma, e depois conseguir consultar essa lista (ou seja, implementar a funcionalidade 2). Pensando em como um profissional abordaria esse problema, o correto seria separar os dados da funcionalidade (usar um banco de dados, ou escrever um arquivo JSON ou CSV). Só que para isso, você precisaria de conhecimentos que estão à frente do seu ponto atual de aprendizado. Então eu pensei em uma abordagem útil, embora não seja o que deveria ser feito em uma aplicação em contexto profissional. Desse jeito, as informações vão estar embutidas no código (tb chamado de hard-coded). Então, teremos as seguintes subtarefas:

2.1. construir a classe Nave
2.2. criar um método que cria um conjunto de naves
2.3. criar um método que lista o conjunto de naves

2.1.1. vou também adicionar o método toString() na classe Naves, que servirá para gerar uma representação textual de uma nave

Código da classe Naves

package forum.problema_com_metodo_objeto;

public class Nave{
  // os atributos serão private, pois eles deverão ser acessados indiretamente 
  // através dos getters e setters
  private String nome;
  // float só é utilizado em casos muito específicos, 
  // e são mais chatos de lidar que double. prefira double
  private double custo;
  private int 
    silicate, 
    carbon, 
    iridium,
    adamantite, 
    palladium, 
    titanium, 
    quantium;
  
  // essa é a abordagem recomendada quando queremos exibir os dados de um objeto
  public String toString(){
    String textoNave = 
        "nome: " + nome + "\\n" + 
        "custo: " + custo + "\\n" + 
        "silicate: " + silicate + "\\n" + 
        "carbon: " + carbon + "\\n" + 
        "iridium: " + iridium + "\\n" + 
        "adamantite: " + adamantite + "\\n" + 
        "palladium: " + palladium + "\\n" + 
        "titanium: " + titanium + "\\n" + 
        "quantium: " + quantium;
    
    return textoNave;
  }
  
  // o resto do código são os getters e setters
  
  public String getNome(){
    return nome;
  }
  public void setNome(String nome){
    this.nome = nome;
  }
  
  public double getCusto(){
    return custo;
  }
  public void setCusto(double custo){
    this.custo = custo;
  }
  
  // repita o padrão para todos os minerais
  public int getSilicate(){
    return silicate;
  }
  public void setSilicate(int silicate){
    this.silicate = silicate;
  }
  
}


Método que cria o conjunto de naves (hard-coded). Pode ser adicionado na classe principal mesmo

public static HashMap<String,Nave> criarNaves(){
  // este método carrega uma lista de naves utilizando a collection HashMap.
  // um HashMap guarda valores usando o par <chave,valor>
  // dessa maneira, poderemos resgatar um objeto pelo nome da nave
  // e não é necessário saber de antemão o tamanho da lista, como no uso de arrays
  // não vou entrar em detalhes sobre collections, mas espero que o código esteja simples de entender
  // obs: você precisa importar a classe java.util.HashMap
  
  HashMap<String,Nave> naves = new HashMap<String,Nave>();
  
  // vou criar somente duas naves e preencher três propriedades para não deixar o código muito extenso
  // repita o padrão para quantas precisar
  
  Nave millenium = new Nave();
  millenium.setNome("millenium");
  millenium.setCusto(79999.9);
  millenium.setSilicate(300);
  naves.put(millenium.getNome(), millenium);
  
  Nave falcon = new Nave();
  falcon.setNome("falcon");
  falcon.setCusto(88001);
  falcon.setSilicate(300);
  naves.put(falcon.getNome(), falcon);

  return naves;
}



método main com o código necessário para testar o que foi implementado

public static void main(String[] args) {
  boolean sair = false;
  
  HashMap<String,Nave> catalogoDeNaves = criarNaves();
  
  Scanner sc = new Scanner(System.in);
  int opcaoInt;
  
  while(!sair){
    System.out.println("1 - Consulta");
    System.out.println("2 - Compra");
    System.out.println("3 - Venda");
    System.out.println("4 - Sair");
    System.out.print("\\n\\n");
    
    opcaoInt = sc.nextInt();
    
    switch(opcaoInt){
    case 1:
      System.out.println("Temos as seguintes naves. digite o nome de uma nave para ver os detalhes \\n");
      
      // o for abaixo é o que se usa para percorrer um Map por completo
      for(Entry<String,Nave> e : catalogoDeNaves.entrySet()){
        System.out.println(e.getKey());
      }
      
      String opcaoNave = new Scanner(System.in).nextLine();
      // se o nome for válido, podemos exibir os detalhes da nave
      // esta abordagem está simplificada. o correto seria utilizar exceptions
      Nave naveEscolhida = catalogoDeNaves.get(opcaoNave);

      if(naveEscolhida != null){
        System.out.println(naveEscolhida.toString() + "\\n");
      }
      else{
        System.out.println("nave não encontrada \\n");
      }
      
      break; // fim do "case 1"
     
    case 4 : 
      sair = true; break;
    }
    
  }
}

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar