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

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);
    }
}

额外提示

  1. 你代码中nextInt()后用String w = bruh.nextLine();处理换行,其实可以直接写bruh.nextLine();,没必要赋值给变量。
  2. 异常处理中递归调用PersonalInfo()可能导致栈溢出(如果用户多次输入错误),可以考虑用循环替代递归。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:55:21