顯示具有 JAVA 標籤的文章。 顯示所有文章
顯示具有 JAVA 標籤的文章。 顯示所有文章

2011年12月4日 星期日

JAVA 強大的regex

對付奇奇怪怪的字串的時候就該是regex出馬的時候了

import java.util.regex.*;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;

public class testregex {
	public static void main(String[] args) {
		String 字串內容 = "Mr.Wei*123+456的789regex測試*=3=~in程式筆記";
		//Pattern 條件 = Pattern.compile("[0-9]"); //只允許數字
		//Pattern 條件 = Pattern.compile("[a-z]"); //只允許英文小寫字母
		//Pattern 條件 = Pattern.compile("[\\p{InCJKUnifiedIdeographs}]"); //只允許中文
		//Pattern 條件 = Pattern.compile("[^\\x00-\\x40\\x5B-\\x60\\x7B-\\x7F]"); //只允許英文字母以及中文
		Pattern 條件 = Pattern.compile("[\\p{InCJKUnifiedIdeographs}\\[a-zA-Z]");
		Matcher 匹配 = 條件.matcher(字串內容);
		while (匹配.find()) {
			System.out.print(匹配.group());
		}
	}
}

這玩意兒就更神奇了,網路上有很多奇奇怪怪的教學,慢慢摸索中

JAVA 從字串擷取部分文字

由於本人使用強大的"中文北風"

所以他的

[Products]叫[產品資料]

[QuantityPerUnit]叫[單位數量]

 

沒錯一如往常,以上都並不是重點


以下正題

 

我想要從單位數量裡面抓到[單位]跟[數量]

使得我可以很親切的幫沒有大腦的使用者計算出購買結果的數量對應單位的情形

曹山豆豆(偽)表示:那還不簡單,用String.Substring 方法立刻可以搞定。

大概會長這樣

String 結果 = 單位數量.substring(2,(單位數量.length() - 1));

不論數字多少,只要頭為2中文字,尾為1中文字,就能正確抓出數字

String.Substring 能玩的花樣其實還很多,詳情請洽曹山豆豆

 

 

 

 

傳說中的PS:

如果你想要用字串去做運算是辦不到的即使你的字串是"數字"

你會需要用到

Integer.parseInt(String)

ex:

Double 總價 = Double.parseDouble(數量) * Double.parseDouble(單價);

Double.parseDouble(String)

ex:

int 總量 = Integer.parseInt(數量) * Integer.parseInt(單位數量);

其實已經隱藏在上的講義裡...

如果你的使用者很ㄟ洨,他會在輸入數字的文字方塊裡打中文的話,會有例外狀況,請用條件限制來避免

2011年11月7日 星期一

JAVA Mr.楊同學的 質數 計次法

 

 

 

 

public class 質數_計次法 {
	public static void main(String[] args) {
		for (int target = 3; target <= 100; target++) {
			int count = 0;
			for (int i = 2; i < target; i++) {
				if ((target%i) != 0) {
					count++;
				}    
			}
			if (count == (target - 2)) {
				System.out.print(target + ",");
			}   
		}
	}
}

 

 

 

 

概念是對的,原本跑不出來,是因為

int count = 0;必須在第一層迴圈之內

大家參考參考

JAVA 大樂透 使用vector

 

 

 

 

public class 魏功豪_vector {
	public static void main(String[] args) {
		int betTimes = 10;
		int balls = 49;
		int temp;
		for (int bt = 1; bt <= betTimes; bt++) {
			java.util.Vector<Integer> allBalls = new java.util.Vector<Integer>();
			for (int i = 0; i <= balls - 1; i++) {
				allBalls.addElement(i + 1);
			}
			int [] arrSixBall = new int [6];
			System.out.print("第" + bt + "注\t");
			for (int times = 0; times < 6; times++) {
				int randomTakeOneBall = (int)(Math.random()*allBalls.size());
				arrSixBall[times] = (int)allBalls.get(randomTakeOneBall);
				allBalls.remove(randomTakeOneBall);
			}

			for (int i = 0; i < 6; i++) {
				for (int j = i; j < 6; j++) {
					if (arrSixBall[i] < arrSixBall[j]) {
						temp = arrSixBall[j];
						arrSixBall[j] = arrSixBall[i];
						arrSixBall[i] = temp;
					}
				}
			}
			for (int x = 0; x < 6; x++) {
				System.out.print((arrSixBall[x] < 10) ? " " + arrSixBall[x] + ",\t" : arrSixBall[x] + ",\t");
			}   
			System.out.print("\n");
		}
	}
}

JAVA 大樂透 呼叫靜態方法

 

 

 

 

public class 魏功豪_callststic {
	public static void main(String[] args) {
		int betTimes = 10;
		int allBalls = 49;

		int [] getAllBalls;
		int [] getSixBalls;
		int [] getOrderByDESC;

		for (int bt = 1; bt <= betTimes; bt++) {
			getAllBalls = 魏功豪_callststic.functiondoArrBoxAll(allBalls);//長度[49]陣列傳進getAllBalls
			getSixBalls = 魏功豪_callststic.functionRandomGetBall(getAllBalls);//長度[6]陣列傳進getSixBalls
			getOrderByDESC = 魏功豪_callststic.functionOrderByDESC(getSixBalls);//長度[6]陣列傳進getOrderByDESC

			System.out.print("第" + bt + "注\t");
			for (int i = 0; i <= 5; i++) {
				System.out.print((getOrderByDESC[i] < 10) ? " " + getOrderByDESC[i] + ",\t" : getOrderByDESC[i] + ",\t");
			}
			System.out.print("\n");
		}
	}

	public static int [] functiondoArrBoxAll(int howManyAllBalls) {
		int [] doArrBoxAll = new int [howManyAllBalls];
		for (int i = 0; i <= howManyAllBalls - 1; i++) {
			doArrBoxAll[i] = i + 1;
		}
		return doArrBoxAll;//製造長度[49]陣列傳回,最初的49顆球陣列
	}

	public static int [] functionRandomGetBall(int [] arrOriginal) {
		int getballs = 6;
		int [] doArrSixBall = new int [getballs];

		for (int times = 1; times <= getballs; times++) {
			int randomTakeOneBall = (int)(Math.random()*arrOriginal.length);
			doArrSixBall[times-1] = arrOriginal[randomTakeOneBall];
			int [] arrNew = new int [arrOriginal.length - 1];
			for (int i = 0; i <= (arrOriginal.length - 1) - 1; i++) {
				arrNew[i] = (i < randomTakeOneBall) ? arrOriginal[i] : arrOriginal[i + 1];
			}
			arrOriginal = arrNew;
		}

		return doArrSixBall;//製造長度[6]陣列傳回,隨機取6球,未排列
	}

	public static int [] functionOrderByDESC(int [] arrRandomSixBall) {
		int temp;
		for (int i = 0; i < 6; i++) {
			for (int j = i; j < 6; j++) {
				if (arrRandomSixBall[i] < arrRandomSixBall[j]) {
					temp = arrRandomSixBall[j];
					arrRandomSixBall[j] = arrRandomSixBall[i];
					arrRandomSixBall[i] = temp;
				}
			}
		}
		return arrRandomSixBall;//製造長度[6]陣列傳回,將6球照大小排列
	}
}

JAVA 大樂透 照大小排 以陣列達成 泡沫排序法

 

 

 

 

public class 魏功豪_作業_大樂透照大小排列_泡沫排序法 {
	public static void main(String[] args) {
		int betTimes = 10;
		int allBalls = 49;
		int [] arrSixBall = new int [6];
		int temp;
		//=============================
		for (int bt = 1; bt <= betTimes; bt++) {
			int [] arrOriginal = new int [allBalls];
			for (int i = 0; i <= arrOriginal.length - 1; i++) {
				arrOriginal[i] = i + 1;
			}
			System.out.print("第" + bt + "注\t");
			for (int times = 1; times <= 6; times++) {
				int randomTakeOneBall = (int)(Math.random()*arrOriginal.length);
				arrSixBall[times-1] = arrOriginal[randomTakeOneBall];
				int [] arrNew = new int [arrOriginal.length - 1];
				for (int i = 0; i <= (arrOriginal.length - 1) - 1; i++) {
					arrNew[i] = (i < randomTakeOneBall) ? arrOriginal[i] : arrOriginal[i + 1];
				}
				arrOriginal = arrNew;
			}

			for (int i = 0; i < 6; i++) {
				for (int j = i; j < 6; j++) {
					if (arrSixBall[i] < arrSixBall[j]) {
						temp = arrSixBall[j];
						arrSixBall[j] = arrSixBall[i];
						arrSixBall[i] = temp;
					}
				}
			}
			for (int x = 0; x < 6; x++) {
				System.out.print((arrSixBall[x] < 10) ? " " + arrSixBall[x] + ",\t" : arrSixBall[x] + ",\t");
			}   
		System.out.print("\n");
		}
		//=============================
	}
}

JAVA 大樂透 照大小排 以陣列達成

 

 

 

 

public class 魏功豪_作業_大樂透照大小排列 {
	public static void main(String[] args) {
		int betTimes = 6;
		int allBalls = 49;
		int [] arrSixBall = new int [6];
		//=============================
		for (int bt = 1; bt <= betTimes; bt++) {
			int [] arrOriginal = new int [allBalls];
			for (int i = 0; i <= arrOriginal.length - 1; i++) {
				arrOriginal[i] = i + 1;
			}
			System.out.print("第" + bt + "注\t");
			for (int times = 1; times <= 6; times++) {
				int randomTakeOneBall = (int)(Math.random()*arrOriginal.length);
				arrSixBall[times-1] = arrOriginal[randomTakeOneBall];
				int [] arrNew = new int [arrOriginal.length - 1];
				for (int i = 0; i <= (arrOriginal.length - 1) - 1; i++) {
					arrNew[i] = (i < randomTakeOneBall) ? arrOriginal[i] : arrOriginal[i + 1];
				}
				arrOriginal = arrNew;
			}
			for (int x = 1; x <= 6; x++) {
				int temp = arrSixBall[0];
				int arrNo = 0;
				for (int i = 1; i <=5; i++) {
					if (temp < arrSixBall[i]) {
						temp = arrSixBall[i];
						arrNo = i;
					}
				}
				System.out.print((temp < 10) ? " " + temp + ",\t" :temp + ",\t");
				arrSixBall[arrNo] = 0;    
			}
			System.out.print("\n");
		}
		//=============================
	}
}

JAVA 大樂透 隨機取球 不重複 以陣列達成

 

 

 

 

public class 魏功豪_大樂透 {
	public static void main(String[] args) {
		int betTimes = 10;
		int balls = 49;
//================================================================================
		for (int bt = 1; bt <= betTimes; bt++) {
			int [] arrOrg = new int [balls];
			for (int i = 0; i <= balls-1; i++) {
				arrOrg[i] = i + 1;
			}
			for (int sixTime = 0; sixTime < 6; sixTime++) {
				int randomArrNo = (int)(Math.random()*(balls - sixTime));
				if (arrOrg[randomArrNo] < 10) {
					System.out.print(" ");
				}
				System.out.print(arrOrg[randomArrNo] + ",\t");
				int [] arrNew = new int [arrOrg.length -1];

				for (int i = 0; i <= arrNew.length -1; i++) {
					//arrNew[i] = (i < randomArrNo) ? arrOrg[i] : arrOrg[i + 1];//三源運算子寫法
					if (i < randomArrNo) {
						arrNew[i] = arrOrg[i];
					}
					else {
						arrNew[i] = arrOrg[i + 1];
					}
				}
				arrOrg = arrNew;
			}
			System.out.print("\n");
		}
//================================================================================
	}
}

2011年11月6日 星期日

該死的 x++ 和 ++x 到底是啥小

其實講義寫得很明白 //但是我看得很模糊

讓我們看看講義128頁 遞增運算

++

●後置 and 前置

int a = 5;

//a++ 即 a = a + 1

a++; /* 5為此後置Expression的值 */

a=5;

//++a 即 a = a + 1

++a; /* 6為此後置Expression的值 */

 

 

 

 

喔 我的天 是我眼花嗎

a++ 即 a = a + 1

++a 即 a = a + 1

那他們到底有他X的什麼不同???

 

 

 

 

我們看看曹山的說法

曹山:這一切都沒有錯,只不過你走進了黃泉路666號

 

 

 

 

以上博君一笑,以下解答

單看a++和++a的確沒啥不同 都是a = a + 1的意思

但是與其他運算式加在一起就有所分別

範例

從結果來看就很清楚

x++和++x都會重新對x的值+1

所以

第3行 X初值為10

第4行 X值改為11

第5行 X值改為12

而後面c d 前面有10 * 運算

其意義為

10 * x++ 為[10先乘x]再將[x = x + 1]

10 * ++x 為[先將]x = x + 1[再乘10]

所以

第6行可以看做

c = 10 * x;//x=12

x = x + 1;//x=13

第7行可以看做

x = x + 1;//x=14

d = 10 * x;//x=14

 

 

 

 

簡單來說

x++ 就是會先與其他算式運算 之後才 x = x + 1 將x值增1

++x 就是先 x = x + 1 將x值增1 之後才與其他算式運算

JAVA 聖誕樹 使用continue

 

 

 

 

public class 魏功豪_test_continue {
	public static void main(String[] args) {
		int start = 1;
		int end = 9;
		for (int Counter = start; Counter <= end; Counter++) {
			if (Counter % 2 == 1) {
				for (int i = 1; i <= (end - Counter) / 2; i++) {
					System.out.print(" ");
				}
			}
			for (int i = 1; i <= Counter; i++) {
				if (Counter % 2 == 0) {
					continue;
				}
				System.out.print("*");
			}
			if (Counter % 2 == 0) {
				System.out.print("\n");
			}
		}
	}
}

JAVA 聖誕樹 多層寫法

 

 

 

 

public class 魏功豪_聖誕樹 {
	public static void main (String[] args) {
		int Line = 4;
		for (int i = 1; i <= Line; i++) {
			for (int j = 0; j <= i; j++) {
				for (int k = 1; k <= (Line - j); k++) {
					System.out.print(" ");
				}
				for (int l = 1; l <= 1 + (j * 2); l++) {
					System.out.print("▲");
				}
				System.out.println("");
			}
		}
		for (int z = 1; z <= Line; z++) {
			for (int x = 1; x <= Line; x++) {
				System.out.print(" ");
			}
			System.out.println("▲");
		}
	}
}

JAVA 聖誕樹

 

 

 

 

public class h04 {
	public static void main (String[] args) {
		int Line = 5;
		for (int i = 1; i <= Line; i++) {
			for (int j = 1; j <= Line - i; j++) {
				System.out.print(" ");
			}
			for (int k = 1; k <= (i * 2) - 1; k++) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}
}

2011年11月5日 星期六

JAVA 求質數

 

 

 

 

public class 魏功豪_作業_求質數 {
	public static void main(String[] args) {
		int fin = 100;
		System.out.print(2 + ",");//唯一偶數質數
		for (int i = 3; i <= fin; i++) {
			boolean isPrimeNumber = true;
			for (int j = 2; j <= (i - 1); j++) {
				if (i % j == 0) {
					isPrimeNumber = false;
				}
			}
			if (isPrimeNumber) {
				System.out.print(i + ",");
			}
		}
	}
//網上神人用continue寫的
//	public static void main(String[] arg) {
//		int x, y;
//		String result = "2\n";
//		loopA:
//			for (x = 3; x <= 100; x++) {
//				for (y = 2; y <= x - 1; y++) {
//					if (x % y == 0)
//						continue loopA;       /看不懂 -.-
//				}
//				result += x + "\n";
//			}
//		System.out.println(result);
//	}
}