1、判斷閏年
package stage1;
import java.util.Scanner;
public class LeapyYear {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入年份:");
int year = scanner.nextInt();
scanner.close();
/*四年一閏,百年不閏,四百年再閏*/
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
String msg = isLeapYear ? year + "是閏年" : year + "不是閏年";
System.out.println(msg);
}
}
2、比較for循環和遞歸的效率
package stage1;
public class Recursive {
public static void main(String[] args) {
int n = 50;
//獲取當前時間
long time = System.currentTimeMillis();
System.out.println("fibByFor(" + n + ")=" + fibByFor(n));
System.out.println("使用for循環計算,用時:"
+ (System.currentTimeMillis() - time) + "毫秒");
time = System.currentTimeMillis();
System.out.println("fibByRecursive(" + n + ")=" + fibByRecursive(n));
System.out.println("使用遞歸計算,用時:"
+ (System.currentTimeMillis() - time) + "毫秒");
}
//循環方式計算費氏數列
public static long fibByFor(int n) {
if (n == 1 || n == 2)
return 1;
long f1 = 1;
long f2 = 1;
for (int i = 3; i <= n; i++) {
f2 = f1 + f2;
f1 = f2 - f1;
}
return f2;
}
//遞歸方式計算
public static long fibByRecursive(int n) {
if (n == 1 || n == 2)
return 1;
return fibByRecursive(n - 1) + fibByRecursive(n - 2);
}
}
程序運行結果如下:
fibByFor(50)=12586269025
使用for循環計算,用時:0毫秒
fibByRecursive(50)=12586269025
使用遞歸計算,用時:49299毫秒
3、冒泡排序
package stage1;
import java.util.Random;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
//創建數組
int[] arr = new int[6];
Random ran = new Random();
for (int i = 0;i < arr.length;i++) {
arr[i] = ran.nextInt(100);
}
System.out.println(Arrays.toString(arr));
//冒泡排序
/*冒泡排序既可以採用大氣泡上浮的方式,也可以採用小氣泡沉底的
*方式,這裏用的是大氣泡上浮的方式,小氣泡沉底則是從另一頭
*開始,把小數往下沉。*/
System.out.println("-------冒泡排序 開始-------");
for (int i = 0;i < arr.length - 1;i++) {
boolean isSwap = false;
for (int j = 0;j < arr.length - 1 - i;j++) {
if (arr[j] > arr[j + 1]) {
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
isSwap = true;
}
}
if (!isSwap) {
break;
}
System.out.println(Arrays.toString(arr));
}
System.out.println("---------冒泡排序 結束------");
System.out.println(Arrays.toString(arr));
}
}
程序某次運行的結果:
[45, 82, 45, 86, 87, 10]
——-冒泡排序 開始——-
[45, 45, 82, 86, 10, 87]
[45, 45, 82, 10, 86, 87]
[45, 45, 10, 82, 86, 87]
[45, 10, 45, 82, 86, 87]
[10, 45, 45, 82, 86, 87]
———冒泡排序 結束——
[10, 45, 45, 82, 86, 87]
4、插入排序
package stage1;
import java.util.Random;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = new int[6];
Random ran = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = ran.nextInt(100);
}
//插入排序
System.out.println(Arrays.toString(arr));
System.out.println("-------插入排序 開始-------");
for (int i = 1; i < arr.length; i++) {
int k = arr[i];//取出待插入元素
//找到插入位置
int j;
for (j = i - 1; j >= 0 && k < arr[j]; j--) {
arr[j + 1] = arr[j];//移動元素
}
//插入元素
arr[j + 1] = k;
System.out.println(Arrays.toString(arr));
}
System.out.println("-------插入排序 結束-------");
System.out.println(Arrays.toString(arr));
}
}
程序某次運行的結果:
[0, 76, 85, 72, 22, 31]
——-插入排序 開始——-
[0, 76, 85, 72, 22, 31]
[0, 76, 85, 72, 22, 31]
[0, 72, 76, 85, 22, 31]
[0, 22, 72, 76, 85, 31]
[0, 22, 31, 72, 76, 85]
——-插入排序 結束——-
[0, 22, 31, 72, 76, 85]
5、猜字符小遊戲
package stage1;
import java.util.Random;
import java.util.Scanner;
//猜字符
public class GuessingGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int count = 0;//記錄猜錯的次數
char[] chs = generate();//生成5個字符
System.out.println(chs);//println可以輸出字符數組,但不能輸出int數組
/*for (int i = 0;i < chs.length;i++) {
System.out.print(chs[i]);
}
System.out.println();*/
while (true) {
System.out.println("猜吧!");
String str = scan.next().toUpperCase();//接收用戶的串
if (str.equals("EXIT")) {
System.out.println("下次再來");
break;
}
char[] input = str.toCharArray();
int[] result = check(chs,input);
if (result[1] == chs.length) {
int score = chs.length * 100 - count * 10;
System.out.println("恭喜你,猜對了,得分"+score);
break;
}else {
count++;
System.out.println("字符對了"+result[0]+"個,位置對了"+result[1]+"個");
}
}
scan.close();
}
//隨機生成5個字符數組
public static char[] generate() {
char[] chs = new char[5];
Random rand = new Random();
char[] letters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
boolean[] flags = new boolean[letters.length];
for (int i = 0;i < chs.length;i++) {
int index;
do {
index = rand.nextInt(letters.length);
/*index = (int)(Math.random() * letters.length)*/
}while(flags[index]);
chs[i] = letters[index];
flags[index] = true;
}
return chs;
}
//比較
public static int[] check(char[] chs,char[] input) {
int[] result = new int[2];
for (int i = 0;i < chs.length;i++) {
for (int j = 0;j < input.length;j++) {
if (chs[i] == input[j]) {
result[0]++;
if (i == j) {
result[1]++;
}
break;
}
}
}
return result;
}
}