How to create several variables of the same type without repeating conditions?

Asked

Viewed 381 times

-1

import java.util.ArrayList;
import java.util.Scanner;

class Main {
  public static void main(String[] args) {



Categoria c1 = new Categoria();
    c1.categoria = "-Reprodução";
    c1.nome = "Ahmed Shafik";
    c1.ano = "2016";
    c1.justificativa = "por pesquisar os efeitos do uso de calças de poliéster, algodão e lã na vida sexual dos ratos e depois repetir a experiência em homens.";

Categoria c2 = new Categoria();
    c2.categoria = "-Economia";
    c2.nome = "Mark Avis, Sarah Forbes e Shelagh Ferguson";
    c2.ano = "2016";
    c2.justificativa = "por descobrirem as personalidades das rochas, de uma perspectiva de vendas e marketing.";

Categoria c3= new Categoria();
    c3.categoria = "-Física";
    c3.nome = "Gábor Horváth, Miklós Blahó, György Kriska, Ramón Hegedüs, Balázs Gerics, Róbert Farkas, Susanne Åkesson, Péter Malik e Hansruedi Wildermuth";
    c3.ano = "2016";
    c3.justificativa = "por descobrirem por que cavalos de pelos brancos são menos atacados por moscas, e por descobrirem por que libélulas são atraídas por lápides pretas.";

Categoria c4= new Categoria();
    c4.categoria = "-Química";
    c4.nome = "Volkswagen";
    c4.ano = "2016";
    c4.justificativa = "por resolver o problema das emissões excessivas de gases poluentes nos seus automóveis de forma automática, produzindo menos emissões sempre que estão sendo testados.";

Categoria c5= new Categoria();
    c5.categoria = "-Medicina";
    c5.nome = "Christoph Helmchen, Carina Palzer, Thomas Münte, Silke Anders e Andreas Sprenger";
    c5.ano = "2016";
    c5.justificativa = "por descobrirem que quando se tem uma coceira no lado esquerdo do corpo, esta pode ser aliviada olhando para um espelho e coçando o lado direito do corpo e vice-versa.";

Categoria c6= new Categoria();
    c6.categoria = "-Psicologia";
    c6.nome = "Evelyne Debey, Maarten De Schryver, Gordon Logan, Kristina Suchotzki e Bruno Verschuere";
    c6.ano = "2016";
    c6.justificativa = "por perguntar a mil mentirosos com que frequência eles mentem, e qual a probabilidade de que eles tenham sido sinceros nas respostas.";

Categoria c7= new Categoria();
    c7.categoria = "-Paz";
    c7.nome = "Gordon Pennycook, James Allan Cheyne, Nathaniel Barr, Derek Koehler e Jonathan Fugelsang";
    c7.ano = "2016";
    c7.justificativa = "por seu estudo acadêmico ''Sobre a Compreensão e Detecção de Idiotices Pseudo-Profundas''.";

Categoria c8= new Categoria();
    c8.categoria = "-Biologia";
    c8.nome = "Charles Foster e Thomas Thwaites";
    c8.ano = "2016";
    c8.justificativa = "Charles, por viver na natureza, em momentos diferentes, como um texugo, uma lontra, um veado, uma raposa e um pássaro; Thomas por projetar próteses para seus membros, que lhe permitiram deslocar-se pelas montanhas na companhia de cabras.";

Categoria c9= new Categoria();
    c9.categoria = "-Literatura";
    c9.nome = "Fredrik Sjöberg";
    c9.ano = "2016";
    c9.justificativa = "por sua obra autobiográfica em três volumes, relatando o prazer de colecionar moscas mortas, e moscas que ainda não haviam morrido.";

Categoria c10= new Categoria();
    c10.categoria = "-Percepção";
    c10.nome = "Atsuki Higashiyama e Kohei Adachi";
    c10.ano = "2016";
    c10.justificativa = "por investigar o quanto os objetos parecem diferentes, quando se curva para visualizá-los por entre as pernas.";

Categoria c11= new Categoria();
    c11.categoria = "-Química";
    c11.nome = "Callum Ormonde e Colin Raston";
    c11.ano = "2015";
    c11.justificativa = "por inventarem uma receita química que faz ''descozinhar'' parcialmente um ovo.";

Categoria c12= new Categoria();
    c12.categoria = "-Física";
    c12.nome = "Patricia Yang, David Hu, Jonathan Pham e Jerome Choo";
    c12.ano = "2015";
    c12.justificativa = "por testarem o princípio biológico de que quase todos os mamíferos esvaziam suas bexigas em cerca de 21 segundos (mais ou menos 13 segundos).";

Categoria c13= new Categoria();
    c13.categoria = "-Literatura";
    c13.nome = "Mark Dingemanse, Francisco Torreira e Nick J. Enfield";
    c13.ano = "2015";
    c13.justificativa = "por descobrirem que a palavra ''huh?'' (ou seu equivalente) parece existir em cada linguagem humana - e por não terem certeza do porque.";

Categoria c14= new Categoria();
    c14.categoria = "-Gestão";
    c14.nome = "Gennaro Bernile, Vineet Bhagwat e P. Raghavendra Rau";
    c14.ano = "2015";
    c14.justificativa = "por descobrirem que muitos líderes de negócios desenvolveram na infância uma predileção por assumir riscos, quando experimentaram desastres naturais como terremotos, erupções vulcânicas, tsunamis e incêndios florestais que, para eles, não tiveram qualquer consequência pessoal tão terrível.";

Categoria c15= new Categoria();
    c15.categoria = "-Economia";
    c15.nome = "Polícia Metropolitana de Bangkok, Tailândia";
    c15.ano = "2015";
    c15.justificativa = "por oferecer aos policiais um pagamento extra em dinheiro se estes se recusarem a aceitar subornos.";

Categoria c16= new Categoria();
    c16.categoria = "-Medicina";
    c16.nome = "Hajime Kimata, Jaroslava Durdiaková, Peter Celec, Natália Kamodyová, Tatiana Sedláčková, Gabriela Repiská, Barbara Sviežená e Gabriel Minárik";
    c16.ano = "2015";
    c16.justificativa = "por seus experimentos ao estudar os benefícios ou consequências biomédicas do beijo intenso e outras atividades interpessoais íntimas.";

Categoria c17= new Categoria();
    c17.categoria = "-Matemática";
    c17.nome = "Elisabeth Oberzaucher e Karl Grammer";
    c17.ano = "2015";
    c17.justificativa = "por tentarem usar técnicas matemáticas para determinar se e como Mulai Ismail, o Sanguinário, Imperador de Marrocos conseguiu, durante os anos de 1697 a 1727, ser pai de 888 filhos.";

Categoria c18= new Categoria();
    c18.categoria = "-Biologia";
    c18.nome = "Bruno Grossi, Omar Larach, Mauricio Canals, Rodrigo A. Vásquez e José Iriarte-Díaz";
    c18.ano = "2015";
    c18.justificativa = "por observarem que, quando se prende um bastão de peso calculado à extremidade traseira de um frango, este passa a caminhar de maneira semelhante à que os dinossauros supostamente caminhavam.";

Categoria c19= new Categoria();
    c19.categoria = "-Fisiologia e Entomologia";
    c19.nome = "Justin Schmidt";
    c19.ano = "2015";
    c19.justificativa = "por criar meticulosamente o ''Índice Schmidt de Dor em Ferroadas'', que classifica a dor relativa que as pessoas sentem quando picadas por variados insetos, e Michael L. Smith, por cuidadosamente organizar abelhas para picá-lo repetidamente em 25 locais diferentes do seu corpo, para saber quais locais são os menos dolorosos (crânio, extremidade do dedo médio e parte superior do braço) e quais são os mais dolorosos (narina, lábio superior e pênis).";

Categoria c20= new Categoria();
    c20.categoria = "-Física";
    c20.nome = "Kiyoshi Mabuchi, Kensei Tanaka, Daichi Uchijima e Rina Sakai";
    c20.ano = "2014";
    c20.justificativa = "por medir a quantidade de atrito entre um sapato e uma casca de banana, e entre a casca de banana e o chão, quando uma pessoa pisa em uma casca de banana no chão.";

IgNobel i1= new IgNobel();
    i1.nome = "Guardador De Categorias:";

i1.categoria.add(c1);
i1.categoria.add(c2);
i1.categoria.add(c3);
i1.categoria.add(c4);
i1.categoria.add(c5);
i1.categoria.add(c6);
i1.categoria.add(c7);
i1.categoria.add(c8);
i1.categoria.add(c9);
i1.categoria.add(c10);
i1.categoria.add(c11);
i1.categoria.add(c12);
i1.categoria.add(c13);
i1.categoria.add(c14);
i1.categoria.add(c15);
i1.categoria.add(c16);
i1.categoria.add(c17);
i1.categoria.add(c18);
i1.categoria.add(c19);
i1.categoria.add(c20);

System.out.println(i1.nome);
    i1.listarTodasAsCategorias();
    System.out.println("");



    System.out.println("Digite a categoria e o ano (ex. fisica 2016), ou o nome do ganhador (ex. ahmed shafik): ");
  Scanner sc = new Scanner(System.in); 
        String textoString = sc.nextLine();
        System.out.println(textoString);



        if(textoString.equals("reproduçao 2016") || textoString.equals("REPRODUÇAO 2016")){
            System.out.println(c1.categoria);
        c1.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("economia 2016") || textoString.equals("ECONOMIA 2016")){
            System.out.println(c2.categoria);
        c2.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("fisica 2016") || textoString.equals("FISICA 2016")){
            System.out.println(c3.categoria);
        c3.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("quimica 2016") || textoString.equals("QUIMICA 2016")){
            System.out.println(c4.categoria);
        c4.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("medicina 2016") || textoString.equals("MEDICINA 2016")){
            System.out.println(c5.categoria);
        c5.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("psicologia 2016") || textoString.equals("PSICOLOGIA 2016")){
            System.out.println(c6.categoria);
        c6.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("paz 2016") || textoString.equals("PAZ 2016")){
            System.out.println(c7.categoria);
        c7.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("biologia 2016") || textoString.equals("BIOLOGIA 2016")){
            System.out.println(c8.categoria);
        c8.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("literatura 2016") || textoString.equals("LITERATURA 2016")){
            System.out.println(c9.categoria);
        c9.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("percepçao 2016") || textoString.equals("PERCEPÇAO 2016")){
            System.out.println(c10.categoria);
        c10.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("quimica 2015") || textoString.equals("QUIMICA 2015")){
            System.out.println(c11.categoria);
        c11.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("fisica 2015") || textoString.equals("FISICA 2015")){
            System.out.println(c12.categoria);
        c12.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("literatura 2015") || textoString.equals("LITERATURA 2015")){
            System.out.println(c13.categoria);
        c13.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("gestao 2015") || textoString.equals("GESTAO 2015")){
            System.out.println(c14.categoria);
        c14.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("economia 2015") || textoString.equals("ECONOMIA 2015")){
            System.out.println(c15.categoria);
        c15.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("medicina 2015") || textoString.equals("MEDICINA 2015")){
            System.out.println(c16.categoria);
        c16.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("matematica 2015") || textoString.equals("MATEMATICA 2015")){
            System.out.println(c17.categoria);
        c17.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("biologia 2015") || textoString.equals("BIOLOGIA 2015")){
            System.out.println(c18.categoria);
        c18.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("fisiologia e entomologia 2015") || textoString.equals("FISIOLOGIA E ENTOMOLOGIA 2015")){
            System.out.println(c19.categoria);
        c19.listarOsNomesEAnos();
        System.out.println("");

        }

        if(textoString.equals("fisica 2014") || textoString.equals("FISICA 2014")){
            System.out.println(c20.categoria);
        c20.listarOsNomesEAnos();
        System.out.println("");

        }

        //pesquisa pelo nome do ganhador//

        if(textoString.equals("ahmed shafik")){
            System.out.println(c1.categoria);
        c1.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("mark avis") || textoString.equals("sarah forbes") || textoString.equals("shelagh ferguson")){
            System.out.println(c2.categoria);
        c2.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("gabor horvath") || textoString.equals("miklos blaho") || textoString.equals("gyorgy kriska") || textoString.equals("ramon hegedus") || textoString.equals("balazs gerics") || textoString.equals("robert farkas") || textoString.equals("susanne akesson") || textoString.equals("peter malik") || textoString.equals("hansruedi wildermuth")){
            System.out.println(c3.categoria);
        c3.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("volkswagen")){
            System.out.println(c4.categoria);
        c4.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("christoph helmchen") || textoString.equals("carina palzer") || textoString.equals("thomas munte") || textoString.equals("silke anders") || textoString.equals("andreas sprenger")){
            System.out.println(c5.categoria);
        c5.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("evelyne debey") || textoString.equals("maarten de schryver") || textoString.equals("gordon logan") || textoString.equals("kristina suchotzki") || textoString.equals("bruno verschuere")){
            System.out.println(c6.categoria);
        c6.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("gordon pennycook") || textoString.equals("james allan cheyne") || textoString.equals("nathaniel barr") || textoString.equals("derek koehler") || textoString.equals("jonathan fugelsang")){
            System.out.println(c7.categoria);
        c7.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("charles foster") || textoString.equals("thomas thwaites")){
            System.out.println(c8.categoria);
        c8.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("fredrik sjoberg")){
            System.out.println(c9.categoria);
        c9.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("atsuki higashiyama") || textoString.equals("kohei adachi")){
            System.out.println(c10.categoria);
        c10.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("callum ormonde") || textoString.equals("colin raston")){
            System.out.println(c11.categoria);
        c11.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("patricia yang") || textoString.equals("david hu") || textoString.equals("jonathan pham") || textoString.equals("jerome choo")){
            System.out.println(c12.categoria);
        c12.listarOsNomesEAnos();
        System.out.println("");
        }

        if(textoString.equals("mark dingemanse") || textoString.equals("francisco torreira") || textoString.equals("nick j. enfield")){
            System.out.println(c13.categoria);
        c13.listarOsNomesEAnos();
        System.out.println("");
        }



        else{
          System.out.println("voce errou (-_-)");
        }









    //fim da pesquisa//

}
}



//classe categoria
class Categoria{
String categoria;
String nome;
String ano;
String justificativa; 
String busca;

  public Categoria(){

  }

  public void listarOsNomesEAnos(){
      String nomeAtual = nome;
      String anoAtual = ano;
      System.out.println(nomeAtual + ", " + anoAtual);
      }
}

class Pessoa{

  public Pessoa(){

  }
}

//classe ignobel
class IgNobel{
String nome;
 ArrayList<Categoria> categoria;

  public IgNobel(){
    this.categoria = new ArrayList<Categoria>();
  }
public void listarTodasAsCategorias(){
    for(int i =0;i<this.categoria.size();i++){
      String categAtual = this.categoria.get(i).categoria;
      System.out.println(categAtual);
    }
  }


   }

In this Java code, they are created 20 variables for the class Categoria award-winning IgNobel, which contains the name of the category, the name of/of the winners, year and justification. Soon after this the user must seek the winner by the name and year of the category... The problem is that I need an easier way to implement a new category if I need to create another one without having to create another condition of "if this is written.. show this:

if(textoString.equals("biologia 2016") || textoString.equals("BIOLOGIA 2016")){
        System.out.println(c8.categoria);
    c8.listarOsNomesEAnos();
    System.out.println("");)

I know there is a parameter to simplify, and I need an example. Just how to implement more categories in a simple way. Thanks.

  • I don’t remember seeing so much code in one question. It should be summed up only to the problem at hand, which I doubt all of this code is relevant to the problem.

  • You don’t need that much code, use methods!

  • Please try to refactor this code, leaving only the essentials to your doubt, reading a giant code like that is tiring, and the problem is sometimes just a piece.

2 answers

1

You already use one for to list all categories, why not use another to check if the category is the one you want ?

That one for would look like this:

for (int i = 0; i < i1.categoria.size();++i){
    Categoria c = i1.categoria.get(i); //obter a categoria da lista

    //fazer teste de categoria e ano, ou nome
    if (textoString.equalsIgnoreCase(c.categoria+ " " + c.ano) ||
        textoString.equalsIgnoreCase(c.nome){

        //mostrar da forma que já estava a ser mostrado
        System.out.println(c.categoria);
        c.listarOsNomesEAnos();
        System.out.println("");
    }
}

It can also simplify the construction of categories by creating a Categoria receiving relevant data from each category:

public Categoria(String categoria, String nome, int ano, String justificativa){
    this.categoria = categoria;
    this.nome = nome;
    this.ano = ano;
    this.justificativa = justificativa;
}

Notice how I put int ano, for the ano should be of the whole type once it holds a number. This simplifies because creation can now look like this:

//o antigo C1
i1.categoria.add(new Categoria("-Reprodução","Ahmed Shafik",2016,
"por pesquisar os efeitos do uso de calças de poliéster, algodão e lã na vida sexual dos ratos e depois repetir a experiência em homens.");

//o antigo C2
i1.categoria.add(new Categoria("-Economia","Mark Avis, Sarah Forbes e Shelagh Ferguson",2016,
"por descobrirem as personalidades das rochas, de uma perspectiva de vendas e marketing.");

//etc...

For the information you have I suggest using even a file to store all the information there and load the questions from the file, which makes the code cleaner, and the categories easy to maintain and even to be added by third parties.

0

As already mentioned, there is a lot of code there that is not necessary. Much of this is due to the misuse of object-oriented programming. I’ve changed a few things to make your program clearer:

// Se categoria é um atributo não faz muito sentido ser o nome da classe
public class PremioNobel {

    // Por questões de segurança é importante que não haja
    // acesso direto aos atributos da classe. Isso se chama encapsulamento
    private String categoria;
    private String nome;
    private String ano;
    private String justificativa; 

    public PremioNobel (String categoria, String nome, String ano, String justificativa) {
        this.categoria = categoria;
        this.nome = nome;
        this.ano = ano;
        this.justificativa = justificativa;
    }

    // Como os atributos agora são privados eles devem ter Getters e Setters
    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getNome() {
        return nome;
    }

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

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
       this.ano = ano;
    }

    public String getJustificativa() {
        return justificativa;
    }

    public void setJustificativa(String justificativa) {
        this.justificativa = justificativa;
    }    
}

Now the main class, using Java8 streams:

To create a new Premionobel object using the constructor looks like this (or you can use an empty constructor and add the data via the set methods:

// Criando categoria com contrutores
PremioNobel p1 = new PremioNobel("-Reprodução", "Ahmed Shafik", "2016", "por pesquisar os efeitos do uso de calças de poliéster, algodão e lã na vida sexual dos ratos e depois repetir a experiência em homens.");
PremioNobel p2 = new PremioNobel("-Economia", "Mark Avis, Sarah Forbes e Shelagh Ferguson", "2016", "por descobrirem as personalidades das rochas, de uma perspectiva de vendas e marketing.");

To add all Premionobel objects at once you can do so (No igNobel class required):

// Criando uma lista de prêmios       
List<PremioNobel> lista = new ArrayList<>();
lista.addAll(Arrays.asList(p1,p2, ...));

Having methods in your class makes browsing easier, see how to list all categories:

// Listar todas as categorias usando Streams
System.out.println("Todas as categorias: ");
lista.stream().forEach(premio -> System.out.println(premio.getCategoria()));

// Listar todas as categorias usando ForEach
for(PremioNobel p: lista){
    System.out.println(p.getCategoria()));
}   

The code above says that for each PremioNobel in lista prints the category of the.

To do a search by author we have two ways:

List<PremioNobel> premios = lista.stream()
                .filter(autor -> autor.getNome().equals("Ahmed Shafik"))
                .collect(Collectors.toList());
// Crio uma stream() na lista
// .filter(condicao) : Filtra os Premios cujo o autor é igual a algo
// .collect retorna uma nova lista com os dados

for(PremioNobel p: lista){
    if(p.getNome().equals("Ahmed Shafik"){
        System.out.println("Imprime os dados do premio");
    }
}

With this you can adapt to make your searches. To create a new object at any time just instantiate (new Premionobel(...)) and add to your list using the method add() see the pseudocode below:

while(condicao){
    PremioNobel p = new PremioNobel("categoria","ano","pesquisador","justificativa");
    lista.add(p);
    System.out.println("Deseja adicionar mais Premios?");
    // Algum código
}

But if there are too many objects (something tiresome to do by hand) try reading the data from a file and creating the list of Premionobel objects from it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.