繁体   English   中英

Java ArrayList不保留元素

[英]Java ArrayList not keeping elements

我编写了一个简单的程序,用户可以在其中进行正方形运算。 我有一个JOptionPane类,为用户提供3个选项:1.制作一个正方形; 2.显示制作的正方形; 0。退出。 我想将所有平方存储在ArrayList中,以便当用户选择2时,它使用format()方法返回所有已制成的平方。 因此,JOptionPane类具有静态的arraylist,但从不保留存储的正方形。 主方法类Launcher调用此JOptionPane类。 但是,当我按2显示所有正方形时,它什么也不返回。 还有一个非常简单的Position类,它用x和y值设置一个检出位置。

班级广场:

package domain;
import java.awt.Color;

public class Square {

    private Color color;
    private int size;
    private Position position;

    public Square(Color color, int size, Position position) {
        this.setColor(color);
        this.setSize(size);
        this.setPosition(position);
    }

    public Color getColor() {
        return color;
    }
    public void setColor(Color color) {
        this.color = color;
    }
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public Position getPosition() {
        return position;
    }
    public void setPosition(Position position) {
        this.position = position;
    }

    public String format() {
        return "Square with size " + this.getSize() + " on " +     this.getPosition().format(); 
    }

}

JOptionPane类:

package ui;

import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JColorChooser;
import javax.swing.JOptionPane;

import domain.Position;
import domain.Square;

public class JPaintMenu {

    public static ArrayList<Square> squares = new ArrayList<Square>();

    public int menu() {
        String choice = JOptionPane.showInputDialog("1. Create square\n2. Show squares\n\n0. Quit\nMake your choice:\n");
        return Integer.parseInt(choice);
    }

    public Square newSquare() {
        Color color = JColorChooser.showDialog(null, "Color of the square?", null);
        String sizeString = JOptionPane.showInputDialog("Size of the square?");
        int size = Integer.parseInt(sizeString);
        String xString = JOptionPane.showInputDialog("X coordinate?");
        int x = Integer.parseInt(xString);
        String yString = JOptionPane.showInputDialog("Y coordinate?");
        int y = Integer.parseInt(yString);

        Position position = new Position(x, y);
        Square square = new Square(color, size, position);
        squares.add(square);
        return square;
    }

    public String format() {
        String result = "";
        for(Square square : squares) {
            result += square.format();
        }
        return result;
    }

}

以及主要的方法类Launcher:

package ui;
import javax.swing.JOptionPane;

public class Launcher {

    public static JPaintMenu menu = new JPaintMenu();

    public static void main(String[] args) {
        int result = menu.menu();
        if(result == 1) {
            menu.newSquare();
        }
        if (result == 2) {
            JOptionPane.showMessageDialog(null, menu.format());
        }
    }   
}

我认为要么(1)您将static持久性混淆,要么(2)您的main方法应在循环中实现。

使用static一个意味着您不将一个对象的状态存储到另一个对象中,而是在相同类型的所有对象上共享。 持久存储意味着您存储对象的状态,以便下次调用程序时可以访问该对象。 在这种情况下,您需要序列化数据。 并将其存储到文件(或网络服务器等)中

另一种可能性是使程序多次查询用户。 喜欢:

int result = -1;
do {
    result = menu.menu();
    if(result == 1) {
        menu.newSquare();
    }
    if (result == 2) {
        JOptionPane.showMessageDialog(null, menu.format());
    }
} while(result == 1 || result == 2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM