通过扫描仪输入创建对象

如何解决通过扫描仪输入创建对象

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

}

}

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

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

我还试图在传入新记录时向Entry []数组添加1,但似乎也找不到解决办法。 我不确定应该在哪里放置

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,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,lName);
        return name1;
    }
    
    // Address method 
    public static Address makeAddress(String street,String city,String state,String zipCode) {
        Address address1 = new Address(street,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,line);
        return phone1;
    }
    
    
    
    
    
    @Override
    public String toString() {
        return this.newName + " " + this.address + " " + this.phone;
    }

}

解决方法

您可以删除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,3142752000");
    inputString = input.nextLine();
    entry5[index] = new Entry(inputString);
    System.out.println(entry5[index].toString());
    index += 1;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-