我的整个代码如下:
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循环中。
该如何解决?
我用其他语言看过类似的问题,但我找不到它们有用。
答案 0 :(得分:2)
以后,请尝试发布MCVE,而不要发布完整的程序。
我能给您的最好建议是debug your code。遍历代码以准确了解哪一行在做与预期不同的事情。
您有几行是这样的:
rect(x, y, ws, hs);
执行此行时x
,y
,ws
和hs
的值是什么?查找其他类似的行,并打印出这些值。这些值与您期望的值不同吗?
如果您仍然遇到困难,那么我建议breaking your problem down into smaller steps并一次执行这些步骤。您能仅用一个按钮创建一个简单的计算器吗?现在可以添加第二个按钮了吗?在尝试添加更多按钮之前,先使它工作。
然后,如果您陷于较小的步骤之一,则可以发布一个更具体的技术问题以及一个MCVE。祝你好运。
答案 1 :(得分:0)
您有一个嵌套的for循环(两个for循环),就像在编写文本时一样,将方法称为 well 。从方法内部将其删除,而是将其添加为参数,然后将i
和j
作为参数和参数传递给该方法。