Java 处理3.x不识别random()函数

Java 处理3.x不识别random()函数,java,random,processing,draw,Java,Random,Processing,Draw,我试图在加工过程中创建一个基本的“树”形。我有一个初始构造函数,它接受我的参数并在后台的固定位置绘制它们,但我还有一个二级构造函数,它应该分配我指定的随机值,以便每次绘制时树都位于不同的位置。但是,我在处理过程中遇到了一个问题,它说函数random(int)不存在,我似乎找不到解决这个问题的方法 我意识到这是一种天真的图形处理方法,但我只是想让我的脚沾湿处理 My Tree.java类: import processing.core.PApplet; import java.util.Rando

我试图在加工过程中创建一个基本的“树”形。我有一个初始构造函数,它接受我的参数并在后台的固定位置绘制它们,但我还有一个二级构造函数,它应该分配我指定的随机值,以便每次绘制时树都位于不同的位置。但是,我在处理过程中遇到了一个问题,它说
函数random(int)不存在
,我似乎找不到解决这个问题的方法

我意识到这是一种天真的图形处理方法,但我只是想让我的脚沾湿处理

My Tree.java类:

import processing.core.PApplet;
import java.util.Random;

public class Tree{

    // Instance variables
    private int centerX, centerY;
    private float scale;
    private int trunkR, trunkG, trunkB, leavesR, leavesG, leavesB;
    private static PApplet sketch;

    public Tree(int theCenterX, int theCenterY, float theScale,
                int theTrunkR, int theTrunkG, int theTrunkB,
                int theLeavesR, int theLeavesG, int theLeavesB)
    {
        centerX = theCenterX;
        centerY = theCenterY;
        scale = theScale;
        trunkR = theTrunkR;
        trunkG = theTrunkG;
        trunkB = theTrunkB;
        leavesR = theLeavesR;
        leavesG = theLeavesG;
        leavesB = theLeavesB;
    }

    public Tree(){
        centerX = random(960.0);
        centerY = random(700.0);
        scale = random(2.0);
        trunkR = random(255.0);
        trunkG = random(255.0);
        trunkB = random(255.0);
        leavesR = random(255.0);
        leavesG = random(255.0);
        leavesB = random(255.0);
    }

    public void draw(){
        sketch.noStroke();
        sketch.fill(trunkR, trunkG, trunkB);
        sketch.rect(centerX, centerY, 80*scale, 300*scale);

        sketch.fill(leavesR, leavesG, leavesB);
        sketch.triangle(centerX - 40*scale, centerY + 40*scale, centerX + 40*scale, centerY - 80*scale, centerX + 120*scale, centerY + 40*scale);
    }

    public static void setup(PApplet theSketch){
        sketch = theSketch;
    }
}
下面是我的主要类,它调用tree类来创建对象:

Tree tree, tree2, tree3, tree4, randomTree;

void settings(){
    size(1000, 1000);
}

void setup(){
    setupGraphicClasses();

    tree = new Tree(width/2 - 400, height/2 - 100, 1.0, 67, 12, 12, 27, 129, 28);
    tree2 = new Tree(width/2 + 200, height/2 + 150, 1.5, 67, 12, 12, 27, 129, 28);
    tree3 = new Tree(width/2, height/2 - 80, 0.5, 67, 12, 12, 27, 129, 28);
    tree4 = new Tree(width/2 + 320, height/2 - 170, 0.9, 67, 12, 12, 27, 129, 28);
    randomTree = new Tree();
}

void draw() {
    background(127);

    noStroke();
    fill(16, 85, 17);
    rect(0, 500, 1000, 500);
    fill(70, 195, 255);
    rect(0, 0, 1000, 500);
    tree.draw();
    tree4.draw();
    tree2.draw();
    tree3.draw();
    randomTree.draw();
}

public void setupGraphicClasses() {
    Tree.setup(this);
}

为什么我会得到这个错误?我尝试将实例变量强制转换为
float
,因为
random()
函数接受这些参数作为参数,但随后我收到了不同的错误消息。

您是从
类调用
random()
函数,而不是从sketch类调用。这是行不通的,因为只有sketch类知道
random()
函数

解决此问题的一种方法是将草图的实例传递到
类中,然后使用该实例获得随机函数。大概是这样的:

void setup(){
   Tree tree = new Tree(this);
}

class Tree{

   public Tree(PApplet sketch){
      float x = sketch.random(100);
   }
}

如果您所需要的只是
random()
函数,那么这可能有些过分。您只需使用
Math.random()
函数即可。当然,这会将您锁定为Java部署,这可能会有过度的限制。

@Jodo1992抱歉,这是一个输入错误。请参阅我编辑的答案,特别是如何使用
sketch
变量调用
random()
函数。