Java二维数组年龄解析问题求助:统计18岁以上宾客数量
解决Java中统计18岁以上宾客人数的问题
原代码的问题分析
- 嵌套循环逻辑错误:你的
guestList是每个元素包含「姓名、年龄」的二维数组,外层循环已经能遍历所有宾客,不需要内层循环。原内层循环会重复遍历整个宾客列表,而且guestList[j]是一个一维数组,直接和整数18比较完全不合法,会编译报错。 - 未将年龄字符串转为整数:年龄存在数组的第二个位置(索引1),是String类型,必须用
Integer.parseInt()方法转成int类型才能和18做数值比较。 - 存在未使用的冗余变量:
counter2、alder这些变量没有实际作用,可以删除。
修正后的代码
public static void statistics() { int counter1 = 0; String[][] guestList = { {"Adam Ason", "35"}, {"Berta Bson", "70"}, {"Ceasar Cson", "12"}, {"Derta Dson", "20"}, {"Erta Eson", "54"}, {"Ferta Fson", "26"}, {"Gerta Gson", "59"}, {"Herta Hson", "72"}, {"Irta Ison", "14"}, {"Jerta Json", "32"} }; int totalGuests = guestList.length; System.out.println("Number of guests: " + totalGuests); // 遍历每个宾客 for (int i = 0; i < guestList.length; i++) { // 取出当前宾客的年龄字符串,转成整数 int age = Integer.parseInt(guestList[i][1]); // 判断年龄是否大于等于18 if (age >= 18) { counter1++; } } System.out.println("Number of guests over the age of 18: " + counter1); }
关键步骤说明
- 字符串转整数:用
Integer.parseInt(guestList[i][1])把每个宾客的年龄字符串转为int类型,这是实现数值比较的核心操作。 - 简化循环:只保留外层循环遍历所有宾客,每次取当前宾客数组的第二个元素(索引1)作为年龄。
- 计数优化:用
counter1++替代counter1 = counter1 + 1,写法更简洁。
如果担心年龄字符串可能不是合法数字(比如出现非数字字符),可以加上异常处理避免程序崩溃:
try { int age = Integer.parseInt(guestList[i][1]); if (age >= 18) { counter1++; } } catch (NumberFormatException e) { System.out.println("宾客" + guestList[i][0] + "的年龄格式错误"); }
内容的提问来源于stack exchange,提问作者albin_666
相关产品推荐
相关产品推荐

