将2d数组中的字符串元素与int类型进行比较



我在导航2d数组时遇到了麻烦。假设我使用的是这个字符串数组

String[][] guestList = {{"Adam Ason", "35"},
{"Berta Bson", "70"},
{"Ceasar Cson", "12"}};

,我想把每个客人的年龄和18岁进行比较,确定他们是不是成年人,然后打印出来,我该怎么做呢?到目前为止,我已经试过了:

int tempAge;
int adultGuests = 0;
int childGuests = 0;
for (int i = 0; i < guestList.length; i++)
{
for (int j = 0; j < guestList.length; j++)
{
tempAge = Integer.parseInt(String.valueOf(guestList[j]));
if (tempAge <= 18)
{
childGuests += 1;
}
else
{
adultGuests += 1;
}
}
}
System.out.println("Adult guests: " + adultGuests);
System.out.println("Children guests: " + childGuests);

Intellij告诉我在String中包装((guestList[j]))。valueOf但不管我是否这样做,我得到以下结果:

Exception in thread "main" java.lang.NumberFormatException: For input string: "[Ljava.lang.String;@5d22bbb7"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at test2.main(test2.java:20)

不需要内循环。你有一个固定的结构,其中年龄总是在索引1的内部数组。

所以你需要遍历外部数组,并在索引1处对每个内部数组的元素求和。

public static void main(String[] args) {
String[][] guestList = {{"Adam Ason", "35"},
{"Berta Bson", "70"},
{"Ceasar Cson", "12"}};
int adultGuests = 0;
int childGuests = 0;
for (int i = 0; i < guestList.length; i++)
{
if (Integer.valueOf(guestList[i][1]) <= 18){
childGuests += 1;
}
else {
adultGuests += 1;
}
}

您有一个二维数组,即数组的数组,每个内部数组代表一个来宾。您不需要嵌套循环来计算成人和非成人的计数,但检查每个内部数组的第二个元素的整数值(在索引1处):

int tempAge;
int adultGuests = 0;
int childGuests = 0;
for (int i = 0; i < guestList.length; i++)
{
tempAge = Integer.parseInt(String.valueOf(guestList[i][1]));
if (tempAge <= 18)
{
childGuests += 1;
}
else
{
adultGuests += 1;
}
}
System.out.println("Adult guests: " + adultGuests);
System.out.println("Children guests: " + childGuests);
String[][] guestList = {{"Adam Ason", "35"},
{"Berta Bson", "70"},
{"Ceasar Cson", "12"}};

这是你的数据。如果执行:

guestList[0];

返回的数据

{"Adam Ason", "35"}

而你要将这样的数据转换为整型,这是不可能的。

这是你当前的代码,有一个重要的注释。

int tempAge;
int adultGuests = 0;
int childGuests = 0;
for (int i = 0; i < guestList.length; i++) {
for (int j = 0; j < guestList.length; j++)  { // there is no need for this inner loop.
tempAge = Integer.parseInt(String.valueOf(guestList[j]));
if (tempAge <= 18) {
childGuests += 1;
} else {
adultGuests += 1;
}
}
}
System.out.println("Adult guests: " + adultGuests);
System.out.println("Children guests: " + childGuests);

像这样简化代码,并为2D数组使用适当的索引,应该可以达到目的

int tempAge;
int adultGuests = 0;
int childGuests = 0;
for (int i = 0; i < guestList.length; i++) {
tempAge = Integer.parseInt(String.valueOf(guestList[i][1])); // the age is always at index 1
if (tempAge <= 18) { childGuests += 1; }
else { adultGuests += 1; }

}
System.out.println("Adult guests: " + adultGuests);
System.out.println("Children guests: " + childGuests);