我正在修改的程序应该使用绘图面板随机移动一个正方形,从中心开始向左或向右移动并使用数组计算它移动到的位置,同时正方形停留在屏幕上(面板是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和编程一般都是新手,因此我可能缺少关于数组作为参数的东西。提前谢谢。
答案 0 :(得分:2)
histogram
有两个参数,positionCounts
类型int[]
和x
类型int
。在walkRandomly
中,您拨打histogram
两次:一次使用类型为positionCounts
的参数int[]
,一次使用类型为x
的参数int
。这就是编译器抱怨方法“无法应用于给定类型”的原因:方法histogram(int[], int)
无法应用于(调用)给定类型,即histogram(int[])
和{{1} }。
我不确定您要对此代码执行什么操作,但我猜您要删除第一个调用并将第二个调用(在while循环内)更改为histogram(int)
。
(您已编辑过您的代码,因此我的回答没有多大意义。)