Fórum Problema com método / objeto #597185
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.
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.
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
Curtir tópico
+ 0
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
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

Responder
Gostei + 1
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
Método que cria o conjunto de naves (hard-coded). Pode ser adicionado na classe principal mesmo
método main com o código necessário para testar o que foi implementado
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)