私は既にJavaで継承のプログラムを書いています。 BoxとLineはShapeのサブクラスで、draw()はShape.in InherPaintクラスの関数です。私はmenu()とdisplay()関数も書きました。ラインを追加したい場合や、ボックスを追加する場合は、結果は問題ありませんが、ラインを追加した後、その追加ボックスの後に結果が間違っている場合は、私は、問題は、私の間違った形状配列の定義と、私がindexShapeBoxとindexShapeLineでそれを使用した方法であると思います。Javaでの継承の練習
package inherpaint;
import java.util.Scanner;
public class InherPaint {
Scanner key = new Scanner(System.in);
Shape[] listShape = new Shape[80];
int indexShapeBox = 0;
int indexShapeLine = 0;
public static void main(String[] args) {
InherPaint p = new InherPaint();
p.menu();
}
void display() {
System.out.println(" *** Paint System ***");
System.out.println("1.Add box");
System.out.println("2.Add line");
System.out.println("3.Show all");
System.out.println("4.Erase all");
System.out.println("5.Exit");
}
void menu() {
int option = 0;
while (option != 5) {
display();
option = key.nextInt();
switch (option) {
case 1:
System.out.println(" Please enter a nomber for sizeX : ");
int X = key.nextInt();
System.out.println(" Please enter a nomber for sizeY : ");
int Y = key.nextInt();
Box b = new Box(X, Y);
listShape[indexShapeBox] = b; // problem must be here !
indexShapeBox++;
break;
case 2:
System.out.println(" Please enter a nomber for sizeZ : ");
int Z = key.nextInt();
Line l = new Line(Z);
listShape[indexShapeLine] = l; // problem must be here !
indexShapeLine++;
break;
case 3:
for (int i = 0; i < indexShapeBox; i++) {
listShape[i].draw();
}
for (int i = 0; i < indexShapeLine; i++) {
listShape[i].draw();
}
break;
case 4:
indexShapeBox = 0;
indexShapeLine = 0;
break;
case 5:
System.out.println("Exit!");
break;
default:
System.out.println("Error");
}
}
}
}
、これはShapeクラスである:私のコードはここにある
package inherpaint;
public abstract class Shape {
int sizeX,sizeY,sizeZ;
public abstract void draw();
}
、これはBoxクラスである:
package inherpaint;
public class Box extends Shape {
public Box(int sizeX, int sizeY) {
this.sizeX = sizeX;
this.sizeY = sizeY;
}
@Override
public void draw() {
for (int i = 0; i < sizeX; i++) {
for (int j = 0; j < sizeY; j++) {
System.out.print("-");
}
System.out.println();
}
}
}
、これはラインのクラスです:
package inherpaint;
public class Line extends Shape {
public Line(int sizeZ) {
this.sizeZ = sizeZ;
}
@Override
public void draw() {
for (int j = 0; j < sizeZ; j++) {
System.out.print("-");
}
}
}
誰もが考えていますか?
おかげではなく、これらの変更と、それは私がボックスを追加呼び出す場合でも、正しい答えを示していないと別々に行を追加してください! 。 @eran – MarAnd
@ M.ds単一のインデックス変数に切り替えましたか? 1つのボックスと1つの行を追加すると、どのような出力が得られますか? – Eran
はい、あなたが言ったように私はやった。 1行追加するためにsizeZに2を入力しました。出力は次のようになりました:---- @eran – MarAnd