数据结构作业求助:二维数组遍历、冒泡排序及答案验证问题
美国州首府程序问题解决方案
1. 遍历二维数组的for循环
假设你的二维数组结构为[州名, 首府]的双元素子数组集合,以下是两种通用遍历方式:
嵌套普通for循环
// 示例初始化数组 String[][] states = {{"Alabama", "Montgomery"}, {"Alaska", "Juneau"}, ...}; // 遍历每一行 for (int i = 0; i < states.length; i++) { // 遍历当前行的每个元素(州名、首府) for (int j = 0; j < states[i].length; j++) { System.out.print(states[i][j] + " "); } System.out.println(); }
增强for循环(更简洁)
for (String[] statePair : states) { String stateName = statePair[0]; String capital = statePair[1]; System.out.println("州名:" + stateName + ",首府:" + capital); }
2. 按首府排序的二维数组冒泡排序
冒泡排序核心是比较相邻元素、不符合顺序则交换,这里以首府的字典序为排序依据,直接交换整个子数组即可:
int n = states.length; // 外层循环控制排序轮数 for (int i = 0; i < n - 1; i++) { // 内层循环比较相邻元素的首府 for (int j = 0; j < n - i - 1; j++) { // 转小写后比较,避免大小写干扰排序结果 if (states[j][1].toLowerCase().compareTo(states[j+1][1].toLowerCase()) > 0) { // 交换整个子数组 String[] temp = states[j]; states[j] = states[j+1]; states[j+1] = temp; } } }
3. 不区分大小写验证答案正确性
不要尝试将字符串转为布尔值,正确做法是统一用户输入和正确答案的大小写后再比较:
Java实现
import java.util.Scanner; Scanner scanner = new Scanner(System.in); int correctCount = 0; for (String[] statePair : states) { String stateName = statePair[0]; String correctCapital = statePair[1]; System.out.print("请输入" + stateName + "的首府:"); String userInput = scanner.nextLine().trim(); // 去除输入首尾空格 // 不区分大小写比较 if (userInput.equalsIgnoreCase(correctCapital)) { System.out.println("回答正确!"); correctCount++; } else { System.out.println("回答错误,正确答案是:" + correctCapital); } } System.out.println("你总共答对了" + correctCount + "题");
C语言实现(如果用C完成作业)
#include <stdio.h> #include <strings.h> #include <string.h> int main() { char states[50][2][50] = {{"Alabama", "Montgomery"}, {"Alaska", "Juneau"}, ...}; char userInput[50]; int correctCount = 0; for (int i = 0; i < 50; i++) { printf("请输入%s的首府:", states[i][0]); fgets(userInput, 50, stdin); // 去除fgets自带的换行符 userInput[strcspn(userInput, "\n")] = '\0'; // 用strcasecmp实现不区分大小写比较 if (strcasecmp(userInput, states[i][1]) == 0) { printf("回答正确!\n"); correctCount++; } else { printf("回答错误,正确答案是:%s\n", states[i][1]); } } printf("你总共答对了%d题\n", correctCount); return 0; }
内容的提问来源于stack exchange,提问作者SasuKev
相关产品推荐
相关产品推荐

