Java编写统计输入单词辅音数量的方法始终返回0如何解决
代码问题分析
1. 方法返回值未接收,Java基本类型为值传递
Java的基本数据类型(比如int)是值传递,你把main方法里的number传给prestej方法时,实际传的是该变量的副本,方法内对number的修改完全不会影响main方法里的原变量。且你调用prestej方法时已经返回了计算后的辅音数量,但没有用变量接收返回值,导致main方法里打印的始终是初始的0值。
正确写法:
// 接收方法返回的计算结果 number = new Work().prestej(beseda, number);
你提到的不初始化number就报错是正常的Java语法规则:局部变量必须显式初始化后才能使用,没有默认值,不属于代码逻辑错误。
2. 元音判断逻辑错误
当前if条件用的是||(逻辑或),这个条件永远为真:任意字符都不可能同时等于a/u/e/i/o五个字母,所以不等于a 或 不等于u的判定永远成立。要判断字符为辅音,应该用&&(逻辑与),要求字符同时不等于所有元音字母:
if (beseda.charAt(i) != 'a' && beseda.charAt(i) != 'u' && beseda.charAt(i) != 'e' && beseda.charAt(i) != 'i' && beseda.charAt(i) != 'o' )
3. 循环中断逻辑错误
你在else分支写了break,意思是只要遍历到第一个元音字符就直接终止整个循环,后面所有字符都不会再统计,完全不符合统计全部辅音的需求,直接删除该else分支即可。
4. 其他边缘问题
- 目前只判断了小写元音,大写的A/U/E/I/O、非字母字符(数字、空格、符号)都会被误算为辅音,可根据需求补充大小写转换、字母合法性判断。
- 变量名拼写不规范:
lenght应为length。 - main方法里的
int number=0;;多写了一个分号,属于冗余代码。
修正后核心代码示例
// main方法调用部分修改 number = new Work().prestej(beseda); // Work类方法修改 class Work { int prestej(String beseda) { int count = 0; int length = beseda.length(); String lowerStr = beseda.toLowerCase(); // 统一转小写兼容大小写输入 for (int i = 0; i < length; i++) { char c = lowerStr.charAt(i); // 先判断是字母,再判断不是元音 if (Character.isLetter(c) && c != 'a' && c != 'u' && c != 'e' && c != 'i' && c != 'o') { count++; } } return count; } }
内容的提问来源于stack exchange,提问作者user15006648
相关产品推荐
相关产品推荐

