用java写一个冒泡排序要求可动态输入无序数组,打印每一趟的排序结果,且要有数据和ui图联动
时间: 2024-02-09 19:07:38 浏览: 102
用java写的一个冒泡排序器
好的,我会为您编写一个Java程序,实现冒泡排序,并且支持动态输入无序数组,并打印每一趟的排序结果。为了实现数据和UI图联动,我会使用JavaFX进行图形化界面的设计。以下是代码实现:
```java
import javafx.application.Application;
import javafx.geometry.Insets;
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.scene.layout.VBox;
import javafx.stage.Stage;
public class BubbleSort extends Application {
private int[] arr;
private int index = 0;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Bubble Sort");
// 输入框和按钮
Label inputLabel = new Label("请输入无序数组(用逗号分隔):");
TextField inputField = new TextField();
Button sortBtn = new Button("开始排序");
// 排序结果区域
Label sortLabel = new Label("排序结果:");
Label resultLabel = new Label("");
// 布局
GridPane inputLayout = new GridPane();
inputLayout.setHgap(10);
inputLayout.setVgap(10);
inputLayout.setPadding(new Insets(20, 20, 20, 20));
inputLayout.add(inputLabel, 0, 0);
inputLayout.add(inputField, 1, 0);
inputLayout.add(sortBtn, 2, 0);
VBox resultLayout = new VBox();
resultLayout.setSpacing(10);
resultLayout.setPadding(new Insets(20, 20, 20, 20));
resultLayout.getChildren().addAll(sortLabel, resultLabel);
VBox root = new VBox();
root.setSpacing(10);
root.getChildren().addAll(inputLayout, resultLayout);
// 绑定事件
sortBtn.setOnAction(event -> {
String[] inputArr = inputField.getText().split(",");
arr = new int[inputArr.length];
for (int i = 0; i < inputArr.length; i++) {
arr[i] = Integer.parseInt(inputArr[i]);
}
sort(arr);
resultLabel.setText(printArr(arr));
});
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
// 冒泡排序
private void sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr, j, j+1);
System.out.println(printArr(arr));
}
}
}
}
// 数组元素交换
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 打印数组
private String printArr(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("第").append(++index).append("趟排序:");
for (int i : arr) {
sb.append(i).append(" ");
}
sb.append("\n");
return sb.toString();
}
public static void main(String[] args) {
launch(args);
}
}
```
运行该程序,您可以在UI界面中输入一个无序数组(用逗号分隔),然后点击“开始排序”按钮,程序会自动进行冒泡排序,并打印每一趟排序结果。排序结果会实时显示在UI界面上,实现了数据和UI图的联动。
注意:为了运行该程序,您需要在项目中添加JavaFX的库文件,并在程序中引入JavaFX的相关包。
阅读全文