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

-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, 20 variables are created for the Categoria class of a IgNobel prize, which contains the name of the category, name of the winners, year and justification. Soon after this the user should look for 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 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.

    
asked by anonymous 12.09.2017 / 00:25

2 answers

1

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

This 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("");
    }
}

You can also simplify category building by creating a Categoria constructor that receives the relevant data for 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 , because ano must be integer type since it saves a number. This simplifies because the 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 I have I already suggest using a file to save all the information and upload the questions in the file, which leaves the code cleaner, and the categories easy to maintain and even added by third parties.

    
12.09.2017 / 00:55
0

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

// 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 PrizeNobel object using the constructor looks like this (Or you can use an empty constructor and add the data through 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 the PrizeNobel objects at once you can do this (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 print the category of the same.

To 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 do your searches. To create a new object at any time, just instantiate (new PremioNobel (...)) and add to your list using the add() method, 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 to read the data from a file and create the list of PrizeNobel objects from it.

    
12.09.2017 / 01:42