将数组作为参数传递出错 - Java

时间:2016-03-15 18:26:01

标签: java arrays parameters

我正在修改的程序应该使用绘图面板随机移动一个正方形,从中心开始向左或向右移动并使用数组计算它移动到的位置,同时正方形停留在屏幕上(面板是400 x 400,正方形是10 x 10,所以它可以移动到的位置只有40个)当正方形离开屏幕后,我必须打印一个直方图,显示正方形移动到的数量。 index(即如果正方形从x坐标200移动到190,则索引19将得到一个计数)这是我的代码:

import java.awt.*;
import java.util.*;

public class RandomWalkCountSteps {
// DrawingPanel will have dimensions HEIGHT by WIDTH
public static final int HEIGHT = 100;
public static final int WIDTH = 400;

public static final int CENTER_X = WIDTH / 2;
public static final int CENTER_Y = HEIGHT / 2;

public static final int CURSOR_DIM = 10;

public static final int SLEEP_TIME = 25; // milliseconds

public static void main( String[] args ) {
    DrawingPanel panel = new DrawingPanel( WIDTH, HEIGHT );

    Random rand = new Random();

    walkRandomly( panel, rand );


}

public static void walkRandomly( DrawingPanel panel, Random rand ) {
    Graphics g = panel.getGraphics();
    int[] positionCounts = new int[ WIDTH / CURSOR_DIM ];
    // start in center of panel
    int x = CENTER_X;
    int y = CENTER_Y;

    // Draw the cursor in BLACK
        g.fillRect(x, y, CURSOR_DIM, CURSOR_DIM);

    // randomly step left, right, up, or down
    while ( onScreen( x, y ) ) {

        panel.sleep( SLEEP_TIME );
        // Show a shadow version of the cursor
        g.setColor(Color.GRAY);
        g.fillRect(x, y, CURSOR_DIM, CURSOR_DIM);

        if ( rand.nextBoolean() ) { // go left
                x -= CURSOR_DIM;
        }
        else {  // go right
            x += CURSOR_DIM;
        }
        positionCounts[ x / CURSOR_DIM ]++;
        histogram(positionCounts, x, y);
        // draw the cursor at its new location
        g.setColor(Color.BLACK);
        g.fillRect(x, y, CURSOR_DIM, CURSOR_DIM);
    }
}

public static boolean onScreen( int x, int y ) {
    return 0 <= x && x < WIDTH
        && 0 <= y && y < HEIGHT;
}

   public static void histogram(int[] positionCounts, int x, int y) {
      if (onScreen(x, y) == false) {
         for (int i = 0; i < WIDTH / CURSOR_DIM; i++) {
            System.out.print(i + ": ");
            for (int j = 1; j <= positionCounts[i]; j++) {
               System.out.print("*");
            }
            System.out.println();
         }
      }
   }
}

我的问题是我无法找到一个初始化数组的好地方,因此每次我将x坐标传递给直方图方法时它都不会重新初始化。现在我认为我在正确的位置使用了它,我在方法walkRandomly&#34中的两个直方图调用中得到此错误消息;错误:类RandomWalkCountSteps中的方法直方图不能应用于给定类型;&#34;我对java和编程一般都是新手,因此我可能缺少关于数组作为参数的东西。提前谢谢。

1 个答案:

答案 0 :(得分:2)

histogram有两个参数,positionCounts类型int[]x类型int。在walkRandomly中,您拨打histogram两次:一次使用类型为positionCounts的参数int[],一次使用类型为x的参数int。这就是编译器抱怨方法“无法应用于给定类型”的原因:方法histogram(int[], int)无法应用于(调用)给定类型,即histogram(int[])和{{1} }。

我不确定您要对此代码执行什么操作,但我猜您要删除第一个调用并将第二个调用(在while循环内)更改为histogram(int)

(您已编辑过您的代码,因此我的回答没有多大意义。)