You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据结构作业求助:二维数组遍历、冒泡排序及答案验证问题

美国州首府程序问题解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:21:00