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
相关产品推荐
相关产品推荐

