按给定索引获取数据
Get Data by Given Index
在编写员工管理程序时,我需要一种方法将相应的数据吐出到特定索引(用户给定的数字)。
已经尝试了很多方法来实现这一点,例如下面的一种,但没有成功:
public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
Scanner sc = new Scanner(System.in);
System.out.println("Please insert the number of the registered employees: ");
index = sc.nextInt();
for (int i = 0; i < nN.length; i++) {
if (nN[i].equals(index)) {
System.out.println(nN[index]);
System.out.println(vN[index]);
System.out.println(adres[index]);
}
}
}
不清楚这里是否存在不止一个问题,因为你没有说明实际问题是什么,只是它不起作用。
还有,你这里的数据有点奇怪。这将更适合作为 class
来封装所有数据而不是三个字符串数组。
不过,我怀疑这是你问题的一部分:nN[i].equals(index)
nN
是String
的数组,index
是int
的数组。它们永远不会相等。它们不是相同的数据类型。
要正确比较字符串和整数,您需要将 String
转换为 int
或将 int
转换为 String
。将 int
转换为字符串是更安全的选择,因此您可以这样做:
nN[i].equals(String.valueOf(index))
相反,将 String
转换为 int
,您可以使用 Integer.parseInt(String)
Integer.parseInt(nN[i]) == index
再补充一点:
public static void ausgabeIndex(int index
您正在传递 index
但立即用您的 Scanner.nextInt
覆盖它。您不需要它作为方法参数。
您需要在代码中解决以下问题:
- 每当您尝试访问数组中的元素时,请确保检查边界以避免
ArrayIndexOutOfBoundsException
例如您访问了 vN[index]
而没有检查 index
是否小于 vN.length
。 adres[index]
也有同样的问题
nN[i]
是 String
,而 i
是 int
,因此除非您将一个变成另一个,否则无法比较它们。但是,我确定您并不是要将 nN[i]
与 index
进行比较。查看您的程序,您似乎想将 nN[i]
与 nN[index]
进行比较。
- 因为您已经将
index
作为参数传递给该方法,除非您想覆盖 index
的值,否则以下几行没有意义。如果您不想覆盖参数 index
的值,请删除这些行。
Scanner sc = new Scanner(System.in);
System.out.println("Geben Sie bitte die Nummer des/der regestrierten Mitarbeiters/Mitarbeiterin ein: ");
index = sc.nextInt();
或者,如果您想在方法中保留这些行,请删除参数 index
。正如我上面提到的,仅当您想覆盖参数 index
.
的值时,保留这两个才有意义
下面给出了包含这些注释的代码:
public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
if(index < nN.length) {
for (int i = 0; i < nN.length; i++) {
if (nN[i].equals(nN[index])) {
System.out.println(nN[index]);
if (index < vN.length) {
System.out.println(vN[index]);
}
if (index < adres.length) {
System.out.println(adres[index]);
}
}
}
} else {
System.out.printnl("The index, " + index + " is out of the bounds.");
}
}
在编写员工管理程序时,我需要一种方法将相应的数据吐出到特定索引(用户给定的数字)。 已经尝试了很多方法来实现这一点,例如下面的一种,但没有成功:
public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
Scanner sc = new Scanner(System.in);
System.out.println("Please insert the number of the registered employees: ");
index = sc.nextInt();
for (int i = 0; i < nN.length; i++) {
if (nN[i].equals(index)) {
System.out.println(nN[index]);
System.out.println(vN[index]);
System.out.println(adres[index]);
}
}
}
不清楚这里是否存在不止一个问题,因为你没有说明实际问题是什么,只是它不起作用。
还有,你这里的数据有点奇怪。这将更适合作为 class
来封装所有数据而不是三个字符串数组。
不过,我怀疑这是你问题的一部分:nN[i].equals(index)
nN
是String
的数组,index
是int
的数组。它们永远不会相等。它们不是相同的数据类型。
要正确比较字符串和整数,您需要将 String
转换为 int
或将 int
转换为 String
。将 int
转换为字符串是更安全的选择,因此您可以这样做:
nN[i].equals(String.valueOf(index))
相反,将 String
转换为 int
,您可以使用 Integer.parseInt(String)
Integer.parseInt(nN[i]) == index
再补充一点:
public static void ausgabeIndex(int index
您正在传递 index
但立即用您的 Scanner.nextInt
覆盖它。您不需要它作为方法参数。
您需要在代码中解决以下问题:
- 每当您尝试访问数组中的元素时,请确保检查边界以避免
ArrayIndexOutOfBoundsException
例如您访问了vN[index]
而没有检查index
是否小于vN.length
。adres[index]
也有同样的问题 nN[i]
是String
,而i
是int
,因此除非您将一个变成另一个,否则无法比较它们。但是,我确定您并不是要将nN[i]
与index
进行比较。查看您的程序,您似乎想将nN[i]
与nN[index]
进行比较。- 因为您已经将
index
作为参数传递给该方法,除非您想覆盖index
的值,否则以下几行没有意义。如果您不想覆盖参数index
的值,请删除这些行。
Scanner sc = new Scanner(System.in);
System.out.println("Geben Sie bitte die Nummer des/der regestrierten Mitarbeiters/Mitarbeiterin ein: ");
index = sc.nextInt();
或者,如果您想在方法中保留这些行,请删除参数 index
。正如我上面提到的,仅当您想覆盖参数 index
.
下面给出了包含这些注释的代码:
public static void ausgabeIndex(int index, String[] nN, String[] vN, String[] adres) {
if(index < nN.length) {
for (int i = 0; i < nN.length; i++) {
if (nN[i].equals(nN[index])) {
System.out.println(nN[index]);
if (index < vN.length) {
System.out.println(vN[index]);
}
if (index < adres.length) {
System.out.println(adres[index]);
}
}
}
} else {
System.out.printnl("The index, " + index + " is out of the bounds.");
}
}