Java语法错误:需插入ClassBody完成类声明,求解决方案
问题排查与解决
错误原因
你在digit方法里定义的InnerDig内部类存在语法错误:
- Java类的类体中只能定义成员(方法、字段、构造器、内部类等),不能直接放置
while这类可执行语句,这就是编译器提示需要插入ClassBody来完成类声明的核心原因。 - 另外,这段统计数字位数的逻辑完全不需要使用内部类,属于不必要的错误设计。
修正后的代码
package numberquebymethod; import java.util.Scanner; public class NoOfDigit { public int digit(int num) { int count = 0; // 直接将循环逻辑放在方法中,无需内部类 while(num != 0) { count++; num = num / 10; } return count; } public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("Enter a number:"); int num = sc.nextInt(); NoOfDigit ndg = new NoOfDigit(); System.out.println(ndg.digit(num)); } }
补充说明(若需学习内部类用法)
如果只是为了练习内部类的使用,正确的写法应该是在内部类中定义方法,再在外部方法中实例化内部类并调用其方法,示例如下:
public int digit(int num) { int count = 0; class InnerDig { void countDigits() { while(num != 0) { count++; num = num / 10; } } } // 实例化内部类并调用方法 InnerDig inner = new InnerDig(); inner.countDigits(); return count; }
不过这种写法对于当前统计数字位数的需求完全没必要,优先使用第一种修正方案即可。
内容的提问来源于stack exchange,提问作者Divya Prakash
相关产品推荐
相关产品推荐

