Java中如何在方法间传递STRING、INT等数据?解决变量跨方法调用问题
解决方案:跨方法传递局部变量
你的问题根源在于局部变量的作用域限制:LN、FN、Sno这些变量是定义在PersonalInfo()方法内部的局部变量,只能在该方法内部访问,其他方法(比如la())无法直接获取。下面提供几种实用的解决思路:
方法一:使用类静态成员变量
把需要共享的变量定义为类的静态成员,这样所有静态方法都能访问到它们:
import java.util.*; public class Fvk { // 定义类级别的静态成员变量 private static int Sno; private static String LN; private static String FN; private static String MN; public static void main(String[] args) { PersonalInfo(); la(); } static void PersonalInfo() { try { Scanner bruh = new Scanner(System.in); System.out.println("~PERSONAL INFROMATION~"); System.out.println(); System.out.print("\tStudent No.: "); Sno = bruh.nextInt(); bruh.nextLine(); // 处理nextInt后的换行符 System.out.print("\tLast Name: "); LN = bruh.nextLine(); System.out.print("\tFirst Name: "); FN = bruh.nextLine(); System.out.print("\tMiddle Name: "); MN = bruh.nextLine(); } catch (Exception e) { System.out.println(); System.out.println(" INVALID INPUT "); System.out.println(); PersonalInfo(); } } static void la() { System.out.println(LN); System.out.println(FN); } }
方法二:封装为实体类(更符合面向对象思想)
创建一个Student类来封装学生信息,让PersonalInfo()返回这个对象,再传递给la()方法:
第一步:创建Student实体类
class Student { private int sno; private String lastName; private String firstName; private String middleName; // 构造方法 public Student(int sno, String lastName, String firstName, String middleName) { this.sno = sno; this.lastName = lastName; this.firstName = firstName; this.middleName = middleName; } // Getter方法(用于获取属性值) public String getLastName() { return lastName; } public String getFirstName() { return firstName; } // 其他属性的Getter按需添加 }
第二步:修改原Fvk类
import java.util.*; public class Fvk { public static void main(String[] args) { Student student = PersonalInfo(); la(student); } static Student PersonalInfo() { try { Scanner bruh = new Scanner(System.in); System.out.println("~PERSONAL INFROMATION~"); System.out.println(); System.out.print("\tStudent No.: "); int sno = bruh.nextInt(); bruh.nextLine(); System.out.print("\tLast Name: "); String ln = bruh.nextLine(); System.out.print("\tFirst Name: "); String fn = bruh.nextLine(); System.out.print("\tMiddle Name: "); String mn = bruh.nextLine(); // 返回封装好的Student对象 return new Student(sno, ln, fn, mn); } catch (Exception e) { System.out.println(); System.out.println(" INVALID INPUT "); System.out.println(); // 递归调用时继续返回Student对象 return PersonalInfo(); } } static void la(Student student) { // 通过Getter方法获取属性 System.out.println(student.getLastName()); System.out.println(student.getFirstName()); } }
方法三:直接传递参数(适合少量变量)
如果变量不多,可以让PersonalInfo()返回包含所有数据的容器(比如数组),然后在main方法中拆分后传递给la():
import java.util.*; public class Fvk { public static void main(String[] args) { Object[] info = PersonalInfo(); la((String) info[1], (String) info[2]); } static Object[] PersonalInfo() { try { Scanner bruh = new Scanner(System.in); System.out.println("~PERSONAL INFROMATION~"); System.out.println(); System.out.print("\tStudent No.: "); int sno = bruh.nextInt(); bruh.nextLine(); System.out.print("\tLast Name: "); String ln = bruh.nextLine(); System.out.print("\tFirst Name: "); String fn = bruh.nextLine(); System.out.print("\tMiddle Name: "); String mn = bruh.nextLine(); // 返回包含所有数据的数组 return new Object[]{sno, ln, fn, mn}; } catch (Exception e) { System.out.println(); System.out.println(" INVALID INPUT "); System.out.println(); return PersonalInfo(); } } static void la(String ln, String fn) { System.out.println(ln); System.out.println(fn); } }
额外提示
- 你代码中
nextInt()后用String w = bruh.nextLine();处理换行,其实可以直接写bruh.nextLine();,没必要赋值给变量。 - 异常处理中递归调用
PersonalInfo()可能导致栈溢出(如果用户多次输入错误),可以考虑用循环替代递归。
内容的提问来源于stack exchange,提问作者Nats One
相关产品推荐
相关产品推荐

