0
class Use {
public static void main(String[] args) throws IOException {
    Use u = new Use();
    BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
    ArrayList<Square> sq = new ArrayList <Square>(); 
    int shapeChoice = 0;
    int customChoice = 0;
    int count = 0;
    String info1;
    boolean boolCase;
    System.out.println("Welcome, this program allows you to create and access    shapes, displaying the area and perimeter of each.");
    while (true){
        shapeChoice = Integer.parseInt(br.readLine());
        if (shapeChoice == 0) break;
        count++;
        sq.add(new Square(count, shapeChoice));
        String info = (sq.get(count-1).toString());
        System.out.println(info);
        if (count > 1) {
            info1 = (sq.get(count - 1).toString());
        System.out.println(info1);
        }
    }
    /*System.out.println("Enter Square Num");
    customChoice = Integer.parseInt(br.readLine());
    String info1 = (sq.get(customChoice - 1).toString());
    System.out.println(info1);*/
    for(int x = sq.size(); x > 0; x--){
        System.out.println(x);
        String info = (sq.get(x-1).toString());
        System.out.println(info);
    }       
}
}

abstract public class Test {
private static int s; //Base top
public Test(){
    s = 1;
}
Test(int s){
    this.s = s;
}
abstract public int findPerimeter();
abstract public int findArea();
public int getS() {
    return s;
}
public void setS(int s){
    this.s = s;
}

}

class Square extends Test{
private static int numSquares = 0;
private int iD;
public Square(int iD){
    super();
    numSquares ++;
}
public Square(int s, int iD){
    super(s);
    numSquares ++;
}
public int getID(){
    return iD;
}
public void setID(int iD){
    this.iD = iD;
}
public int getNumSquares(){
    return numSquares;
}
@Override
public int findArea(){
    return (super.getS()*super.getS());
}
@Override
public int findPerimeter() {
    return (super.getS())*4; 
}
public String toString(){
    return "Area is "+findArea()+" and Perimeter is "+findPerimeter();
}
public void decreaseNum(){
    numSquares --;
}
public int getS(){
    return super.getS();
}

}

私の Test クラスは正方形を作成し、メインを使用して新しい正方形を作成していましたが、 toString() メソッドを使用して正方形に関する情報を出力すると、最後に作成されたオブジェクトの値のみが表示されます。

どうすればそれを修正できますか?

読んでくれてありがとう!

4

2 に答える 2

0

これはおそらく、Test クラスで静的変数を使用して、側になることを意図した非静的変数「s」であると推測しているためです。実際に異なるオブジェクトが返されていることを確認する最善の方法は、Object.hashcode を toString に追加するか、toString メソッドをまったくオーバーライドしないことです。

于 2013-04-24T04:13:44.307 に答える
0
 if (count > 1) {
            info1 = (sq.get(count - 1).toString());
 System.out.println(info1);

この行は、最後に作成された Square のみを出力します。たぶん、配列をループしたいですか?

編集 :

ここでループします

for(int x = sq.size(); x > 0; x--){
        System.out.println(x);
        String info = (sq.get(x-1).toString());
        System.out.println(info);
    }  

しかし、あなたは無限ループにいるので、このコードは決して実行されませんwhile (true)

于 2013-04-24T04:15:36.120 に答える