[Eclipse]新建環境編碼設定

設定Eclpse內程式檔案的文字編碼

1.General → ContentType → Text 最底下Default encoding:UTF-8 key完馬上update

2.Text下JSP Default encoding:UTF-8 key完馬上update

3.JSP Fragment Default encoding:UTF-8 key完馬上update

4.Web → CSS Files UTF-8 Apply

5.Web → HTML Files UTF-8 Apply &LoadingFiles Use workspaceencoding解除 UTF-8 Applys

6.Web → JSP Files UTF-8 Apply

7.XML → XML Files UTF-8 Apply

[HackerRanker](8)Java Strings Introduction

問題網址:
https://www.hackerrank.com/challenges/java-strings-introduction/problem

重點:掌握字串方法

1.字串長度: 字串.length()

2.比較 alphabetically/lexicographically A.compareTo(B) > 0 ? “Yes":"No" (A大於B)

3.取首字元 charAt(0) Character轉大寫 Character.toUpperCase() 和其餘字元組合 + substring(1, 字串.length() )

[Java練習](9)Armstrong number

題目:找出1000以內所有三位數的Armstrong number

Armstrong number:153=1^3+5^3+3^3

public class Armstrong {
public static void main(String args[]) {
for (int i = 100 ; i<1000 ;i++) {
if ((i/100)(i/100)(i/100)+((i/10)%10)((i/10)%10)((i/10)%10)+(i%10)(i%10)(i%10)==i){
System.out.println(i);
}
}
}
}

Output:

153
370
371
407

[Java範例](1)Array排序法三種

//實作Bubble sort大到小
 public class TestNumberSortEx1 {
 int[] data = {52,10,7,286,9};
public void sort1() {
    for (int i=0;i<data.length;i++) {
        for(int j=i+1;j<data.length;j++) {
            int temp=0;
            if (data[i]<data[j]) {
                temp = data[i];
                data[i]=data[j];
                data[j]=temp;
            }//三角交換法
        }
    }
}


//實作雙向排序法大到小
public void sort2() {
    while(true) {//無窮迴圈
        int count=0;//記數給無窮迴圈斷點
        //index比長度小1

        for (int i = 0;i<data.length-1;i++) {
            int temp =0;
            if(data[i]<data[i+1]) {
                temp=data[i];
                data[i] = data[i+1];
                data[i+1] = temp;
                count++;
            }
        }
            if (count==0) {
                break;
            }
        }
    }

public void sort3() {
    Arrays.sort(data); //sort預設小到大
}

[Java練習](8)數字排序

題目:隨機創造100000個不同的數字範圍在1-42的數字,依照出現次數排序,從多的次數排到最少的

public class TestArraySortSirSolution {
     int[] count = new int[42];//記數
     int[] number = new int[42];//用來存1-42號碼
public void createLotteryNumber() {

    for (int i = 1;i<=100000;i++) {
        int rNum =(int)((Math.random()*42)+1);
    //先產生一個random 1-42內整數 重複做100000次
    //將1出現的次數存入新陣列count[0]中以此類推 
        count[rNum-1]++;
    }
    for (int j= 1;j<=42;j++) {
        number[j-1]=j;//number[0]=1...
    }
}
//使用此排序方法讓count跟number序號同時移動
public void sort1() {
    for (int i = 0; i < count.length - 1; i++) {
        for (int j = i + 1; j < count.length; j++) {
            int temp1 = 0, temp2 = 0;

            if (count[i] < count[j]) {
                temp1 = count[i];
                count[i] = count[j];
                count[j] = temp1;

                temp2 = number[i];
                number[i] = number[j];
                number[j] = temp2;
            }

        }
    }
}
public void printResult() {
    for(int k =0;k<count.length;k++) { 
        System.out.printf("%2d %d\t",number[k],count[k]);
        if ((k+1)%7==0) {
            System.out.println(" ");//換行
        }

    }
}

public static void main(String[] args) {
    TestArraySortSirSolution stats = new TestArraySortSirSolution();
    stats.createLotteryNumber();
    System.out.println("Original Data:");
    System.out.println("--------------------------------------------------------------------------");
    stats.printResult();
    System.out.println("--------------------------------------------------------------------------");
    System.out.println("Sorted Data:");
    System.out.println("--------------------------------------------------------------------------");
    stats.sort1();
    stats.printResult();
    System.out.println("--------------------------------------------------------------------------");
}

Output (每次數字不一樣)

[Java練習](7)發牌遊戲

題目:模擬撲克牌發牌,每位玩家發兩張牌。

public class TestPoker {
//存取出現過幾次的陣列
int[][] poker =new int[4][13];
//四種花色的陣列
String[] pokersign = {“Spade","Heart","Diamond","Club"};
//發牌方法
public void Go() {
//重複發牌(for迴圈)
for(int i =1;i<=4;i++) { //i為玩家人數
if(i<=26) { //至多只能26位玩家
int sign = (int)(Math.random()4); //花色隨機
int sign2 = (int)(Math.random()4);//花色隨機
int number = (int)(Math.random()13); //數字隨機
int number2 = (int)(Math.random()13); //數字隨機
if(sign!=sign2||number!=number2) { //同時發出的兩張牌不能相等
if((poker[sign][number]==0)&&(poker[sign2][number2]==0)) {
//二維陣列上記數0的兩張牌才能發出
System.out.printf(“發給玩家%d的撲克牌花色為%s%2d 和%s%2d\n",i,pokersign[sign],number+1,pokersign[sign2],number2+1);
poker[sign][number]++; //發過的在二維陣列上記數
poker[sign2][number2]++; //發過的在二維陣列上記數
}else {
i–; //出現二維陣列上記數過的牌時迴圈倒回去重做
}
}else {
i–; //出現兩張一樣的牌時迴圈倒回去重做
}
}else { //超過26位的玩家
System.out.printf(“第%2d位玩家沒牌了不准玩!\n",i);
}
}
}

public static void main(String[] args) {
    TestPoker test1 = new TestPoker();
    test1.Go();
}

Output:

發給玩家1的撲克牌花色為Club11和Diamond10
發給玩家2的撲克牌花色為Club 5和Club13
發給玩家3的撲克牌花色為Club 1和Club 6
發給玩家4的撲克牌花色為Spade10和Heart10

[Java練習](5)費氏數列

題目:列印費氏數列48個

        int p1 = 1; //數列第一項
        int p2 = 1; //數列第二項
        int res = 0;
        String total="";
        System.out.print(p1+" ");
        System.out.print(p2);
        for(int i = 3; i <= 48; i++) {
            res = p1 + p2; //res為第三項=第一+第二
            p1 = p2;//將第2項的值存給第一項
            p2 = res;//將第三項的值存給第二項
            total =total+" "+res; //產生加總字串
    }
 System.out.print(total);

Output:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 …共48項

[Java練習](4)一元二次方程式根

題目:設定一元二次方程式,ax^2+bx+c=0,找出此方程式的實根。

演算法:判別式b^2-4ac>0 有兩個根為-b+b^2-4ac/2a -b-b^2-4ac/2a

b^2-4ac= 0 有一實根為重根

判別式<0 無實根解

public static void main(String[] args) {
    //整數abc 問ax^2+bx+c=0 x的解
    //給出三個整數
    int a=1;
    int b=2;
    int c=1;
    //給判別式 一個變數
    int d = ((b*b)-(4*a*c));
    //若有兩實根解的情況會是兩個double
    double x1 ,x2;
    //a要不等於0才是二元一次方程式
    if (a!=0) {
        //確認a不等於0 判別式>0者有兩實根 兩個根為-b+-根號d/2a
        if (d>0) {
            x1 = ((-b+(double)Math.sqrt(d))/(2*a));
            x2 = ((-b-(double)Math.sqrt(d))/(2*a));
            System.out.println("x="+x1 +"or x="+ x2);
            }
        //判別式等於零為重根 根為-b/2a
        else if(d==0) {
            x1=(-b/(2*a));
            System.out.println("此情況為重根x="+x1);  
        //若判別式<0 則無實根解
        }else {
            System.out.println("此情況無實根解");
        }
    }else {
        System.out.println("此非二元一次方程式");
    }
}

Output:此情況為重根x=-1.0

[Java練習](3)剪刀石頭布遊戲

題目:設計隨機猜到有人勝出為止的兩人剪刀石頭布遊戲

String[] S ={"scissors","stone","paper"};
    while(true) {
      //AB兩人出的拳用隨機決定
        int a = (int)(Math.random()*3);
        int b = (int)(Math.random()*3);

        if(a==b) {
            System.out.printf("這兩人平手,AB都出%s\n",S[a]);
        }//剪刀石頭布演算法
        else if(a==(b+1)||(a==0&&b==2)){
            System.out.printf("A獲勝,A出%s,B出%s\n", S[a],S[b]);
            break;//有人獲勝break結束
        }else {
            System.out.printf("B獲勝,A出%s,B出%s\n", S[a],S[b]);
            break;//有人獲勝break結束
        }

    }

Output:

這兩人平手,AB都出stone
B獲勝,A出paper,B出scissors