public class Test10
{
public static void main(String[] args)
{
//if else
int x = 0;
//當表達式x > 1爲真時進入作用域1中
//當表達式結果爲假時進入作用域2中
//作用域1 和 作用域2是不會並存的
if(x > 1)
{
// 1
}
else
{
// 2
}
//else if 可以有多個,表示第一層次的邏輯劃分
if(x > 1)
{
// 1
}
else if(x < 1)
{
// 2
}
else
{
// 3
}
//這個代碼屬於典型的垃圾代碼,x > 2的話
//一定會大於1
if(x > 1)
{
if(x > 2)
{
// code
}
}
//對於這個代碼而言
//x只有等於2或者大於2兩種
//多加一個x > 1只會讓代碼看起來難懂
if(x > 1)
{
if(x > 2)
{
}
else
{
}
}
//這段代碼效率很低,實際上你把0-9的10個數
//分兩段
//x > 1的情況有8種,也就是說第二個表達式
//判斷了8次,加上第一個的10次,總共18次
//如果把兩個表達式順序調換下,你會發現
//x < 4僅有4種,總共14次
for (int i = 0; i < 10; i++)
{
//錯誤
if(i > 1 && i < 4)
{
}
//正確
if(i < 4 && i > 1)
{
}
//正確
if(i < 4)
{
if(i > 1)
{
}
}
}
//這個是上邊這個的測試
printTimes();
System.out.println("===================================>");
//對於這個代碼,如果邏輯區是連續的,
//這樣寫並不是好辦法,額外的判斷次數
//會使效率低下
if(x < 10)
{
if(x > 7)
{
}
else if(x > 5 && x < 8)
{
}
else if(x > 3 && x < 6)
{
}
}
//簡單把邏輯區域劃分一下,其實還是蠻簡單的
if(x < 10)
{
if(x > 7)
{
}
else if(x > 5)
{
}
else if(x > 3)
{
}
}
printTimes1();
System.out.println("===================================>");
}
/*
for (int i = 0; i < 2000000000; i++)
for (int j = 0; j < 1000; j++)
if (j > 0 && j < 100) times=4501377 ns
if (j < 100 && j > 0) times=3312574 ns
*/
public static void printTimes()
{
int y = 2;
long nano = 0l;
System.out.println("for (int i = 0; i < 2000000000; i++)");
System.out.println(" for (int j = 0; j < 1000; j++)");
nano = System.nanoTime();
for (int j = 0; j < 2000000000; j++)
{
for (int i = 0; i < 1000; i++)
{
if(j > 0 && j < 100)
{
y = 5 / 3;
}
}
}
nano = System.nanoTime() - nano;
System.out.println(" if (j > 0 && j < 100) times=" + nano + " ns");
nano = System.nanoTime();
for (int j = 0; j < 2000000000; j++)
{
for (int i = 0; i < 1000; i++)
{
if(j < 100 && j > 0)
{
y = 5 / 3;
}
}
}
nano = System.nanoTime() - nano;
System.out.println(" if (j < 100 && j > 0) times=" + nano + " ns");
}
/*
for (int i = 0; i < 2000000; i++)
for (int j = 0; j < 10; j++)
if(y > 7 && y < 10)
else if(y > 5 && y < 8)
else if(y > 3 && y < 6) times=29993107 ns
if(y < 10)
if(y > 7)
else if(y > 5)
else if(y > 3) times=21235980 ns
*/
public static void printTimes1()
{
int y = 0;
long nano = 0l;
System.out.println("for (int i = 0; i < 2000000; i++)");
System.out.println(" for (int j = 0; j < 10; j++)");
nano = System.nanoTime();
for (int j = 0; j < 2000000; j++)
{
for (int i = 0; i < 10; i++)
{
if(y > 7 && y < 10)
{
y = 5 * 0;
}
else if(y > 5 && y < 8)
{
y = 5 * 0;
}
else if(y > 3 && y < 6)
{
y = 5 * 0;
}
}
}
nano = System.nanoTime() - nano;
System.out.println(" if(x > 7 && x < 10)");
System.out.println(" else if(x > 5 && x < 8)");
System.out.println(" else if(x > 3 && x < 6) times=" + nano + " ns");
System.out.println();
nano = System.nanoTime();
for (int j = 0; j < 2000000; j++)
{
for (int i = 0; i < 10; i++)
{
if(y < 10)
{
if(y > 7)
{
y = 5 * 0;
}
else if(y > 5)
{
y = 5 * 0;
}
else if(y > 3)
{
y = 5 * 0;
}
}
}
}
nano = System.nanoTime() - nano;
System.out.println(" if(x < 10)");
System.out.println(" if(x > 7)");
System.out.println(" else if(x > 5)");
System.out.println(" else if(x > 3) times=" + nano + " ns");
}
}
複習筆記9 if else 以及效率優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.