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

Java中void方法如何传递数据?关于getExamData方法的疑问

解决void方法传递数组数据到main的问题

嘿,这个困惑太正常了!很多刚接触Java的同学都会被void方法不能返回值这点卡到,但其实利用Java数组的引用类型特性,完全可以实现把getExamData里获取的答题数据传递回main方法。

核心原理:数组是引用传递

Java里的数组属于引用类型,当你把数组作为参数传给方法时,传递的不是数组的副本,而是数组在内存中的引用地址。所以在getExamData方法里修改数组的元素,本质上是直接修改原数组的内容,main方法里的数组自然就能拿到这些数据。

修改后的完整代码示例

import java.util.Scanner;

public class Hwk11 {
    public static void main(String args[]) {
        final int PASSING_SCORE = 15;
        char[] answerKey = { 'B', 'D', 'A', 'A', 'C', 'A', 'B', 'B', 'C', 'D', 'A', 'C', 'D', 'B', 'A', 'B', 'C', 'D', 'A', 'C' };
        // 先创建一个长度为20的数组,用来接收答题数据
        char[] studentResponses = new char[20];
        
        // 把这个数组传给getExamData方法
        getExamData(studentResponses);
        
        // 现在main方法里的studentResponses已经有数据啦,可以接着处理评分逻辑
        int correctCount = 0;
        for (int i = 0; i < answerKey.length; i++) {
            if (studentResponses[i] == answerKey[i]) {
                correctCount++;
            }
        }
        System.out.println("答对题数:" + correctCount);
        System.out.println(correctCount >= PASSING_SCORE ? "通过考试" : "未通过");
    }

    public static void getExamData(char responses[]) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入20道题的答案(大写字母):");
        for (int i = 0; i < responses.length; i++) {
            System.out.print("第" + (i+1) + "题:");
            responses[i] = scanner.next().toUpperCase().charAt(0);
        }
        scanner.close();
    }
}

关键说明

  • 在main方法里先初始化一个studentResponses数组,长度和题目数量一致(20)。
  • 调用getExamData(studentResponses)时,方法拿到的是这个数组的引用,所以在方法里用Scanner给responses[i]赋值,就是直接修改main里的studentResponses数组。
  • 方法执行完回到main后,studentResponses已经填充了用户输入的答题数据,直接用就行。

这样就完美绕开了void方法不能返回值的限制,利用引用类型的特性实现了数据传递~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:49