Java中如何调用类内的isHappy布尔方法?快乐数实现求助
解决Main类main方法调用isHappy报错的问题
报错的核心原因是:main是静态方法,若Solution类中的isHappy是非静态方法,静态方法无法直接调用类的非静态成员——非静态方法属于类的实例,必须先创建类对象才能调用。
下面是两种可行的解决方式:
方式一:创建Solution类实例调用非静态方法
在main方法中先实例化Solution类,再通过对象调用isHappy:
public class Main { public static void main(String[] args) { // 创建Solution类的实例 Solution solution = new Solution(); // 通过实例调用isHappy方法 boolean is23Happy = solution.isHappy(23); System.out.println(is23Happy); } }
方式二:将isHappy和getNext改为静态方法
如果Solution类不需要维护任何实例状态,直接把这两个方法改成静态方法,就能通过类名直接调用:
修改Solution类:
import java.util.HashSet; import java.util.Set; public class Solution { // 改为静态方法 public static int getNext(int n) { int totalSum = 0; while (n > 0) { int digit = n % 10; totalSum += digit * digit; n = n / 10; } return totalSum; } // 改为静态方法 public static boolean isHappy(int n) { Set<Integer> seen = new HashSet<>(); while (n != 1 && !seen.contains(n)) { seen.add(n); n = getNext(n); } return n == 1; } }
然后在main方法中直接通过类名调用:
public class Main { public static void main(String[] args) { boolean is23Happy = Solution.isHappy(23); System.out.println(is23Happy); } }
两种方式的选择:
- 若
Solution后续需要添加实例变量(比如记录计算次数),优先用方式一; - 若只是单纯提供工具方法,方式二更简洁直观。
内容的提问来源于stack exchange,提问作者qSplatt Rams
相关产品推荐
相关产品推荐

