当我将它作为参数传递给类时,Scanner如何表现?

时间:2014-09-16 20:24:10

标签: parameter-passing java.util.scanner static-methods

我有这个类ENTRY有PERSON和PHONE类型(两个分开的类。在我的主类中,我使用Scanner从txt文件中获取数据并将其插入ENTRY创建者方法。问题是我只能获得PHONE变量权限,而PERSON变得“无效”。单独地,当我通过相同的Scanner和txt文件创建PERSON时,我会为PERSON类型获得良好的结果。

以下是代码的一部分:

在课堂上:

public static PERSON loadPerson(Scanner sc)
    {
        return new PERSON(sc.next(), sc.next());
    }

在课堂上电话:

public static PHONE loadPhone(Scanner sc){

        return new PHONE(sc.next(), sc.next());
    }

在课堂入学:

public static ENTRY loadEntry(Scanner sc)
    {
        return new ENTRY(PERSON.loadPerson(sc), PHONE.loadPhone(sc));
    }

在主测试课中我写道:

E = ENTRY.loadEntry(sc);

txt文件第1行看起来像这样:“Gavrilo Aleksic 012 221788”(不含引号)。他应该将名字和名字输入PERSON constuctor,将两个数字输入PHONE const。他们看起来像:

PERSON:

private String name;
private String surname;

public PERSON(String name, String surname)
    {
        this.name = name;
        this.surname = surname;
    } 

PHONE:

private String local, area;
public PHONE(String area, String local)
    {
        this.area = area;
        this.local = local;
    }

ENTRY:

public static ENTRY loadEntry(Scanner sc)
    {
        return new ENRTY(PERSON.loadPerson(sc), PHONE.loadPhone(sc));
    }

1 个答案:

答案 0 :(得分:0)

Objects中的{p> Javapassed by reference

正如我从您的问题中所理解的那样,您希望在执行时初始化PersonPhone的实例 -

     new Entry()

而且,Entry类结构类似于

    class Entry {
       Person p;
       Phone ph;
    }

Entry

中添加构造函数
    Entry (Person p, Phone ph) {
       this.p = p;
       this.ph = ph;
    }

现在,在你的主要方法 -

    Scanner s = new Scanner("File path to read from");
    Entry e = Entry.loadEntry(sc);
    s.close();

内部,loadEntry方法

    public static Entry loadEntry (Scanner sc) {
        if (s.hasNextLine()) {
            String[] temp = s.nextLine().split("\\s");

            //assuming file contains 'Gavrilo Aleksic 012 221788'
            Person p = new Person(temp[0], temp[1]);
            Phone ph = new Phone(temp[2], temp[3]);

            return new ENRTY(p, ph);
        }
        return null;
    }