JavaFX实现数字倒半金字塔及双三角布局技术求助
JavaFX数字金字塔效果修正方案
已实现基础功能
已用JavaFX完成数字正半金字塔,核心代码:
public void buttonpressed() { int iNum = Integer.parseInt(Num.getText()); String sResult = ""; String sNumber = ""; for (int i = 1; i<=iNum; i++ ) { sNumber += i; sResult += sNumber + "\n"; result.setText(sResult); } }
输入5时输出:
1 12 123 1234 12345
需求效果
需实现两种输出效果:
- 带缩进的倒半金字塔(输入5时):
12345 1234 123 12 1
- 正、倒金字塔并排布局(输入5时):
1 12345 12 1234 123 123 1234 12 12345 1
当前问题
改编倒半金字塔代码到JavaFX后,输出错误,错误输出示例:
1 12 123 1234 12345 123451 1234512 12345123 123451234 123451234123 1234512341231 12345123412312 123451234123121
完整错误代码:
package application; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class invertedtriangle extends Application{ TextField num = new TextField(); Label result = new Label(); public void start(Stage stage) { GridPane p = new GridPane(); Scene scene = new Scene(p, 1000, 900); Label input = new Label("Input a number"); Button press = new Button("Press"); p.add(input,0,1); p.add(num, 0,2); p.add(press, 0, 3); p.add(result, 0, 4); press.setOnAction(e -> buttonpressed()); p.setHgap(10.0); p.setVgap(7.0); stage.setTitle("inv triangle"); stage.setScene(scene); stage.show(); } public void buttonpressed() { int iNum = Integer.parseInt(num.getText()); String sResult = ""; String sNumber = ""; for (int i = iNum; i >= 1; i--) { for (int j = 1; j <= i; ++j) { sNumber+=j; sResult += sNumber +"\n"; } result.setText(sResult); } } public static void main(String[] args){ launch (args); } }
修正代码
1. 带缩进的倒半金字塔实现
问题根源是嵌套循环逻辑错误:未在每行开始前重置数字串,且内层循环错误地重复拼接结果。修正后的buttonpressed方法:
public void buttonpressed() { int iNum = Integer.parseInt(num.getText()); StringBuilder sResult = new StringBuilder(); for (int i = iNum; i >= 1; i--) { // 添加对应数量的缩进 for (int j = 0; j < iNum - i; j++) { sResult.append(" "); } // 生成当前行的数字序列 StringBuilder currentLine = new StringBuilder(); for (int j = 1; j <= i; j++) { currentLine.append(j); } sResult.append(currentLine).append("\n"); } result.setText(sResult.toString()); }
2. 正、倒金字塔并排布局实现
每行同时生成正序和倒序的数字串,中间用空格分隔:
public void buttonpressed() { int iNum = Integer.parseInt(num.getText()); StringBuilder sResult = new StringBuilder(); for (int k = 1; k <= iNum; k++) { // 生成正金字塔当前行 StringBuilder forward = new StringBuilder(); for (int j = 1; j <= k; j++) { forward.append(j); } // 生成倒金字塔当前行 StringBuilder backward = new StringBuilder(); int backwardLen = iNum - k + 1; for (int j = 1; j <= backwardLen; j++) { backward.append(j); } // 拼接并换行 sResult.append(forward).append(" ").append(backward).append("\n"); } result.setText(sResult.toString()); }
优化说明
- 使用
StringBuilder替代字符串拼接,减少内存开销,提升效率。 - 每次生成结果时通过全新
StringBuilder清空旧内容,避免残留数据干扰。 - 缩进数量通过
iNum - i计算,确保每行缩进正确匹配需求。
内容的提问来源于stack exchange,提问作者monsone
相关产品推荐
相关产品推荐

