javaFx和经典递归问题

一周没写博客,因为学习android的时候发现java基础不行,所以跑去复习javaSe。复习的时候发现有个JAVAFx,以前没见过(以前学的是SWing),所以抱着好奇的心态试了试api。然后发现经典的简单的算法问题有点生疏,所以有看了某经典的递归问题。下面分享一下:

首先是javaFX这个东西,对于这个东西,我们只需要知道:以前GUI用的是AWT,后来AWT被Swing取代,现在SWing要被javaFx取代,所以直接学javaFx就好了。准备工作也是十分简单,编译器和JDK别太老就行……

说个小插曲:我的eclipse(mars版本,JDK是1.8)一开始不能导入application包。解决的方式如下:

导航栏选择project,然后选择properties,然后java build path,如下图所示:javaFx和经典递归问题

我们需要做的就是选中这个JDK,然后remove。然后add library,再把这个添加进去就好了,完美解决。

将一个很基本的javaFx示例:javaFx和经典递归问题

先输入姓,再输入名字,然后组合一下。

讲一下我觉得唯一有价值需要记一下的java FX的结构(其实跟android的视图结构几乎一样):

javaFx和经典递归问题

public class ShowFlowPane extends Application {


public static void main(String[] args) {
// TODO Auto-generated method stub
launch(args);
}


@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
GridPane pane=new GridPane();//表格布局
pane.setPadding(new Insets(10));//padding值
pane.setVgap(5);//设置间距
pane.setHgap(5);
pane.setAlignment(Pos.CENTER);//调整窗口大小时内容始终居中
pane.add(new Label("First name:"), 0, 0);//标签
TextField textField1=new TextField();//Edit text
TextField textField2=new TextField();
pane.add(textField1, 1, 0);
pane.add(new Label("Second name:"), 0, 1);
pane.add(textField2,1 ,1 );
Button button=new Button("Full name");//Button
Text text=new Text("hello");
text.setTextAlignment(TextAlignment.RIGHT);
pane.add(button,0, 2);
//动作监听
button.setOnMouseClicked(new EventHandler<Event>() {


@Override
public void handle(Event event) {
// TODO Auto-generated method stub
text.setText(textField1.getText().toString()+" "+textField2.getText().toString());

}
});
pane.add(text, 1, 2);
primaryStage.setTitle("Test");//stage就是窗口,primarystage就是默认打开的窗口
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
}

这是全部代码,我觉得需要说明的地方我都打上注释了。需要说明一点,在使用的时候要在main函数里面打上lunch方法

然后稍微复习那么一下下经典的汉诺塔问题。

汉诺塔真是最经典的递归问题,用递归很好解决,而且不用递归很难解决。

说一下递归解决汉诺塔的核心步骤:

(假设有三座塔ABC,在A上有N个物品按照从小到大的顺序排列着,我们的目的是把这N个物品按照从小到大的顺序排列在B上。限制条件是:小的物品必须在大的物品上面;每次只能移动一个物品)

首先我们先假设出终止条件(或者说递归出口吧,我也忘了叫什么了)。如果A上面只有一个物品,直接放在B上面就好了。

1.如果A上面有n个物品,那么我们就“借助”B把上面n-1个物品放到C

2.把A上面仅剩的(原来的第n个)物品放到B

3.把C上面的物品借助A放到B。

javaFx和经典递归问题

public class HanoiTower {


public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("请输入物品的个数:");
int n=input.nextInt();
input.close();
move(n, 'A', 'B', 'C');
}
public static void move(int n,char fromTower,char toTower,char auxTower){//移动物品的方法,借助c把物品从A移动到B
if(n==1){
System.out.println("move item "+n+" from "+fromTower+" to "+toTower);//一块就直接移动了
}else if(n>1){
move(n-1, fromTower, auxTower, toTower);//借助b把物品从a移动到c
System.out.println("move item "+n+" from "+fromTower+" to "+toTower);//把a上面最后的物品n移动到b
move(n-1, auxTower, toTower, fromTower);//借助a把物品从c移动到b
}
}
}

最后说两句:android的事件分发机制和多线程相关的消息队列处理机制看得好晕,好好看看,,看完写进博客里……


(长大之后的渡边麻友依然漂亮的一塌糊涂,而且拍的电视剧越来越好了,akb学园和欺诈偶像基本就算是一塌糊涂……)