Поиск по ключевым словам в параллельных массивах

1

Привет, я пытаюсь написать код для поиска по ключевым словам parralele массивы У меня есть 2 массива

    String[] beerNames = new String[10]; //define berrNames array
    Double[] beerStrengths = new Double[10]; //define beerStrengths array        

    beerNames[0] = "Heineken"; //fill the arrays
    beerNames[1] = "Bud Light";
    beerNames[2] = "Coors Light";
    beerNames[3] = "Leffe Blonde";
    beerNames[4] = "Budweiser";
    beerNames[5] = "Erdinger Non-Alcoholic";
    beerNames[6] = "Bud Premier Select";
    beerNames[7] = "Corona";
    beerNames[8] = "Barefoot Bohemian";
    beerNames[9] = "3 Monts";

    beerStrengths[0] = 4.0;
    beerStrengths[1] = 4.2;
    beerStrengths[2] = 4.3;
    beerStrengths[3] = 6.6;
    beerStrengths[4] = 5.0;
    beerStrengths[5] = 0.0;
    beerStrengths[6] = 7.4;
    beerStrengths[7] = 4.6;
    beerStrengths[8] = 4.0;
    beerStrengths[9] = 8.5; //fill the arrays

Я хочу, чтобы иметь возможность искать по ключевому слову, поэтому, если я вхожу в бутон, я верну результат

Содержание алкоголя в "Bud Light" составляет 4,2%. Содержание алкоголя в "Budweiser" составляет 5,0%

К сожалению, я понятия не имею, как это сделать. Я искал какой-то код, который у меня есть, от поиска файла. Сканер console = new Scanner (System.in); System.out.print("Поисковая фраза:"); Строковый поиск = console.nextLine(). ToLowerCase();

    Scanner input = new Scanner(new File("imdb.txt"));
    // 1 9.1 243153 The Godfather (1972)

    while (input.hasNextLine()) {
        String line = input.nextLine();
        if (line.toLowerCase().contains(search)) {
            //System.out.println(line);
            displayMovieInfo(line);
        }
    }
}

public static void displayMovieInfo(String line) {
    Scanner lineScan = new Scanner(line);
    int rank = lineScan.nextInt();
    double rating = lineScan.nextDouble();
    lineScan.nextInt();

    String title = "";
    while (lineScan.hasNext()) {
        title = title + lineScan.next() + " ";
    }
    System.out.println(rank + "\t" + rating + "\t" + title);
}

Но я не могу понять, как преобразовать этот код, любая помощь будет оценена

Теги:

3 ответа

0

Вместо двух массивов просто используйте HashMap. Используйте String в качестве ключа и Double в качестве значения. Таким образом, вы можете перебирать ключи и возвращать значение. Вы резко сократите свой код и будете использовать только одну структуру данных.

  • 0
    Наши два ответа вместе, я думаю, являются реальным ответом. Ключ названия пива, значение BeerStrength .
  • 0
    Согласен, думаю, это было бы отлично.
Показать ещё 2 комментария
0

Первое, что я хотел бы сделать, это изменить ваш подход. Если вы обнаружите, что работаете с несколькими массивами, обычно вы можете использовать другой подход. Например, вы можете создать класс Beer с name и volume качестве значений.

public class Beer
{
    private String name;
    private double volume;

    public Beer(String name, double volume)
    {
        this.name = name;
        this.volume = volume;
    }

    public boolean equals(Object o) {
        if(o instanceof Beer) {
           Beer beer = (Beer)o;

           if(this.name.equals(beer.getName())) {
               return true;
           }
        }

        return false;
    }

    public String getName() {return this.name; }
    public double getVolume() {return this.volume; }
}

Затем вы можете создать кучу объектов Beer, поместив их в List.

private List<Beer> beers;

И когда вы населяете, вы делаете что-то вроде..

beers = new ArrayList<Beer>();

beers.add(new Beer("Budweiser", 5));
// Etc..

Теперь вы можете вносить свой вклад и разрабатывать, как искать :)

0

Если вам известен индекс массива для первого массива, вы знаете его для второго. Это также похоже на кандидата на создание объекта с двумя атрибутами:

public class BeerStrength  {
   private final String name;
   private final int strengthNum;
   public BeerStrength(String name, int strength_num)  {
      this.name = name;
      strengthNum = strength_num;
   }
   public String getName()  {
      return  name;
   }
   public int getStrength()  {
      return  strengthNum;
   }
}

Тогда у вас есть массив BeerStrength, что позволит сделать вашу проблему параллельного массива спорно.

  • 0
    @ Крис: если этот ответ помог вам, рассмотрите возможность повторного голосования и примите его в качестве ответа, нажав на большую зеленую галочку. Желаем удачи и добро пожаловать в stackoverflow!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню