Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我有一个用文本文件中的信息填充的arraylist,我想删除一个特定的元素_Java_Arraylist - Fatal编程技术网

Java 我有一个用文本文件中的信息填充的arraylist,我想删除一个特定的元素

Java 我有一个用文本文件中的信息填充的arraylist,我想删除一个特定的元素,java,arraylist,Java,Arraylist,这是我的密码。我创建了一个方法,它搜索arraylist并查看是否有名称匹配。在“removebutton”部分,我调用这个方法。如果有一个名字匹配,那么我会删除这个名字和那个人的生日。我的问题是程序只会删除arraylist中的第一个元素。如果我尝试删除任何其他元素,我的数组不会改变,元素不会被删除 private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {

这是我的密码。我创建了一个方法,它搜索arraylist并查看是否有名称匹配。在“removebutton”部分,我调用这个方法。如果有一个名字匹配,那么我会删除这个名字和那个人的生日。我的问题是程序只会删除arraylist中的第一个元素。如果我尝试删除任何其他元素,我的数组不会改变,元素不会被删除

    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
        //cear array
        players.clear();
        //add user input to array
        String name,birthDay;
        name = nameInput.getText();
        birthDay = birthInput.getText();
        playerInfo player;
        player = new playerInfo(name,birthDay);
        players.add(player);
        //add array to next available line in file
        arrayToFile();
    }                                         

    private void exitButonActionPerformed(java.awt.event.ActionEvent evt) {                                          
        //exits program
        System.exit(0);
    }                                         

    private void listButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
        outputField.setText("");
        //clear array
        players.clear();

        //add file elements to array
        fileToArray();

        //print array
        outputField.setText(printArray(players));
    }                                          

    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        //clear array
        players.clear();
        //add file elements to array
        fileToArray();
        System.out.println(printArray(players));
        //search array and delete player
        String name = nameInput.getText();
        String outputMessage;
        int nameFound = -1;
        nameFound = searchArray(players,name);


        if (nameFound == -1)    {
            outputMessage = "Sorry that name is not in the records.";
        } else {
            players.remove(nameFound);
            outputMessage = name + " has been removed from the records";
        }
        outputField.setText(outputMessage);

        //add updated array to file
        overwriteFile();
    }                                            


    class playerInfo    {
        String name,birthDay;

        playerInfo(String _name,String _birthDay)   {
            name = _name;
            birthDay = _birthDay;
        }
    }

    public void fileToArray() {
        //tempLine will be equal to the information on each line in the file
        String tempLine,name,birthDay;

        //makes sure you don't read past the end of the file
        try {
            //locates the file and opens it to read
            BufferedReader br = new BufferedReader(new FileReader("players.txt"));

            //reads info from file, line-by-line until it sees "null" or "end of file"
            while ((tempLine = br.readLine()) !=null)   {
                //finds the reference numbers of each book
                name = tempLine;
                //finds title name
                tempLine = br.readLine();
                birthDay = tempLine;
                //adds reference number and title of each book into the array
                playerInfo playersAdded;
                playersAdded = new playerInfo(name,birthDay);
                players.add(playersAdded);
            }
            br.close();
        } catch (IOException e) {  
        }
    }

    public void arrayToFile()    {
        Writer output;
        try {
            output = new BufferedWriter(new FileWriter("players.txt",true));
            output.append(printArray(players));
            output.close();
        } catch (IOException ex) {
            Logger.getLogger(projectAgainUI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void overwriteFile()    {
        Writer output;
        try {
            output = new BufferedWriter(new FileWriter("players.txt"));
            output.write(printArray(players));
            output.close();
        } catch (IOException ex) {
            Logger.getLogger(projectAgainUI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static String printArray(ArrayList <playerInfo> players) {
        String outputMessage = "";
        for (int i=0;i<players.size();i++)  {
            outputMessage += players.get(i).name + "\n" + players.get(i).birthDay + "\n";
        }
        return outputMessage;
    }

    public static int searchArray(ArrayList <playerInfo> players,String nameSearch)  {
        int nameFound = -1;
        String name;
        for (int i=0;i<players.size();i++)  {
            name = players.get(i).name;
            if (nameSearch.equals(name))    {
                nameFound = i;
                return nameFound;
            } else {
                nameFound = -1;
                return nameFound;
            }

        }
        return nameFound;
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton addButton;
    private javax.swing.JLabel ageLabel;
    private javax.swing.JTextField birthInput;
    private javax.swing.JButton exitButon;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton listButton;
    private javax.swing.JTextField nameInput;
    private javax.swing.JLabel nameLabel;
    private javax.swing.JTextArea outputField;
    private javax.swing.JButton removeButton;
    // End of variables declaration                   
}
private void addButtonActionPerformed(java.awt.event.ActionEvent evt){
//cear阵列
玩家。清除();
//将用户输入添加到数组
字符串名称、生日;
name=nameInput.getText();
生日=生日输入。getText();
playerInfo播放器;
player=新玩家信息(姓名、生日);
players.add(player);
//将数组添加到文件中的下一个可用行
arrayToFile();
}                                         
private void exitButonActionPerformed(java.awt.event.ActionEvent evt){
//退出程序
系统出口(0);
}                                         
private void listButtonActionPerformed(java.awt.event.ActionEvent evt){
outputField.setText(“”);
//清晰阵列
玩家。清除();
//向数组中添加文件元素
fileToArray();
//打印阵列
setText(printary(players));
}                                          
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt){
//清晰阵列
玩家。清除();
//向数组中添加文件元素
fileToArray();
System.out.println(printary(players));
//搜索数组并删除播放器
String name=nameInput.getText();
字符串输出消息;
int nameFound=-1;
nameFound=searchArray(玩家,姓名);
如果(nameFound==-1){
outputMessage=“对不起,该名称不在记录中。”;
}否则{
玩家。移除(nameFound);
outputMessage=name+“已从记录中删除”;
}
outputField.setText(outputMessage);
//将更新的数组添加到文件
覆盖文件();
}                                            
班级播放机信息{
字符串名称、生日;
playerInfo(字符串-名称,字符串-生日){
名称=_名称;
生日=你的生日;
}
}
public void fileToArray(){
//tempLine将等于文件中每一行的信息
字符串模板、名称、生日;
//确保读取的内容不会超过文件的结尾
试一试{
//找到文件并打开以进行读取
BufferedReader br=新的BufferedReader(新的文件阅读器(“players.txt”);
//逐行读取文件中的信息,直到它看到“null”或“文件结尾”
而((tempLine=br.readLine())!=null){
//查找每本书的参考号
名称=模板行;
//查找标题名
tempLine=br.readLine();
生日=tempLine;
//将每本书的参考编号和标题添加到数组中
playerInfo players添加;
playersAdded=新的playerInfo(姓名、生日);
players.add(playersAdded);
}
br.close();
}捕获(IOE){
}
}
公共无效arrayToFile(){
写入输出;
试一试{
输出=新的BufferedWriter(新的FileWriter(“players.txt”,true));
append(printary(players));
output.close();
}捕获(IOEX异常){
Logger.getLogger(projectAgainUI.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共无效覆盖文件(){
写入输出;
试一试{
输出=新的BufferedWriter(新的FileWriter(“players.txt”);
output.write(printary(players));
output.close();
}捕获(IOEX异常){
Logger.getLogger(projectAgainUI.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共静态字符串打印数组(ArrayList播放器){
字符串outputMessage=“”;

对于(int i=0;i找到要删除的元素的索引,并使用它。ArrayList.remove(int index)方法获取要删除的索引。希望有帮助!:)

将您的
搜索数组
方法更改为:

public static int searchArray(ArrayList <playerInfo> players,String nameSearch)  {
  int nameFound = -1;        
  for (int i=0;i<players.size();i++)  {
    String name = players.get(i).name;
    if (nameSearch.equalsIgnoreCase(name))    {
      nameFound = i;
      break;
    } 
  }
  return nameFound;
}
publicstaticintsearcharray(arraylistplayers,stringnamesearch){
int nameFound=-1;

对于(int i=0;i)您要求修改ArrayList,但执行此操作的代码隐藏在数百行用户界面代码中。请编辑您的问题并删除所有与您的问题无关的代码。我在代码中没有这样做吗?在我的searchArray()方法中,我相信我找到了索引,然后在“卸下按钮"第一节删除了那个特定索引中的元素。@Stephen,对不起。是的,看起来像是你这么做的。但是,从你的代码来看,我会修复你的searchArray方法。逻辑不会返回正确的答案。我会删除循环中的返回值和else语句。所以只要有一个if语句将int设置为I元素的ndex。然后在底部返回。非常感谢,程序现在运行正常。@Stephen真棒!很高兴我能帮上忙:)我希望您能理解上一个语句中的逻辑错误发生在哪里。为了便于将来参考,请将return语句保留为方法中的最后一项,以防止您的方法返回您的答案