【问题标题】:Recording data, entering data in the command line, and limiting the length of integers记录数据,在命令行输入数据,限制整数长度
【发布时间】:2013-09-28 21:12:50
【问题描述】:

我必须编写一个模拟员工的程序。员工有员工编号、名字和姓氏、由街道、城市、州和 5 位邮政编码组成的地址,以及由月、日和年组成的雇用日期。它必须使用雇员类、姓名类、地址类和日期类。每个类都必须记录用户输入的信息。这是我写的:

import javax.swing.JOptionPane;

public class AssignmentTen
{
    public static void main (String[] args)
    {   
        System.out.println();       

        int input1 = getInt ("Enter Employee Number:");
        Employee e1 = new Employee(input1);
        System.out.println("#" + e1.number);

        String input2 = getString ("Enter Employee First Name:");
        String input3 = getString ("Enter Employee Last Name:");
        Name n1 = new Name(input2, input3);
        System.out.println(n1.firstName + " " + n1.lastName);

        String input4 = getString ("Enter Employee Street:");
        String input5 = getString ("Enter Employee City:");
        String input6 = getString ("Enter Employee State (Initials):");
        int input7 = getInt ("Enter Employee Zip Code (5 Digits):");
        Address a1 = new Address (input4, input5, input6, input7);
        System.out.println(a1.eStreet + " " + a1.eCity + " " + a1.eState + " " + a1.eZipCode);

        int input8 = getInt ("Enter Employee Hire Month (MM):");
        int input9 = getInt ("Enter Employee Hire Day (DD):");
        int input10 = getInt ("Enter Employee Hire Year(YYYY):");
        Date d1 = new Date (input8, input9, input10);
        System.out.println("Hire Date: " + d1.month + "/" + d1.day + "/" + d1.year);
    }

    public static int getInt(String paramString)
    {
        String str = JOptionPane.showInputDialog(paramString);
        return Integer.parseInt(str);
    }

    public static String getString(String paramString)
    {
        String str = JOptionPane.showInputDialog(paramString);
        return str;
    }
}

class Employee
{
    int number;

    Employee(int newNumber)
    {
        number = newNumber;
    }
}

class Name
{
    String firstName;
    String lastName;

    Name(String first, String last)
    {
        firstName = first;
        lastName = last;
    }
}

class Address
{
    String eStreet;
    String eCity;
    String eState;
    int eZipCode;

    Address(String street, String city, String state, int zipCode)
    {
        eStreet = street;
        eCity = city;
        eState = state;
        eZipCode = zipCode;
    }
}

class Date
{
    int month;
    int day;
    int year;

    Date(int eMonth, int eDay, int eYear)
    {
        month = eMonth;
        day = eDay;
        year = eYear;
    }
}

但是,我还需要一些我不知道如何实现的东西。我的问题是我该怎么做:

  • 使状态字符串不显示任何长于或短于两个字母的内容
  • 使地址类中的邮政编码变量仅显示长度超过五个字符的任何输入的前五个字符
  • 能够为多个员工存储数据
  • 能够指定将在命令行中存储多少员工信息
  • 将单个员工的所有信息存储在另一个类中,并为每个员工创建包含所有信息的对象

任何关于如何清理我的代码的帮助或建议将不胜感激。

【问题讨论】:

    标签: java class object command-line


    【解决方案1】:

    首先,Date, Name, Address 类应该用作Employee 的字段。还要考虑像zipCode 这样的变量名,而不是input7

    能够为多个员工存储数据

    您可以将员工存储在集合中,例如集合:

     Set<Employee> employess = new HashSet<>(); // field
     ...
     employess.add(e1);
    

    能够在命令行中指定将存储多少员工信息

    int howmany = getInt ("Howmany emp you want to put");
    for(int i = 0 ; i < howmany; i++) {
        //invoke here extracted method getting all employee data
        //example: employees.add(getEmployeeData());
    }
    

    将单个员工的所有信息存储在另一个类中,并为>每个员工创建包含所有信息的对象

    我猜在将日期、姓名和地址放入 Employee 后问题就解决了。

    使地址类中的邮政编码变量仅显示>任何长度超过五个字符的输入的前五个字符

    int input7 = getInt ("Enter Employee Zip Code (5 Digits):"); //wrong varible name!
    String zipCode = String.valueOf(input7);
    if(zipCode.lenght() > 5) {
        zipCode= zipCode.subString(0,4);
    }
    

    使状态字符串不显示任何长于或短于两个字母的内容

    String input6 = getString ("Enter Employee State (Initials):");
    if(input6.lenght != 2) {
         input6 = "";
    }
    

    【讨论】:

    • 感谢您的回复,但这并不是我想要的。制作员工的日期、姓名和地址字段听起来是个好主意,但我正在为作业编写此代码;其中的参数指定它们都必须在单独的类中。我也不熟悉集合,我不能在我的程序中使用它们。最后,我需要一种在程序启动时指定员工数量的方法,而不是通过输入窗口。再次感谢您的意见。
    • 所以将员工数量作为参数传递给 java 程序和:if(args.lenght != 1) {System.exit(0);} else {int howMany = Integer.parseString(args[0]);}。您可以将员工存储在 Array -> Employee[] employyes = new Employee[howMany](); ... employyes[i] = new Employee(...); 中,而不是 Collections。如果您不想将这些类放入 EMployee,只需创建 EmployeeData 或包含所有这些类的类似内容。
    • 如果您不知道如何在 java 中传递程序参数,请查看 docs.oracle.com/javase/tutorial/essential/environment/…。 And Arrays 教程docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
    • @smaljo 我输入了你所说的使邮政编码只接受 5 位数或更少的内容,但我不断收到“错误:找不到符号”。看起来像this:
    • @smaljo 与您的状态字符串位相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2014-08-12
    • 2020-06-03
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多