1. ホーム
  2. java

[解決済み] コンパイル不能なソースコード - Erroneous tree type エラーと cannot find symbol エラー

2022-02-11 11:47:12

質問

ソースコードがコンパイルできません - ツリータイプに誤りがあります。 find symbol" エラー 保存時にコンパイルをオフにしたところ、cannot find symbol と表示されるようになりました。壊れていると思われる箇所は、AsteroidFields generateメソッドでAsteroid()を初期化しているところなので、初期化が間違っているような気がするのですが、原因がつかめません。

package asteroidfield;
import java.util.TreeSet;
import blobzx.BlobGUI;
import blobzx.SandBox;
import blobzx.SandBoxMode;



public class AsteroidField implements BlobGUI {

    SandBox ast;

    public static void main (String [] Args){
        new AsteroidField();       
    }

    public AsteroidField (){
        ast = new SandBox();

        ast.setSandBoxMode(SandBoxMode.FLOW);   
        ast.setFrameRate(15);
        ast.init(this);

    }

    @Override
    public void generate() {
       // This is the line that is breaking the code.   
         Asteroid asteroid = new Asteroid();

    }

}








    package AsteroidField;

    import blobzx.BlobUtils;
    import blobzx.PolyBlob;
    import java.awt.Point;


    import java.util.Random;


    public class Asteroid extends PolyBlob{

    // private static Random random = new Random();

    public Asteroid(int velX, int velY, double rot) {

       super(-100, -100, rot);

       setDelta(velX, velY);

       Random sides = new Random();
       Random dist = new Random();
       int si = sides.nextInt(9 - 5 + 1) + 5;

       int di =  dist.nextInt(15 - 5 + 1) + 5;

       double region = (2 * Math.PI) / si;                 
       double []angle = new double [si];

       int [] xInt = new int[si];
       int [] yInt = new int[si];
       double [] x = new double [si];
       double [] y = new double [si];
       System.out.print("m");



       for(int i = 0; i < si; i++){


        angle[i] = (i*region)+(Math.random()*region);        
        Point cord = BlobUtils.rotatePoint(di, angle[i]);

        x[i] = cord.getX();
        y[i] = cord.getY();
       }
       for (int i = 0; i > x.length; i ++){
        xInt[i] = (int) x[i];
        yInt[i] = (int) y[i];
       }


       setPolygon(xInt, yInt);


       }
      }

解決方法は?

2つの問題がありますね。

1) なぜなら、あなたはこう書いているからです。

Asteroid asteroid = new Asteroid();

しかし、Asteroid クラスはデフォルトのコンストラクタを持っていません (少なくとも、あなたのコードでは見当たりません)。

public Asteroid(int velX, int velY, double rot) {

2) あるいは、同じパッケージを使っておらず、AsteroidFieldでimportを使用していないためかもしれません。

package asteroidfield;
...
package AsteroidField;

1つのパッケージにするか、AsteroidFieldの中にimport AsteroidField.Asteroid;を追加するか、どちらかにした方が良いと思います。