You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组求第二大元素代码编译错误求助:新手无法定位问题

Java获取数组第二大元素编译错误及逻辑问题修复

问题描述

我是Java新手,编写获取数组中第二大元素的代码时出现编译错误,同时代码还存在逻辑问题,无法得到正确结果。

错误代码

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(br.readLine().trim());
        while (tc-- > 0) {
            String[] inputLine;
            int n = Integer.parseInt(br.readLine().trim());
            int[] arr = new int[n];
            inputLine = br.readLine().trim().split(" ");
            for (int i = 0; i < n; i++) {
                arr[i] = Integer.parseInt(inputLine[i]);
            }

            int ans = new Solution().print2largest(arr, n);
            System.out.println(ans);
        }
    }
}

// } Driver Code Ends


//User function Template for Java

class Solution {
    int print2largest(int arr[], int n) {
        int large = getLargest(arr,n);
        int res = -1;
        for(int i=0;i<n;i++){
            if(arr[i]!= arr[large]){
                if(res == -1){
                    res = arr[i];
                }
                else if(arr[i]>arr[res]){
                    res = arr[i];
                }
            }
        }
        return res;
    }
}

public static int getLargest(int arr[], int n) {
    int l = 0;
    for(int i=0; i<n; i++){
        if(arr[i]>arr[l]){
            l = i;
        }
    }
    return l;
}

报错信息

prog.java:53: error: class, interface, or enum expected
public static int getLargest(int arr[], int n) {
              ^
prog.java:55: error: class, interface, or enum expected
    for(int i=0; i<n; i++){
    ^
prog.java:55: error: class, interface, or enum expected
    for(int i=0; i<n; i++){
                 ^
prog.java:55: error: class, interface, or enum expected
    for(int i=0; i<n; i++){
                      ^
prog.java:58: error: class, interface, or enum expected
        }
        ^

输入输出示例

  • 输入示例:
6
12 35 1 10 34 1
  • 预期输出:34

问题分析与修复

1. 编译错误原因

Java不允许在类外部定义方法,你将getLargest方法定义在了Solution类的外部,违反了Java语法规则,导致编译报错。

2. 逻辑错误原因

print2largest方法中,res存储的是数组元素的值而非索引,但后续代码用arr[res]访问数组,会导致数组下标越界(比如元素值34作为下标时,数组长度仅为6,超出范围),正确逻辑应直接比较元素值与res的大小。

修复方案

将getLargest方法移至Solution类内部,修改为私有静态方法(仅类内部使用),同时修正print2largest中的比较逻辑:

修复后代码

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(br.readLine().trim());
        while (tc-- > 0) {
            String[] inputLine;
            int n = Integer.parseInt(br.readLine().trim());
            int[] arr = new int[n];
            inputLine = br.readLine().trim().split(" ");
            for (int i = 0; i < n; i++) {
                arr[i] = Integer.parseInt(inputLine[i]);
            }

            int ans = new Solution().print2largest(arr, n);
            System.out.println(ans);
        }
    }
}

// } Driver Code Ends


//User function Template for Java

class Solution {
    int print2largest(int arr[], int n) {
        int largeIndex = getLargest(arr,n);
        int secondLargest = -1;
        for(int i=0;i<n;i++){
            if(arr[i]!= arr[largeIndex]){
                if(secondLargest == -1){
                    secondLargest = arr[i];
                }
                else if(arr[i] > secondLargest){
                    secondLargest = arr[i];
                }
            }
        }
        return secondLargest;
    }

    private static int getLargest(int arr[], int n) {
        int largestIndex = 0;
        for(int i=0; i<n; i++){
            if(arr[i]>arr[largestIndex]){
                largestIndex = i;
            }
        }
        return largestIndex;
    }
}

内容的提问来源于stack exchange,提问作者Ayush Kacholiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:03:07