You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:05:39