程序小白,希望和大家多交流,共同学习
//分形,思锐平斯基三角形
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.geometry.Pos;
import javafx.geometry.Point2D;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
public class SierpinskiTriangle extends Application
{
@Override
public void start(Stage primaryStage)
{
//思锐平斯基三角形面板
SierpinskiTrianglePane trianglePane = new SierpinskiTrianglePane();
TextField tfOrder = new TextField();
//对文本框中输入的数字进行相应
tfOrder.setOnAction(e -> {
trianglePane.setOrder(Integer.parseInt(tfOrder.getText()));
});
//设置文本输入框
tfOrder.setPrefColumnCount(4);
tfOrder.setAlignment(Pos.BOTTOM_RIGHT);
//放置控制组件
HBox hb = new HBox(10);
hb.getChildren().addAll(new Label("Enter an order: "), tfOrder);
hb.setAlignment(Pos.CENTER);
BorderPane pane = new BorderPane();
pane.setCenter(trianglePane);
pane.setBottom(hb);
Scene scene = new Scene(pane, 200, 210);
primaryStage.setTitle("SierpinskiTriangle");
primaryStage.setScene(scene);
primaryStage.show();
//使用事件监听控制面板和思锐平斯基三角形的大小
scene.widthProperty().addListener(ov -> trianglePane.paint());
scene.heightProperty().addListener(ov -> trianglePane.paint());
}
//内部类,思锐平斯基三角形面板
static class SierpinskiTrianglePane extends Pane
{
private int order = 0;
//设置阶数
public void setOrder(int order)
{
this.order = order;
paint();
}
SierpinskiTrianglePane()
{
}
//打印思锐平斯基三角形
protected void paint()
{
Point2D p1 = new Point2D(getWidth() / 2, 10);
Point2D p2 = new Point2D(10, getHeight() - 10);
Point2D p3 = new Point2D(getWidth() - 10, getHeight() - 10);
this.getChildren().clear();
displayTriangles(order, p1, p2, p3);
}
//递归辅助方法
private void displayTriangles(int order, Point2D p1, Point2D p2, Point2D p3)
{
if (order == 0)
{
Polygon triangle = new Polygon();
triangle.getPoints().addAll(p1.getX(), p1.getY(), p2.getX(), p2.getY(), p3.getX(), p3.getY());
triangle.setStroke(Color.BLACK);
triangle.setFill(Color.WHITE);
this.getChildren().add(triangle);
}
else
{
//打印每个三角形内部的下一个阶层的三角形
Point2D p12 = p1.midpoint(p2);
Point2D p23 = p2.midpoint(p3);
Point2D p31 = p3.midpoint(p1);
displayTriangles(order - 1, p1, p12, p31);
displayTriangles(order - 1, p12, p2, p23);
displayTriangles(order - 1, p31, p23, p3);
}
}
}
}
//递归选择排序
import java.util.Scanner;
import java.util.Arrays;
public class RecursiveSelectSort
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("创建一个大小为10的双精度的数组:");
double[] array = new double[10];
for (int i = 0; i < 10; i++)
{
array[i] = input.nextDouble();
}
sort(array);
System.out.println(Arrays.toString(array));
}
//递归辅助方法
public static void sort(double[] array)
{
sort(array, 0, array.length);
}
public static void sort(double[] array, int low, int high)
{
if (low < high)
{
int indexOfMin = low;
double min = array[low];
for (int i = low + 1; i < high; i++)
{
if (array[i] < min)
{
indexOfMin = i;
min = array[i];
}
}
array[indexOfMin] = array[low];
array[low] = min;
sort(array, low + 1, high);
}
}
}
//递归二分法查找
import java.util.Scanner;
public class RecursiveBinarySearch
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("闯进一个有序的大小为10的整型数组:");
int[] array = new int[10];
for (int i = 0; i < 10; i++)
{
array[i] = input.nextInt();
}
System.out.println("输入需要查找的数:");
int key = input.nextInt();
System.out.println(key + " 在数组中的下表是:" + recursiveBinarySearch(array, key));
}
public static int recursiveBinarySearch(int[] array, int key)
{
return recursiveBinarySearch(array, key, 0, array.length - 1);
}
public static int recursiveBinarySearch(int[] array, int key, int left, int right)
{
if (left > right)
{
return -left - 1;
}
int mid = (left + right) / 2;
if (array[mid] < key)
{
left = mid + 1;
return recursiveBinarySearch(array, key, left, right);
}
else if (array[mid] == key)
{
return mid;
}
else
{
right = mid - 1;
return recursiveBinarySearch(array, key, left, right);
}
}
}
//计算目录文件大小
import java.util.Scanner;
import java.io.File;
public class DirctorySize
{
public static void main(String[] args)
{
System.out.print("Enter a directory or a file: ");
Scanner input = new Scanner(System.in);
String directory = input.nextLine();
System.out.println(getSize(new File(directory)) + " bytes.");
}
public static long getSize(File file)
{
long size = 0;
if (file.isDirectory())//对文件目录的处理
{
File[] files = file.listFiles();
for (int i = 0; files != null && i < files.length; i++)
{
size += getSize(files[i]);
}//15031 bytes.
// for (int i = 0; i < files.length; i++)
// {
// size += getSize(files[i]);
// }//15126 bytes.
// for (File newFile : files)
// {
// size += getSize(newFile);
// }//15134 bytes.
System.out.println("\n");
}
else//对文件的处理
{
size += file.length();
System.out.println(file.getName() + " ");
}
return size;
}
}
//F:\java\java语言程序设计\第18章
//汉诺塔问题,网上有很多的介绍,这里就不写介绍了
import java.util.Scanner;
public class TowerOfHanoi
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter number of disks: ");
int n = input.nextInt();
System.out.println("The moves are: ");
moveDisks(n, 'A', 'B', 'C');
}
//移动盘子,借助C盘,将所有盘子移动到B柱子上
public static void moveDisks(int n, char fromTower, char toTower, char auxTower)
{
if (n == 1)
{
System.out.println("Move disks " + n + " from " + fromTower + " to " + toTower);
}
else
{
moveDisks(n - 1, fromTower, auxTower, toTower);
System.out.println("Move disks " + n + " from " + fromTower + " to " + toTower);
moveDisks(n - 1, auxTower, toTower, fromTower);
}
}
}