IntelliJ IDEA中Java代码编译报错:主方法返回值类型不符(已尝试static void)
问题解决步骤
你的代码存在两个核心问题导致报错,逐一处理即可解决:
1. 修正main方法的标准声明
Java程序的入口main方法必须严格遵循格式:public static void main(String[] args),确保修饰符、返回值类型、参数完全符合这个标准,这是JVM识别程序入口的唯一要求。
2. 处理非静态内部类的实例化限制
Solution是非静态内部类,而main是静态方法——静态方法属于类本身,无法直接实例化依赖外部类实例的非静态内部类。有两种解决方式:
方式一:将Solution改为静态内部类
给Solution类添加static修饰符,让它属于外部类RotationsNumbers本身,这样静态的main方法可以直接实例化它:
public class RotationsNumbers { // 标准的main方法声明 public static void main(String[] args) { Solution ans = new Solution(); int[] arr = {5, 1, 2, 3, 4}; System.out.println(ans.findKRotation(arr, 5)); } // 改为静态内部类 static class Solution { int findKRotation(int arr[], int n) { int ans = findPivot(arr, 0, n - 1); return ans == -1 ? 0 : ans + 1; } int findPivot(int arr[], int start, int end) { int mid; while (start < end) { mid = start + (end - start) / 2; if (mid < end && arr[mid] > arr[mid + 1]) { return mid; } if (mid > start && arr[mid] < arr[mid - 1]) { return mid - 1; } if (arr[mid] < arr[0]) { end = mid - 1; } else { start = mid + 1; } } return -1; } } }
方式二:先创建外部类实例,再实例化内部类
如果不想修改Solution的静态属性,可以在main方法里先创建外部类对象,再通过该对象实例化内部类:
public class RotationsNumbers { public static void main(String[] args) { // 先创建外部类实例 RotationsNumbers outer = new RotationsNumbers(); Solution ans = outer.new Solution(); int[] arr = {5, 1, 2, 3, 4}; System.out.println(ans.findKRotation(arr, 5)); } class Solution { int findKRotation(int arr[], int n) { int ans = findPivot(arr, 0, n - 1); return ans == -1 ? 0 : ans + 1; } int findPivot(int arr[], int start, int end) { int mid; while (start < end) { mid = start + (end - start) / 2; if (mid < end && arr[mid] > arr[mid + 1]) { return mid; } if (mid > start && arr[mid] < arr[mid - 1]) { return mid - 1; } if (arr[mid] < arr[0]) { end = mid - 1; } else { start = mid + 1; } } return -1; } } }
另外,错误提示中提到的BinarySearch.SortedArray和你代码里的RotationsNumbers不一致,检查项目中是否存在其他同名类,或包名、类名配置是否正确,避免IDE运行错误的类。
内容的提问来源于stack exchange,提问作者Mohan Reddy
相关产品推荐
相关产品推荐

