Java 将开关重写为数组

Java 将开关重写为数组,java,arrays,Java,Arrays,您好,我已经用switch语句创建了一个骰子,以显示骰子的正面,现在我正计划将其重写为一个数组,但我没有;我不知道这应该是什么样子。。(我不熟悉Java,只是为了学习) 有人能给我举个小例子看看它是什么样子吗 下面是包含switch语句的类: package h05Dobbelsteen; import java.awt.*; import javax.swing.JPanel; public class DobbelSteen extends JPanel { private fina

您好,我已经用switch语句创建了一个骰子,以显示骰子的正面,现在我正计划将其重写为一个数组,但我没有;我不知道这应该是什么样子。。(我不熟悉Java,只是为了学习) 有人能给我举个小例子看看它是什么样子吗

下面是包含switch语句的类:

package h05Dobbelsteen;

import java.awt.*;

import javax.swing.JPanel;

public class DobbelSteen extends JPanel {

private final static int SPOT_DIAMETER = 40; // diameter dobbelsteen rondjes
private int faceValue; // getoonde waarde op scherm

public DobbelSteen() {

}

/*
 * roll de dobbelsteen
 */
public int roll() {

    int val = (int) (6*Math.random() + 1); // bepaal getal tussen 1 - 6
    setValue(val);
    System.out.println(val);
    return val;

}

/*
 * set de waarde van de roll
 */
public void setValue(int spots) {
    faceValue = spots;
    repaint();
}

/*
 * get de waarde van de roll
 */
public int getValue() {
    return faceValue;
}

/*
 * teken de view van de dobbelsteen
 */
public void paintComponent(Graphics g) {

    int w = getWidth();  // Get height and width
    int h = getHeight();

    // Graphics naar 2d
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

    //... Paint background
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, w, h);
    g2.setColor(Color.BLACK);

    g2.drawRect(0, 0, w-1, h-1);  // Draw border

    switch (faceValue) {
        case 1:
            drawSpot(g2, w/2, h/2);
            break;
        case 3:
            drawSpot(g2, w/2, h/2);

        case 2:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            break;
        case 5:
            drawSpot(g2, w/2, h/2);
        case 4:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            break;
        case 6:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            drawSpot(g2, w/4, h/2);
            drawSpot(g2, 3*w/4, h/2);
            break;
    }
}

/*
 * Teken de spots
 */
private void drawSpot(Graphics2D g2, int x, int y) {
    g2.fillOval(x-SPOT_DIAMETER/2, y-SPOT_DIAMETER/2, SPOT_DIAMETER, SPOT_DIAMETER);
}

}
比如:

private class Point {
  int x;
  int y;
  Point(int x, int y) {
    this.x = x;
    this.y = y;
}

Point[][] pointSpecs = new Point[][] { {new Point( .5, .5) }, 
                                       {new Point(.25, .25), new Point(.75, .75)},
                                  ...};
这是一个数组的声明。第一个索引是die值-1(因为java数组是零索引的)。每个位置都有一组需要绘制的点。只有乘数,你需要乘以你的宽度和高度

使用:

public void paintComponent(Graphics g) {

int w = getWidth();  // Get height and width
int h = getHeight();

// Graphics naar 2d
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

//... Paint background
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, w, h);
g2.setColor(Color.BLACK);

g2.drawRect(0, 0, w-1, h-1);  // Draw border

Point[] points = pointSpecs[faceValue-1];
for (Point point : points) {
  drawSpot(g2, w*point.x, h*point.y);
}

你需要填写其余的点值…

你的意思是使用数组而不是开关吗?是的,我想用数组代替主键。我不明白数组的第一个索引是-1,如果Java数组是零基的。嗯,那么为什么要在数组中使用数组呢?因为在开关块中,一种情况下需要绘制多个点(例如,案例4或案例6)。案例=1。维度,点列表=2。多维数组的维度。准确地说。对于每种情况,你都必须对点列表进行完全明确的说明。你不能像使用switch语句那样做任何事情(我认为这通常是个坏主意;它会导致意外(bug)以及难以阅读的代码)。