Java:匹配数组元素并删除

时间:2017-09-16 01:23:01

标签: java arrays

我在这个程序中遇到了一些我需要做的事情。下面,我正在阅读两个文件,p1artists是原始文件,我必须将每行读入一个数组并创建一个新的Artist对象。 p1artists中的每一行都以艺术家ID(例如1-60)和他们的名字开头。第二个文件p2changes有一个文件,用于指定要删除的Artist或要添加的新艺术家。要添加的艺术家标有“A”,后跟他们的名字。要删除的艺术家后面跟着“D”,只有艺术家ID。

我注意到的第一个问题是,当我在程序结束时打印artistList数组时,它只显示数组中的最后一个元素/艺术家。我希望能够打印整个列表。我怎么能这样做?

我的第二个问题是在第二个try-catch中,我尝试删除该艺术家。我无法获得if-else语句。任何帮助或提示将不胜感激

我的计划到目前为止

public static void main(String[] args) {
    //initialize total artists and id
    int totalArtist = 0;
    int newID = 0;

    //create an array for artists
    artist[] artistList = new artist[1 + totalArtist];

    //open the original file
    try {
        File file = new File("p1artists.txt");
        Scanner input = new Scanner(file);
        while (input.hasNextLine()) {
            int id = input.nextInt();
            String name = input.next();

            //create a new artist and put it in the array
            for (int i = 0; i < artistList.length; i++) {
                artistList[i] = new artist(id, name);
                totalArtist++;

            }
            //increment to a newID
            newID = id + 1;

        }
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
    }



    //open the file to be added/remove from original
    try {
        File file = new File("p2changes.txt");
        Scanner input = new Scanner(file).useDelimiter("\t|\r\n");
        while (input.hasNext()) {
            //read the first element of the line and check if it is A or D
            if (input.next().equals("A")) {
                String name = input.next();

                //add a new artist to the arraylist and increment newID
                for (int i = 0; i < artistList.length; i++) {
                    artistList[i] = new artist(newID, name);
                    newID++;
                    totalArtist++;

                }
            } else {
                int id = input.nextInt();
                System.out.println(id);
                if (input.hasNext()) {
                   //go through array and find artist to be deleted
                    for (int i = 0; i < artistList.length; i++) {
                        if(artistList[i].getID() == id)
                            //remove artist from array list

                            //decrease total artists
                            totalArtist--;
                        else
                            System.out.println("Not working");

                    }
                }
            }

        }
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

片段p1artist看起来像

1   Acconci
2   Ames
3   Aserty
4   Baron

p2changes看起来像

的片段
A   Reed
A   Rissman
D   3
A   Rogers

输出结果如何

1  Acconci
2  Ames
4  Baron
5  Reed
6  Rissman
7  Rogers

1 个答案:

答案 0 :(得分:0)

//initialize total artists and id
int totalArtist = 0;
int newID = 0;

//create an array for artists
artist[] artistList = new artist[1 + totalArtist];

我认为你的数组大小可能有问题。虽然在添加或删除艺术家时你在for循环中使用了totalArtist ++或 - ,但是艺术家列表阵列的大小设置为1,并且会在程序执行时根据更新的totalArtist编号进行更改。

您对ArrayIndexOutOfBound有任何错误吗?

另外我想你知道这个但是如果你想打印整个数组只是为了遍历每个元素而println()每个元素。