import java.util.Scanner; public class findMax { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; int gewei = 0; int max = 0; for(int i=1;i<=5;i++){ int n = sc.nextInt() ; gewei= getGewei(n); if( gewei > max ) max = gewei ; } System.out.println("max=" + max) ; } static int getGewei(int num) { int gewei= getGewei(n); ; return gewei; } }哪里有问题
时间: 2025-03-08 13:00:57 浏览: 10
你提供的代码有几个语法错误和逻辑问题,下面我会详细指出并给出修正建议:
错误分析
变量声明冲突:
- 在
for
循环内部再次声明了int n;
,这与外部已经存在的n
产生了冲突。
- 在
方法调用错误:
getGewei(num)
方法中递归调用了自己,并传入了一个未定义的变量n
,应该是传递给它的形参num
。
缺少分号:
- 在
sc.nextInt()
后少了分号; - 在
System.out.println("max=" + max);
前也有类似的问题;
- 在
输入次数固定为5次:
- 如果你想让用户输入数字直到他们不想继续为止,可以考虑使用其他控制结构如
while
循环加上用户确认机制。不过如果你确实想限制为五次输入,则保持原样即可。
- 如果你想让用户输入数字直到他们不想继续为止,可以考虑使用其他控制结构如
获取个位数函数实现有误:
- 获取个位数应该直接取模10 (
% 10
) 而不是再次调用自身导致无限递归。
- 获取个位数应该直接取模10 (
变量命名不规范:
- 变量名应尽量采用有意义的名字以便于理解程序意图。“gewei”虽然能表达意思但是不够直观,可以改为“lastDigit”。
缩进不一致:
- 这会使代码难以阅读维护,请确保所有语句块都按照正确的层级对齐。
修改后的完整代码如下:
import java.util.Scanner;
public class FindMax {
public static void main(String[] args) {
// 创建Scanner对象用于接收用户的键盘输入
Scanner scanner = new Scanner(System.in);
int maxLastDigit = Integer.MIN_VALUE; // 初始化最大值为最小整数值
System.out.println("请输入五个整数:");
for (int i = 1; i <= 5; i++) {
try {
// 提示信息并且读取一行内容转换成整型数据
System.out.print("第 " + i + " 个数字:");
int number = scanner.nextInt();
// 计算当前数字的最后一位(即个位)
int lastDigit = getLastDigit(number);
// 更新最大值记录
if(lastDigit > maxLastDigit){
maxLastDigit = lastDigit;
}
} catch(Exception e){
System.err.println("无效输入,请检查您的输入是否为合法整数!");
break; // 中断整个操作流程避免后续异常处理
}
}
// 输出结果
System.out.println("\n最大的个位数是:" + ((maxLastDigit == Integer.MIN_VALUE)? "无" : ""+maxLastDigit));
// 关闭资源释放占用内存空间
scanner.close();
}
/**
* 返回指定整数的最右侧一位(也就是常说的“个位”)。
*/
private static int getLastDigit(int num){
return Math.abs(num % 10); // 确保即使是负数也能正确得到其正向表示形式下的个位
}
}
改善点总结:
- 使用更准确、更具描述性的名称替换原始标识符。
- 引入边界条件判断防止潜在溢出风险。
- 增加基本的数据验证步骤以应对非预期情况的发生。
- 对功能模块进行了适当拆解使得各部分职责单一明确易于理解和测试。
阅读全文
相关推荐


















