在Java中创建一个类的对象,声明一个对象数组,但只打印其中一个

时间:2017-10-04 05:17:47

标签: java arrays

我的程序的目标是为学生存储数据(名字,姓氏,ID#)。我试图创建4个阵列。一个数组将保存我添加的每个学生对象(myDB)的组合值。其他3个索引保存每个值(Fname,Lname,ID)的原始位置的索引,并将它们添加到有序数组而不对数组进行排序。我遇到的麻烦是,一旦我向Index Arrays添加了一些内容并打印它们,它就会打印所有ID,无论我调用什么对象。

//class containing methods to list, add, and delete
//Class that declares the main database array that holds all three (ID,First,Last)
import java.io.FileInputStream;
import java.util.*;
public class DataBase 
{
    private String tempID, tempFname, tempLname;

    private DataBaseArray myDB;
    private int nextDBRecord;

    private IndexArray ID; 
    private IndexArray First;
    private IndexArray Last;

    public DataBase()
    {
        nextDBRecord = 0;
        myDB =new DataBaseArray(100);
        ID=(new IndexArray(100));
        First=new IndexArray(100);
        Last=new IndexArray(100);


    }

    void addData(String last, String first, String id) 
    {
        tempLname = new String(last);
        tempFname = new String(first);
        tempID = new String(id);

        //ID.insert(new IndexRecord(tempID, nextDBRecord));
        First.insert(new IndexRecord(tempFname,nextDBRecord));
        Last.insert(new IndexRecord(tempLname,nextDBRecord));

        //Adds to main DB with 
        myDB.getStudentArray()[nextDBRecord]= (new DataBaseRecord(tempLname,tempFname,tempID));
        System.out.println(myDB.getStudentArray()[nextDBRecord]);

        nextDBRecord++;

    }


    void addIt () 
    {
        Scanner keyb = new Scanner(System.in);

        System.out.println("Please enter the ID for new student entry");
        tempID=keyb.next();
        ID.insert(new IndexRecord(tempID, nextDBRecord));

        System.out.println("Please enter the first name of the new student");
        tempFname=keyb.next();
        First.insert(new IndexRecord(tempFname, nextDBRecord));

        System.out.println("Please eneter the last name of the new student");
        tempLname=keyb.next();
        Last.insert(new IndexRecord(tempLname,nextDBRecord));
        //Adds to main DB with 

        myDB.getStudentArray()[nextDBRecord]= (new DataBaseRecord(tempLname,tempFname,tempID));;
        nextDBRecord++; 
    }

    void findIt()
    {

    }

    void list (int type, int order)
    {
        First.printIt(order);
    }



}


//Class that creates the objects to add to Iarray Farray Iarray
//IndexArray is a static array
//Creates a single entry into the IndexArray
//Need a compareTo method that gives the where value of each object
public class IndexRecord 
{
    private String key; //Value
    private int where; //Where it is at in DataBaseArray

    IndexRecord (String value, int position)
    {
        setKey(new String(value));
        where = position;
    }

    public String toString()
    {
        return getKey()+" "+ String.valueOf(where);
    }

    public String getKey() //Getter for key value of the new student that is being added 
    {
        return key;
    }

    public void setKey(String key) //Setter for key value of the new student that is being added 
    {
        this.key = key;
    }

}

//Same as OrderedArray Class
//Add Iterator methods. Instead of printing here, tell DataBase class what DatabaseRecord objects to print
public class IndexArray 
{
    private static IndexRecord[] irArray;
    private int nOfElem; //Should be the same for each array so only 1 counter is needed
    private int maxSize;

    private int theIterator;

    public IndexArray(int size)
    {
        nOfElem = 0;
        maxSize=size;
        irArray = new IndexRecord[size];

    }
//-----------------------------Getters and Setters-------------------------------------
    public int size() //Getter to find num of elements in array that can be called in other class
    { return nOfElem; }

    public IndexRecord[] getIRarray()
    {
        return irArray;
    }
//---------------------Iterator Methods-----------------------------------------------------
    void iteratorToFront()
    {
        theIterator=(nOfElem>0? 0 : -1);
    }

    void iteratorToBack()
    {
        theIterator=(nOfElem>0 ? nOfElem-1 : -1);
    }

    boolean hasNext()
    {
        return (theIterator==nOfElem-1?  false:true );
    }

    boolean hasPrevious()
    {
        return (theIterator==0? false : true);
    }

    public IndexRecord getIterator()
    {
        return(theIterator==-1 ? null :irArray[theIterator]);
    }

    int getNext()
    {
        theIterator=(hasNext()? theIterator+1: -1);
        return(theIterator==-1? null : theIterator);
    }

    int getPrevious()
    {
        theIterator=(hasPrevious()? theIterator-1:-1);
        return (theIterator==-1? null : theIterator);
    }    
//------------------Methods Called In Main---------------------------------------

    public boolean insert(IndexRecord ir) 
    {
        if(maxSize==nOfElem) return false;

        int j;
        for(j=nOfElem-1;j>=0;j--)
        {
            if(irArray[j].getKey().compareToIgnoreCase(ir.getKey())<0)break;
            {       
                irArray[j+1]=irArray[j]; //Pushes all objects down to make room for new one
            }
        }   
        irArray[j+1]=ir;
        nOfElem++;
        return true;
    }

    public int find(String searchKey)
    {
        int lowerBound = 0;
        int upperBound = nOfElem-1;
        int currentRef;

        while(true)
        {
        currentRef = (lowerBound + upperBound) / 2;

        String tempValue = String.valueOf(irArray[currentRef].getKey());

        if(tempValue.compareTo(searchKey) == 0)
            return currentRef;
        else if (lowerBound > upperBound)
            return nOfElem; //returns a pointer to an empty slot
        else
            {
            if(tempValue.compareTo(searchKey) > 0)
                lowerBound = currentRef++;
            else
                upperBound  = currentRef - 1;
            }
        }
    }



    //delete

    public void printIt(int order)
    {
        switch(order)
        {
        case -1: 
            iteratorToBack();

            break;
        case 1: 
            iteratorToFront();
            while(hasNext())
            {
                System.out.println(irArray[getNext()]);
            }
            break;
        default:
        }
    }



}

0 个答案:

没有答案