2D数组仅显示Text函数中的最后一个元素

时间:2018-07-12 13:26:15

标签: java arrays processing nested-loops

我的整个代码如下:

package calculator;

import java.util.Arrays;

import processing.core.PApplet;


public class Calculator extends PApplet  {

public static void main(String[] args) {
    main("calculator.Calculator");
}

float screenMargin = 40;
float padding = 15;

float w;
float h;

float totalMargin = 2 * screenMargin;

String[][] textToDisplay = new String[][] {
    {
        "1", "2", "3", "*"
    }, {
        "4", "5", "6", "+"
    }, {
        "7", "8", "9", "-"
    }, {
        "±", "0", ".", "="
    }
};
int rows = textToDisplay.length;
int cols = 4;

GridSquare[][] buttons;

public void settings() {
    size(400, 500);
}
public void setup() {

    background(255, 255, 255);
    for (String[] outerArray: textToDisplay) {
        for (String element: outerArray) {
            System.out.println(element);
        }
    }
    System.out.println(Arrays.deepToString(textToDisplay));
}
public void draw() {
    drawCalculator();
    drawButtons();
}

public void drawCalculator() {
    w = (width - totalMargin);
    h = (height - totalMargin);
    rectMode(CORNER);
    fill(125, 125, 125);
    rect(screenMargin, screenMargin, w, h);
    fill(255);
    rect(screenMargin + padding, screenMargin + padding, w - 2 * padding, h / 
8);
}

public void drawButtons()  {
    w = (width - totalMargin);
    h = (height - totalMargin);
    buttons = new GridSquare[rows][cols];
    float margin = 65;
    float calcMarginX;
    float dimensions = 45;
    float totalWidth = margin + dimensions * (cols - 1);
    float idontevencareanymore = 130;
    calcMarginX = w - totalWidth;
    calcMarginX /= 2;
    calcMarginX += screenMargin;

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            buttons[i][j] = new GridSquare(i * margin + calcMarginX, j * 
margin + idontevencareanymore, dimensions, dimensions);
        }
    }
    for (int i = 0; i < textToDisplay.length; i++) {
        for (int j = 0; j < textToDisplay[i].length; j++) {
            buttons[i][j].displayText(textToDisplay);
        }
    }

}

public class GridSquare{

    public float x;
    public float y;
    public float ws;
    public float hs;

    public GridSquare(float tempX, float tempY, float tempW, float tempH)  {   
        x = tempX;
        y = tempY;
        ws = tempW;
        hs = tempH; 
    }

    public boolean onClick(float clickedX, float clickedY)  { 
        return (clickedX > x && clickedX < x + ws && clickedY > y && clickedY < y + hs);
    }

    public void draw() {
        fill(0, 30, 240);
        rectMode(CORNER);
        rect(x, y, ws, hs);

    }

    public void displayText(String[][] text2Display) {
        float squarePadding = 20;
        for (int i = 0; i < text2Display.length; i++) {
            for (int j = 0; j < text2Display[i].length; j++) {
                this.draw();
                textSize(20);
                fill(255, 255, 255);
                textAlign(CENTER);
                text(text2Display[i][j], x + squarePadding, y + 
squarePadding);
            //  System.out.println(text2Display[i][j]);
            }
        //  text(text2Display[i][0], x + squarePadding, y + squarePadding);
        }

    }
}


}

我的目标是使用Processing作为库,用Java制作计算器应用程序。我正在使用Eclipse,Processing和Proclipsing插件。

但是,当它遍历称为textToDisplay的二维数组时,它仅显示一个文本命令数组中所有元素的最后一个元素。

为什么会这样? (我已经扫描了我的代码,看起来在逻辑上是正确的。)

我在做什么错? (将其打印到控制台也显示了正确的代码,也为数组调用了文本函数。我感觉它处于for循环中。

该如何解决?

我用其他语言看过类似的问题,但我找不到它们有用。

Python Similar Example

C Similar Example

PHP Example

2 个答案:

答案 0 :(得分:2)

以后,请尝试发布MCVE,而不要发布完整的程序。

我能给您的最好建议是debug your code。遍历代码以准确了解哪一行在做与预期不同的事情。

您有几行是这样的:

rect(x, y, ws, hs);

执行此行时xywshs的值是什么?查找其他类似的行,并打印出这些值。这些值与您期望的值不同吗?

如果您仍然遇到困难,那么我建议breaking your problem down into smaller steps并一次执行这些步骤。您能仅用一个按钮创建一个简单的计算器吗?现在可以添加第二个按钮了吗?在尝试添加更多按钮之前,先使它工作。

然后,如果您陷于较小的步骤之一,则可以发布一个更具体的技术问题以及一个MCVE。祝你好运。

答案 1 :(得分:0)

您有一个嵌套的for循环(两个for循环),就像在编写文本时一样,将方法称为 well 。从方法内部将其删除,而是将其添加为参数,然后将ij作为参数和参数传递给该方法。