Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Object_Arraylist - Fatal编程技术网

Java 循环将相同的对象添加到我的arrayList的所有元素中

Java 循环将相同的对象添加到我的arrayList的所有元素中,java,loops,object,arraylist,Java,Loops,Object,Arraylist,我试图让这个循环将文件中的每一行放在一个对象中,然后将每个对象存储在arrayList中。出于某种原因,循环正确地存储了输入的前三行,但当它到达最后一行时,数组列表中的每个项都成为最后一行中的值。我在下面粘贴了代码的相关部分,有什么建议吗 while (lineIteration != null) { //store polynomial objects from Polynomial class in an array list. ta.setText(ta.getText()

我试图让这个循环将文件中的每一行放在一个对象中,然后将每个对象存储在arrayList中。出于某种原因,循环正确地存储了输入的前三行,但当它到达最后一行时,数组列表中的每个项都成为最后一行中的值。我在下面粘贴了代码的相关部分,有什么建议吗

while (lineIteration != null) {
   //store polynomial objects from Polynomial class in an array list.
    ta.setText(ta.getText() + lineIteration + "\n"); //prints the input to 
                                                     // the text area
    Polynomial objLine = new Polynomial(lineIteration); //store a line in the 
                                                        // objLine object
    System.out.println(objLine);
    polyArrayList.add(objLine); //add the object to the arrayList
    lineIteration = inBR.readLine(); //read the next lineIteration.
    }
完整代码如下。 /*****类Main.java*****/

import java.util.Iterator;

public class Polynomial implements Iterable, Comparable{

    private static String poly;

    public Polynomial (String x){ // constructor that accepts the input and stores it in a polynomial.
        poly = x;
        return;
    }

    @Override
    public String toString() {
        return poly;
    }

    private static class Node<String>{

        private String data;
        private Node<String> next;
        public Node (String data, Node<String> next){
            this.data = data;
            this.next = next;
        }
    }
    @Override
    public Iterator iterator() {
        return null;
    }

    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

/****Polynomial.java****/

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.*;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.logging.Logger;

public class Main extends JFrame implements ActionListener {
    JMenuBar mb;
    JMenu file;
    JMenuItem open;
    JTextArea ta;
    static ArrayList<Polynomial> polyArrayList = new ArrayList<>(); //ArrayList of objects Polynomial
    Main(){
        open = new JMenuItem("Open File");
        open.addActionListener(this);
        file = new JMenu("File");
        file.add(open);
        mb = new JMenuBar();
        mb.setBounds(0,0,800,20);
        mb.add(file);
        ta = new JTextArea(800,800);
        ta.setBounds(0,20,800,800);
        add(mb);
        add(ta);
    }
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == open) {
            JFileChooser fc = new JFileChooser();
            int i = fc.showOpenDialog(this);
            if (i == JFileChooser.APPROVE_OPTION) {
                File selectedFile = fc.getSelectedFile();
                String filepath = selectedFile.getPath();
                try {
                    BufferedReader inBR;
                    inBR = new BufferedReader(new FileReader(selectedFile));
                    String lineIteration = inBR.readLine();
                    while (lineIteration != null) {
                        //store polynomial objects from Polynomial class in an array list.
                        ta.setText(ta.getText() + lineIteration + "\n"); //prints the input to the text area
                        Polynomial objLine = new Polynomial(lineIteration); //store a line in the objLine object
                        System.out.println(objLine);
                        polyArrayList.add(objLine); //add the object to the arrayList
                        lineIteration = inBR.readLine(); //read the next lineIteration.
                    }
                } catch (FileNotFoundException fileNotFoundException) {
                    System.out.println("File not Found");
                } catch (IOException ioException) {
                    System.out.println("IO Exception");
                }
                System.out.println(polyArrayList.get(0));
                System.out.println(polyArrayList.get(1));
                System.out.println(polyArrayList.get(2));
                System.out.println(polyArrayList.get(3));
            }
        }
    }
    public static void main(String[] args){
        System.out.println("Start");

        Main om = new Main();
        om.setSize(500,500);
        om.setLayout(null);
        om.setVisible(true);
        om.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }


}
import java.util.Iterator;
公共类多项式实现可比较、可比较{
私有静态字符串poly;
公共多项式(字符串x){//接受输入并将其存储在多项式中的构造函数。
poly=x;
返回;
}
@凌驾
公共字符串toString(){
返回多边形;
}
私有静态类节点{
私有字符串数据;
私有节点下一步;
公共节点(字符串数据,节点下一步){
这个数据=数据;
this.next=next;
}
}
@凌驾
公共迭代器迭代器(){
返回null;
}
@凌驾
公共整数比较对象(对象o){
返回0;
}
}
/****多项式.java****/
导入javax.swing.*;
导入java.awt.event.ActionEvent;
导入java.io.*;
导入java.awt.event.ActionListener;
导入java.lang.reflect.Array;
导入java.util.ArrayList;
导入java.util.logging.Logger;
公共类Main扩展JFrame实现ActionListener{
JMenuBar-mb;
JMenu文件;
项目开放;
jtextta区;
静态ArrayList polyArrayList=新ArrayList();//对象的ArrayList多项式
Main(){
打开=新项目(“打开文件”);
open.addActionListener(this);
文件=新JMenu(“文件”);
文件。添加(打开);
mb=新的JMenuBar();
mb.立根(0,0800,20);
添加(文件);
ta=新的JTextArea(800800);
ta.立根(0,20800800);
增加(mb);
添加(ta);
}
已执行的公共无效操作(操作事件e){
如果(例如getSource()==打开){
JFileChooser fc=新的JFileChooser();
int i=fc.showOpenDialog(此);
if(i==JFileChooser.APPROVE\u选项){
File selectedFile=fc.getSelectedFile();
String filepath=selectedFile.getPath();
试一试{
缓冲读取器;
inBR=新的BufferedReader(新文件读取器(selectedFile));
字符串lineIteration=inBR.readLine();
while(lineIteration!=null){
//将多项式类中的多项式对象存储在数组列表中。
ta.setText(ta.getText()+lineIteration+“\n”);//将输入打印到文本区域
多项式objLine=新多项式(lineIteration);//在objLine对象中存储一行
系统输出打印LN(对象行);
添加(objLine);//将对象添加到arrayList
lineIteration=inBR.readLine();//读取下一个lineIteration。
}
}捕获(FileNotFoundException FileNotFoundException){
System.out.println(“未找到文件”);
}捕获(IOException IOException){
System.out.println(“IO异常”);
}
System.out.println(polyArrayList.get(0));
System.out.println(polyArrayList.get(1));
System.out.println(polyArrayList.get(2));
System.out.println(polyArrayList.get(3));
}
}
}
公共静态void main(字符串[]args){
系统输出打印项次(“开始”);
主om=新的主om();
om.setSize(500500);
om.setLayout(空);
om.setVisible(true);
om.setDefaultCloseOperation(关闭时退出);
}
}

poly变量具有
static
修饰符,这意味着它在该类的所有实例之间共享。当变量在
多项式
对象的另一个实例中设置为新值时,该值也将反映在所有其他
多项式
对象中


由于文件的最后一行是变量上最近设置的值,因此它将是所有
多项式
对象上设置的值。删除变量上的
static
就足够了。

poly变量具有
static
修饰符,这意味着它在该类的所有实例之间共享。当变量在
多项式
对象的另一个实例中设置为新值时,该值也将反映在所有其他
多项式
对象中


由于文件的最后一行是变量上最近设置的值,因此它将是所有
多项式
对象上设置的值。删除变量上的
static
就足够了。

您必须删除
多项式中的
poly
中的static:

public class Polynomial implements Iterable, Comparable {

  private String poly;

  public Polynomial(String poly) { // constructor that accepts the input and stores it in a polynomial.
    this.poly = poly;
}

static
关键字意味着所有实例将在它们之间共享完全相同的值。尽管您没有看到,但在每次迭代中,您都将所有实例中的
poly
值设置为相同的值。您可以进一步查看
静态
关键字

您必须从
多项式中的
多边形中删除静电:

public class Polynomial implements Iterable, Comparable {

  private String poly;

  public Polynomial(String poly) { // constructor that accepts the input and stores it in a polynomial.
    this.poly = poly;
}

static
关键字意味着所有实例将在它们之间共享完全相同的值。尽管您没有看到,但在每次迭代中,您都将所有实例中的
poly
值设置为相同的值。您可以进一步查看
静态
关键字

你能分享更多的代码吗?什么是
ta
?或者
lineIteration
或者如何实例化
polyArrayList
?我添加了完整的代码。请原谅,这是一个WIP。你能分享多一点代码吗?什么