как заменить более 16, если оператор if-if Java - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать программу, которая позволяет клиенту вводить строку. Длина строки должна содержать только 3 символа и содержать буквы.

Моя программа должна пройти через эту таблицу и проверить, к чему относится эта строка.

Допустим, клиент передал эту строку «AUG», моя программа должна показать имя этой строки, которая "Met".

Я сделал код, и он работал, но у него более 15 условий, если еще - если.

Мой вопрос : есть ли Другой способ сделать это без использования if else-if (или switch). И работает ли полиморфизм в этом случае?

Ответы [ 3 ]

2 голосов
/ 11 февраля 2020

Взгляните на HashMap

. Вы можете создать свою таблицу с помощью:

Map<String, String> table = new HashMap<>();
table.put("AUG", "Met");
table.put(...);

Затем получить доступ к своей таблице, используя ввод пользователя:

if(table.containsKey(input)){
    return table.get(input);
}
0 голосов
/ 11 февраля 2020

Вы можете попробовать объектно-ориентированный подход:

//This is your representation of Codon
//Which has a name e.g. Alanine and an Abreviation object.
public class Codon {

        private String name;

        private Abreviation abreviation;

        public Codon(String name, Abreviation abreviation) {

            this.name = name;
            this.abreviation = abreviation;
            this.abreviation.addCodon(this);

        }

        @Override
        public String toString() {
            return "Codon [name=" + name + ", abreviation=" + abreviation + "]";
        }


    }

import java.util.ArrayList;
import java.util.List;
// This is a representation of an abreviation object
// Which has an abreviation: ALA;
// and the name of the abreviation "Alanine".
public class Abreviation {

    private String abreviation;
    private String name;
    private List<Codon> codons = new ArrayList<>();

    public Abreviation(String abreviation, String name) {
        super();
        this.abreviation = abreviation;
        this.name = name;

    }

    public boolean addCodon(Codon codon) {
        return this.codons.add(codon);
    }

    @Override
    public String toString() {
        return "Abreviation [abreviation=" + abreviation + ", name=" + name + "]";
    }

}


// Here is your program, where it's being build all the Codons structure with your respective Abbreviation.
public class App {

    public static void main(String[] args) {
        // This is abreviation, it'll will associated with the codon 
        Abreviation alanine = new Abreviation("Ala", "Alanine");
        // Here it's being build the codon CGU, which has abreviation alanine
        Codon GCU = new Codon("GCU", alanine);
        // Then using toString method it prints what have been done 
        System.out.println(GCU);

    }

}

Вы можете поместить все свои кодоны в список, чтобы затем искать и получать.

0 голосов
/ 11 февраля 2020

Я думаю, что я бы go об этом лично enum (при условии, что производительность не имела большого значения):

public enum Abbreviations {
    Ala("GCU", "GCC", "GCA", "GCG"),
    Arg("CGU", "CGC", "CGA", "CGG", "AGA", "AGG")
    // ...
    ;

    private final List<String> codons;

    private Abbreviations(final String... codons) {
        this.codons = Arrays.asList(codons);
    }


    public boolean contains(final String codon) {
        return this.codons.contains(codon);
    }
}

И тогда вы можете найти их соответствие в String используя что-то вроде:

public String find(final String codon) {
    for (final Abbreviations abb : Abbreviations.values()) {
        if (abb.contains(codon)) {
            return abb.name();
        }
    }

    throw new IllegalArgumentException("Unknown codon: '" + codon + "'");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...