冒泡排序swap方法实现及投票系统候选人排序同步问题求助
解决投票系统中票数与候选人姓名同步排序的问题
首先修正你代码里的变量名不一致问题(定义了NumArray却使用voteNumArray),然后通过以下步骤实现票数和姓名的同步排序:
- 添加候选人姓名数组:与票数数组索引一一对应,0到4分别对应Ahmed到Elaine。
- 修改排序方法:让排序方法同时接收票数数组和姓名数组,冒泡排序交换票数时,同步交换姓名数组的对应元素。
- 修改展示方法:接收排序后的两个数组,按
姓名 - 票数的格式输出。
完整修改后的代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] voteNumArray = new int[5]; String[] candidates = {"Ahmed", "Boo", "Celine", "Didi", "Elaine"}; final int EXIT_CODE = -1; displayInitialText(); int userInput = input.nextInt(); while (userInput != EXIT_CODE) { if (userInput >= 0 && userInput <= 4) { voteNumArray[userInput]++; } else { System.out.println("\n-----------------------"); System.out.println("Invalid Vote - Please enter a number between 0-4"); System.out.println("-----------------------\n"); } userInput = input.nextInt(); } sort(voteNumArray, candidates); displaySortedItems(voteNumArray, candidates); } // 同步排序票数和姓名数组(降序) private static void sort(int[] votes, String[] names) { int n = votes.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { // 降序排序,当前票数小于下一个则交换 if (votes[j] < votes[j + 1]) { // 交换票数 int tempVote = votes[j]; votes[j] = votes[j + 1]; votes[j + 1] = tempVote; // 同步交换姓名 String tempName = names[j]; names[j] = names[j + 1]; names[j + 1] = tempName; } } } } // 按要求格式输出排序结果 private static void displaySortedItems(int[] votes, String[] names) { System.out.println("\n投票结果(降序):"); StringBuilder result = new StringBuilder(); for (int i = 0; i < votes.length; i++) { if (votes[i] > 0) { result.append(String.format("%s - %d", names[i], votes[i])); if (i != votes.length - 1 && votes[i+1] > 0) { result.append(", "); } } } System.out.println(result); } // 补充初始化提示文本方法 private static void displayInitialText() { System.out.println("请输入数字投票:"); System.out.println("0 - Ahmed"); System.out.println("1 - Boo"); System.out.println("2 - Celine"); System.out.println("3 - Didi"); System.out.println("4 - Elaine"); System.out.println("输入-1结束投票"); } }
关键说明:
- 冒泡排序过程中,每次交换票数数组的元素时,必须同步交换姓名数组对应位置的元素,确保票数与候选人始终一一对应。
- 展示逻辑中过滤了票数为0的候选人,避免输出无效结果,可根据需求调整。
- 修正了原代码中变量名不一致的问题,保证代码可正常编译运行。
内容的提问来源于stack exchange,提问作者user20758216
相关产品推荐
相关产品推荐

