2

私は現在Javaを勉強していますが、これを行う方法がよくわかりません。

現在、従業員クラスがあります

public class employee {

private int empID;
private String empName;
private String job;

//constructors;

public employee(){
    this.empID = 0;
    this.empName = "";
    this.job = "";
}
public employee(int empID, String empName, String job){
    this.empID = empID;
    this.empName = empName;
    this. job = job;
}

//gets;

public int getEmpID(){
    return this.empID;
}
public String getEmpName(){
    return this.empName;
}
public String getJob(){
    return this.job;
}

//sets;

public void setEmpID(int empID){
    this.empID = empID;
}
public void setEmpName(String empName){
    this.empName = empName;
}
public void setJob(String job){
    this.job = job;
}

}

私のメインでは、サイズが2のemployee型のオブジェクト配列を作成し、配列数を増やして、ユーザーに基本情報を入力させてから、入力したすべての情報を出力する別のループを作成しました。

import java.util.Scanner;
public class employeeArray {

public static void p(String s) {System.out.println(s);}

public static void main(String args[]){
    Scanner k = new Scanner(System.in);
    int empID, size=0, x=0;
    String empName;
    String job;
    employee [] employees = new employee[2];

    for(size = 0; size < 2; size++)
    {
        p("Employee "+(size+1));
        p("Please enter employee ID number: ");
        empID = k.nextInt(); k.nextLine();
        p("Please enter your name: ");
        empName = k.nextLine();
        p("Please enter your job role: ");
        job = k.nextLine();

        employees[size] = new employee();

        employees[size].setEmpID(empID);
        employees[size].setEmpName(empName);
        employees[size].setJob(job);


    }

    for(x=0; x<2;x++){
        p("Hello employee: "+employees[x].getEmpName()+" your job role is "+employees[x].getJob()+ 
                " your log in ID is 0800"+employees[x].getEmpID());
    }
}

}

オブジェクトの各インスタンスに入力でデータを入力する方法は理解していますが、サイズを2から20に増やしたいが、最初の10'が事前に入力されているので、現在持っているがまだ入力できる10を表示できます。さらに10個。

ps。私の長い質問、コードのブロック、用語の貧弱/欠如について申し訳ありません。私はこれに不慣れです。

4

4 に答える 4

7

厳密に必要でない限り、配列を動的にサイズ変更する必要がある場合は、わざわざ配列を使用しないでください (その場合でも、単に変換することができますArrayList.toArray(..))。

ArrayList<Employee>の代わりにを使用しEmployee[]ます。容量について心配する必要はありません。要素の削除と移動について心配する必要はありません。また、汎用コンテナもサポートします。

補足として、Java の命名規則ではCapitalized、クラスに名前を使用することが推奨されています。

于 2013-03-20T20:31:45.423 に答える
0

Java 配列 (小さな「a」を含む --[]オブジェクト) は、作成時に固定サイズです。そのため、10 個の要素を持つ配列を作成すると、常にちょうど 10 個の要素を持つことになります (ただし、一部の要素は null 以外の値を持たない場合があります)。現在割り当てられているサイズを超えて配列のサイズを増やす必要がある場合は、頑張ってください!! ....ええと、新しい大きな配列を割り当ててから、小さな配列の内容をそれにコピーする必要があるということです。

この方法で配列をコピーすることはそれほど効率的ではありませんが、厄介でエラーが発生しやすいため、可変長のリストを保持し、配列の醜いものを管理できるいくつかの JDK クラス (java.util.ArrayList など) があります。あなた。(正直に言うと、一般に、これらのクラスは内部配列を保持し、必要に応じてそれをより大きな配列にコピーするため、効率的ではありません。しかし、コーディングを簡素化し、エラーを減らします。これが重要なポイントです。 )

于 2013-03-20T20:47:49.930 に答える
0

あなたのコメントによると、実際には動的配列は必要ありませんが、固定サイズの 20 と 10 が入力された配列が必要です。

例:

int[] intArray = new int[20];

intArray[0] = 1
intArray[1] = 2
intArray[2] = 3
intArray[3] = 4
intArray[4] = 5
intArray[5] = 6
intArray[6] = 7
intArray[7] = 8
intArray[8] = 9
intArray[9] = 10

//now to fill the rest of the slots.
for(int i = 10; i < intArray.length; i++) {
    intArray[i] = i + 1;
}

ただし、配列にあるものとそうでないものを追跡する責任があるのはあなたであり、配列に20を超えるアイテムを追加することはできません。

編集: 投稿を編集しました。上記のコードを使用すると、必要なことを行うことができます。ArrayList を使用せずに配列を動的に増やしたい場合は、 System#arrayCopy を使用できます

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Object , int, java.lang.Object, int, int)

既存の配列を新しいサイズの新しい (空の) 配列にコピーできます。

于 2013-03-20T21:01:43.627 に答える
0

まず、クラス名をEmployeeではなく に変更しemployeeます。Java の命名規則に固執します。代わりに Java ユーティリティ クラスを利用する必要があります。たとえばArrayList<Employee>ArrayList動的にサイズ変更する配列を実装します。これにより、ユーザーは内部の現在のサイズを気にすることなく、配列内にできるだけ多くのデータを挿入できarrayますArrayList。ただし、オブジェクトArrayListを保存するために使用する前に、メソッドEmployeeをオーバーライドする必要があります。これは、このメソッドを内部的に使用して、いくつかのメソッドに似たオブジェクトの存在を検出するためです。クラス内のメソッドは次のようになります。equalsEmployeeArrayListequalsEmployee

@Override
public boolean equals(Object anObject) 
{
    if (this == anObject) 
    {
        return true;
    }
    if (anObject instanceof Employee) 
    {
        Employee anotherEmployee = (Employee)anObject;
        if ((this.toString()).equals(anotherEmployee.toString()))
        {
            return true;
        }
        return false;
    }
    return false;
}
@Override
public String toString()//Override it so that it could be easier to compare two objects of Employee using toString()
{
    return empID+","+empName+","+job;
}

ArrayListこれで、次の方法で使用できます。

List<Employee> list = new ArrayList<Employee>();
for(size = 0; size < 2; size++)
    {
        p("Employee "+(size+1));
        p("Please enter employee ID number: ");
        empID = k.nextInt(); k.nextLine();
        p("Please enter your name: ");
        empName = k.nextLine();
        p("Please enter your job role: ");
        job = k.nextLine();

        Employee employee = new Employee();

        employee.setEmpID(empID);
        employee.setEmpName(empName);
        employee.setJob(job);
        list.add(employee);
    }

   for(int i = 0 ;i < list.size() ; i++){
    Employee employee = list.get(i);
    p("Hello employee: "+employee.getEmpName()+" your job role is "+employee.getJob()+ 
            " your log in ID is 0800"+employee.getEmpID());
}
于 2013-03-20T20:52:12.390 に答える