Java项目求助:如何实现文本文件元音计数的表格输出
元音统计程序优化思路指引
需求说明
编程新手正在学习Java,课程项目要求实现:
- 读取文本文件内容
- 统计每个元音(A/E/I/O/U,不区分大小写)的出现次数
- 按以下格式输出统计结果:
A|## E|## I|#### O|# U|
当前进度
已实现总元音数量统计(测试文本"orange tree apple hope"总元音数为9),也能输出固定#数量的表格,但无法将每个元音的实际统计数填入表格。预期各元音统计结果:a=2, e=5, i=0, o=2, u=0。
现有完整代码:
import java.util.Scanner ; import java.io.File ; public class VowelCounter { public static void main(String[] args) throws Exception { File text = new File ("Doc.txt") ; Scanner input = new Scanner(text) ; //File Doc.txt is scanned and is used int count = 0 ; while (input.hasNext()) { String words = input.nextLine(); System.out.println(words); for (int i=0;i<words.length(); i++) { char car = words.charAt(i); if (car =='a'|| car == 'i' || car == 'e' || car=='o' || car == 'u') { count ++ ; } //Test Values (NOT FINAL) int a = 5 ; int e = 5; int ii = 5; int o = 5; int u = 5; } //Process for creating the chart (NOT FINAL) System.out.println(count); System.out.print("A|"); final int MAX_ROWS = 1 ; for (int row = 1; row <= MAX_ROWS; row++) { for(int a =5; a >= row; a--) System.out.print("#"); } System.out.println(""); System.out.print("E|"); for (int row = 1; row <= MAX_ROWS; row++) { for(int e =5; e >= row; e--) System.out.print("#"); } System.out.println(""); System.out.print("I|"); for (int row = 1; row <= MAX_ROWS; row++) { for(int ii =5; ii >= row; ii--) System.out.print("#"); } System.out.println(""); System.out.print("O|"); for (int row = 1; row <= MAX_ROWS; row++) { for(int o =5; o >= row; o--) System.out.print("#"); } System.out.println(""); System.out.print("U|"); for (int row = 1; row <= MAX_ROWS; row++) { for(int u =5; u >= row; u--) System.out.print("#"); } } //(ERROR) prints 15 # instead of 4 // a= 2 e=5 i=0 o=2 u=0 (FOR CHECK) // 9 toatl vowels } }
优化思路指引
- 调整计数器作用域:你现在的单个元音计数器(a/e/ii/o/u)定义在字符遍历循环内部,每次循环都会重置为5,完全无法保存统计结果。需要把这些计数器移到
while循环外面,初始值设为0,这样整个统计过程中数值能持续累加。 - 拆分统计逻辑:把原来只累加总元音数的代码,改成判断每个字符对应的元音,给对应计数器加1。比如遇到
'a'就给a计数器加1,遇到'e'就给e计数器加1,以此类推。如果要兼容大写元音,可以先把字符转成小写(用Character.toLowerCase(car))再判断。 - 替换表格的固定值:输出表格时,原来用固定值5来循环输出
#,现在要替换成对应元音的计数器数值。比如输出A行时,循环次数等于a计数器的值,这样就能输出对应数量的#。另外你写的嵌套循环(row和计数的循环)可以简化,直接写一个从1到计数器值的循环,每次输出一个#即可。 - 修正表格输出位置:当前代码每读取一行就输出一次表格,会导致重复输出。应该把表格输出代码移到
while循环结束之后,等所有文本行都统计完成,再输出最终的统计表格。
内容的提问来源于stack exchange,提问作者OvenMade123
相关产品推荐
相关产品推荐

