【问题标题】:Creating object from scanner input从扫描仪输入创建对象
【发布时间】:2020-08-26 20:16:43
【问题描述】:
import java.util.Scanner;

public class PhoneBook {
    
    private Address[] addresses;
    private String[] phoneNumbers;
    private Person[] people;
    
    public static void startMenu() {
        
        
    }

    
    public static void main(String[] args) {
        
        Scanner input = new Scanner(System.in);
        Scanner intScan = new Scanner(System.in);
    
        String menu = ("Please Make A selection Below: \n1 - Add new Record"
                + " \n2 - Delete Record "
                + "\n3 - Find Record By Telephone Number "
                + "\n4 - Find Record By First Name "
                + "\n5 - Find Record By Last Name"
                + "\n6 - Update a Record"
                + "\n7 - Exit");
        
        int selection;
        String inputString;
        do {
            System.out.println(menu);
            selection = intScan.nextInt();
            Entry[] entry5 = new Entry[0];
            Entry tempEntry = null;
            switch (selection) {
            case 1: 
                System.out.println("Please enter a new record as John Michael West Doe, 574 Pole ave, St. Peter, MO, 63303, 3142752000");
            
                inputString = input.nextLine();
// creating a new obj ref variable
                tempEntry = new Entry(inputString);
                // calling the method on the obj ref variable

                tempEntry.addEntry(inputString);
                System.out.println(tempEntry.toString());
                System.out.println(menu);
                break;
                
            
            case 2:
                
                // method to remove record 
                
                break;
                
            case 3:
                
                // method 
                
                break;
                
            case 4:
                
                break;
                
            case 5:
            
                break;
                
            case 6:
                
                break;
                
            case 7:
                
                break;
            }
            
            }       while (selection != 11);

}

}

我试图弄清楚为什么当我将对象引用变量设置为等于新条目时我的对象没有创建。我还为 tempEntry 对象引用变量调用 .addEntry 方法并传入扫描仪输入但没有成功。我只是将'null null null'打印到控制台。但它不会让我输入参数。

tempEntry = new Entry();
tempEntry.addEntry(inputString);

我还尝试在传入新记录时将 1 添加到 Entry[] 数组,但似乎也找不到解决方法。 我不知道我应该把:

tempEntry = new Entry(inputString);

Entry[] entry5 = new Entry[0];

但是,我一直在移动它们并运行代码。有什么想法吗?这是我的条目类中的添加条目方法:

import java.util.Scanner;

public class Entry {
    
    private Name newName;
    private Address address;
    private Phone phone;
    public String string;
    
    
    public Entry(Name newName, Address address, Phone phone) {
        this.newName = newName;
        this.address = address;
        this.phone = phone;
    }
    
    public Entry(String string) {
        this.string = string;
    }
    
    public Entry() {
        
    }
    
    
    
    public Name getName() {
        return this.newName;
    }
    
    public Address getAddress() {
        return this.address;
    }
    
    public Phone getPhone() {
        return this.phone;
    }
    
    public void setName(Name newName) {
        this.newName = newName;
    }
    
    public void setAddress(Address address) {
        this.address = address;
    }
    
    public void setPhone(Phone phone) {
        this.phone = phone;
    }

    **// add entry method 
    public Entry addEntry(String input) {
        String name, street, city, state, zipCode, phoneNumber;
        name = "";
        street = "";
        city = "";
        state = "";
        zipCode = "";
        phoneNumber = "";
        
        String[] arr = input.split(",");
        
        name = arr[0];
        street = arr[1].trim();
        city = arr[2].trim();
        state = arr[3].trim();
        zipCode = arr[4].trim();
        phoneNumber = arr[5].trim();
        
        Name fullName = splitName(name); 
        Address address = makeAddress(street, city, state, zipCode);
        Phone phoneNum = makePhone(phoneNumber);
        
        Entry entry1 = new Entry(fullName, address, phoneNum);
        return entry1;
    }**
    
    // split name method 
    public static Name splitName(String name) {
        String fName, mName, lName;
        fName = "";
        mName = "";
        mName = "";
        String [] names = name.split(" ");
        
        fName = names[0];
        
        for (int i = 1; i < names.length - 1; i++) {
            mName += names[i];
            if (i != names.length - 1) {
                mName += " ";
            }
        }
        
        lName = names[names.length - 1];
        
        Name name1 = new Name(fName, mName, lName);
        return name1;
    }
    
    // Address method 
    public static Address makeAddress(String street, String city, String state, String zipCode) {
        Address address1 = new Address(street, city, state, zipCode);
        return address1;
    }
    
    // Phone method 
    public static Phone makePhone(String phoneNumber) {
        String area, prefix, line;
        
        area = phoneNumber.substring(0, 3);
        prefix = phoneNumber.substring(3, 6);
        line = phoneNumber.substring(6);
        
        Phone phone1 = new Phone(area, prefix, line);
        return phone1;
    }
    
    
    
    
    
    @Override
    public String toString() {
        return this.newName + " " + this.address + " " + this.phone;
    }

}

【问题讨论】:

  • 您可以删除addEntry() 函数,并将该函数中的所有代码移至Entry(String string) 构造函数。除了最后两行。删除那些。
  • @JohnnyMopp 所以 - 我将如何利用那里的一切?我会创建一个新对象并调用该构造函数吗?条目条目 = 新条目(输入字符串)?另外,我是否需要删除其他任何内容才能将其粘贴到该构造函数中?我只是对它的外观感到困惑。感谢您的帮助。

标签: java object


【解决方案1】:

您可以删除addEntry() 函数并将该函数中的所有代码移至Entry(String string) 构造函数。除了最后两行。删除那些就行了。

public Entry(String input)
{
    String[] arr = input.split(",");
    
    if (arr.length < 6) {
        throw new IllegalArgumentException();
    }

    newName = splitName(arr[0]);
    address = makeAddress(arr[1].trim(), arr[2].trim(), arr[3].trim(), arr[4].trim());
    phone = makePhone(arr[5].trim());
}

然后在主代码中:

case 1: 
    System.out.println("Please enter a new record as John Michael West Doe, 574 Pole ave, St. Peter, MO, 63303, 3142752000");
    inputString = input.nextLine();
    tempEntry = new Entry(inputString);
    System.out.println(tempEntry.toString());
    System.out.println(menu);
    break;

请注意,这不会向数组中添加任何内容。如果你想先这样做,你必须正确声明数组并设置正确的索引:

//Entry[] entry5 = new Entry[0]; <- creates a zero-length array
Entry[] entry5 = new Entry[5];   // creates array with room for 5 items
int index = 0;   // Where to add the next item
....
case 1: 
    System.out.println("Please enter a new record as John Michael West Doe, 574 Pole ave, St. Peter, MO, 63303, 3142752000");
    inputString = input.nextLine();
    entry5[index] = new Entry(inputString);
    System.out.println(entry5[index].toString());
    index += 1;

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2017-09-04
    • 2012-12-06
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多