Привет, я пытаюсь написать код для поиска по ключевым словам 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);
}
Но я не могу понять, как преобразовать этот код, любая помощь будет оценена
Вместо двух массивов просто используйте HashMap. Используйте String в качестве ключа и Double в качестве значения. Таким образом, вы можете перебирать ключи и возвращать значение. Вы резко сократите свой код и будете использовать только одну структуру данных.
Первое, что я хотел бы сделать, это изменить ваш подход. Если вы обнаружите, что работаете с несколькими массивами, обычно вы можете использовать другой подход. Например, вы можете создать класс 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..
Теперь вы можете вносить свой вклад и разрабатывать, как искать :)
Если вам известен индекс массива для первого массива, вы знаете его для второго. Это также похоже на кандидата на создание объекта с двумя атрибутами:
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
, что позволит сделать вашу проблему параллельного массива спорно.
BeerStrength
.