Java 循环将相同的对象添加到我的arrayList的所有元素中
我试图让这个循环将文件中的每一行放在一个对象中,然后将每个对象存储在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()
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。你能分享多一点代码吗?什么