一、运行截图
二、代码
package Last_Homework;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import com.sun.prism.Graphics;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.FontPosture;
public class coin extends Application
{
// 窗口设置
public void start(Stage ps) throws MalformedURLException
{
Scene scene=new Scene(userPane(),400,400);
ps.setTitle("找零界面");
ps.setScene(scene);
ps.show();
}
// 主函数调用
public static void main(String[] args)
{
launch(args);
}
// 窗口具体配件设置
GridPane userPane() throws MalformedURLException
{
// 用户窗口设置
GridPane pane=new GridPane();
// 编辑者组件
ImageIcon icon;
icon = new ImageIcon(new URL("https://www.gdufs.edu.cn/images/logo.jpg"));
JOptionPane.showMessageDialog(null, "Edition 1.0 版\n版权所有:广东外语外贸大学信息学院", "关于Compiler", -1, icon);
// 找零窗口
pane.setAlignment(Pos.CENTER); //居中
pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
pane.setVgap(20);//上下间隔
//设置付款输入框
TextField pay = new TextField();
pay.setPrefWidth(80.0); // 输入框大小
pane.add(new Label("付款:"),0, 0);
pane.add(pay, 1,0);
Button btReg = new Button("应找");
pane.add(btReg, 3, 0);
//定义六个面额框
pane.add(new Label("100:"),0, 1);
TextField O = new TextField();
O.setPrefWidth(20.0); // 输入框大小
pane.add(O, 1,1);
pane.add(new Label("50:"),2, 1);
TextField T = new TextField();
T.setPrefWidth(20.0); // 输入框大小
pane.add(T, 3,1);
pane.add(new Label("20:"),0, 2);
TextField F = new TextField();
F.setPrefWidth(20.0); // 输入框大小
pane.add(F, 1,2);
pane.add(new Label("10:"),2, 2);
TextField S = new TextField();
S.setPrefWidth(20.0); // 输入框大小
pane.add(S, 3, 2);
pane.add(new Label("5:"),0, 3);
TextField E = new TextField();
E.setPrefWidth(20.0); // 输入框大小
pane.add(E, 1,3);
pane.add(new Label("1:"),2, 3);
TextField R = new TextField();
R.setPrefWidth(20.0); // 输入框大小
pane.add(R, 3,3);
//字体变大
pane.setStyle("-fx-font-size: 20px;-fx-pref-width:100px;-fx-min-width: 60px;-fx-max-width: 160px;");
//付款事件重写
btReg.setOnAction(e->{
String p = pay.getText();
// 贪心算法解决找零问题
int [] count = {0, 0, 0, 0, 0, 0};
int [] money = {100, 50, 20, 10, 5, 1};
int act =Integer.parseInt(p); // 转 int
for(int i = 0; i < 6; i ++)
{
if(act - money[i] >= 0 && act > 0)
{
act -= money[i];
count[i] +=1;
i -= 1;
}
}
// 结果反馈到对应文字框里
O.setText(count[0]+"张"); // 转 String
T.setText(count[1]+"张");
F.setText(count[2]+"张");
S.setText(count[3]+"张");
E.setText(count[4]+"张");
R.setText(count[5]+"张");
// 控制台输出
for(int i = 0; i < 6;i ++)
{
if(count[i] != 0)
{
System.out.print("需要 ");
System.out.print(money[i]);
System.out.print(" 元 ");
System.out.print(count[i]);
System.out.println(" 张");
}
}
});
return pane;
}
}
核心思想:贪心策略实现,这里建议可以改成动态规划实现,效果更好,贪心策略有局限性,而动态规划没有局限性。
// 贪心算法解决找零问题
int [] count = {0, 0, 0, 0, 0, 0};
int [] money = {100, 50, 20, 10, 5, 1};
int act =Integer.parseInt(p); // 转 int
for(int i = 0; i < 6; i ++)
{
if(act - money[i] >= 0 && act > 0)
{
act -= money[i];
count[i] +=1;
i -= 1;
}
}
三、总结
基于本学期算法设计课,运用大一下学期学过的javaFX可视化知识和本学期大二上学的贪心策略思想将凑零问题可视化,所以分享一下,有任何疑惑以及其他方面的提问,欢迎留言~