Java元音计数排序程序如何为排序后的数组输出绑定对应字符标签
问题核心原因
你现在的代码只存储了5个元音的计数值,没有把计数值和对应的a/e/i/o/u字母绑定,排序时也只交换了计数值,排序完成后自然无法对应到每个计数属于哪个元音。另外你现有排序逻辑还有一处错误:比较的是j和k下标位置的计数,交换时却写死了j和j+1位置,会导致排序结果异常。
新手友好修改方案
新增一个字符数组存储元音字母,排序计数的时候同步交换对应位置的元音字母,保证排序后计数和字母的对应关系不变即可,修改后的完整代码如下:
// 新增存储元音字母的数组,和计数数组下标一一对应 char[] vowels = {'a', 'e', 'i', 'o', 'u'}; int[] vowelcounter = {a, e, i, o, u}; // 这里保留你原来的计数赋值逻辑 boolean hasswapped = true; while(hasswapped) { hasswapped = false; for(int j = 0; j<vowelcounter.length; j++) { for(int k = j+1; k<vowelcounter.length; k++) { if(vowelcounter[j] > vowelcounter[k]) { // 交换计数的同时,同步交换对应位置的元音字母 int tempCount = vowelcounter[j]; vowelcounter[j] = vowelcounter[k]; vowelcounter[k] = tempCount; char tempVowel = vowels[j]; vowels[j] = vowels[k]; vowels[k] = tempVowel; hasswapped = true; } } } } // 输出时同时打印元音和对应计数 for(int j=0; j<vowelcounter.length; j++) { System.out.println(vowels[j] + " : " + vowelcounter[j]); }
改动说明
- 新增
vowels字符数组,初始顺序和你计数数组的初始顺序完全对应,下标0对应a和a的计数,下标1对应e和e的计数,以此类推 - 修正了排序时的交换逻辑,改为交换j和k下标的元素,和判断逻辑保持一致
- 交换计数的同时同步交换
vowels数组对应位置的字母,保证两个数组相同下标始终对应同一个元音的信息 - 输出时同时取两个数组同下标的值,就能同时显示元音和对应计数了
内容的提问来源于stack exchange,提问作者rachiepu
相关产品推荐
相关产品推荐

