Я пытаюсь создать метод, который ищет двумерный массив, содержащий имена людей. Например, вы вводите определенную букву, и она должна передать все имена, соответствующие ей, в 1d массив и распечатать его. Затем пользователь выбирает имя из списка совпадений и печатает информацию об имени, такую как возраст, пол, DOB. Сначала я создал небольшую матрицу для тестирования, и она работала нормально, но после того, как я добавил больше имен и информации, она перестала работать. Теперь он просто печатает информацию для имени в матрице.
Пример того, как он должен работать (когда у меня была маленькая тестовая матрица):
Note: search is case sensitive.
Search: L
[null, Lee, null]
Enter the name of your match: Lee
Name: Lee
Sex: M
DOB: 4/4/1993
Height: 5’5”
Search again?
1 to search, 0 to exit
Как это работает сейчас:
Note: search is case sensitive.
Search: J
[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
Enter the name of your match:
Name: Adam
Sex: M
DOB: (blank)
Height: 5’5”
Search again?
1 to search, 0 to exit
Обратите внимание, что информация Адама распечатана, хотя я еще не ввел информацию о матче. Плюс, массив 1D не находит совпадений, хотя есть несколько имен, начинающихся с A. Также предполагается, что картинка с текстом отображается, игнорируйте этот код. Вот мой код:
public static void main(String[] args)
{
String[][] matrix =
{
//has much more data, but it looks like this:
{"Adam","M", "", "5’5”"},
{"Adonis", "M", "", "5’0”"},
{"Aeruna", "F", "", "5’4”"},
{"Aja", "F", "", "5’2”"}}
};
int i = -1;
while (i != 0) // sentinel value
{
Scanner input = new Scanner(System.in);
System.out.println("Note: search is case sensitive.");
System.out.print("Search: ");
String search = input.next();
retrieveByName(search, matrix);
System.out.print("Enter the name of your match: ");
String name = input.nextLine();
int k = positionFinder(name, matrix);
printInfo(k, matrix);
System.out.println("\nSearch again?\n1 to search, 0 to exit");
i = input.nextInt();
if (i == 0)
System.exit(0);
}
}
public static int positionFinder(String name, String[][] matrix)
{
int pos = 0;
for (int idx = 0; idx < matrix.length; idx++)
{
if (name.equals(matrix[idx][0]))
pos = idx;
}
return pos;
}
public static void retrieveByName(String str, String[][] matrix)
{
String[] matches = new String[matrix.length];
for (int k = 0; k < matrix[0].length - 1; k++)
{
if ((matrix[k][0]).contains(str))
{
matches[k] = matrix[k][0];
}
}
System.out.println(Arrays.toString(matches));
}
public static void printInfo(int k, String matrix[][])
{
String[] images = {"Untitled_Artwork 9.png", "Untitled_Artwork 9.png"};
JFrame frame = new JFrame();
ImageIcon icon = new ImageIcon((images[k]));
JLabel label = new JLabel(icon);
int width = icon.getIconWidth();
int height = icon.getIconHeight();
icon =
new ImageIcon(icon.getImage().getScaledInstance(width / 2, height / 2,
Image.SCALE_DEFAULT));
label = new JLabel(icon);
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
System.out.print("\n");
System.out.println("Name: " + matrix[k][0]);
System.out.println("Sex: " + matrix[k][1]);
System.out.println("DOB: " + matrix[k][2]);
System.out.println("Height: " + matrix[k][3]);
}
}