# **1111004-java** ### 先建立 *MyLib* class。 ```java= class MyLib{ } public class Test{ } ``` ### 內容: ```java= class MyLib{ int add1toN_for(int n){ int sum=0; for(int i=1;i<=n ; i++){ sum=sum+i; //sum +=i; } return sum; } // int add1toN_for1(int n){ int sum=0; int i=1; for( ; i<=n; i++ ){ sum=sum+i; //sum +=i; } return sum; } int add1toN_for2(int n){ int sum=0; int i=1; for( ; ; i++ ){ if(i<=n) sum=sum+i; //sum +=i; else break; //跳出來. } return sum; } int add1toN_for3(int n){ int sum=0; int i=1; for( ; ; ){ if(i<=n) { //step1 sum=sum+i; //sum +=i; //step2 i++;//step3 } else break; //跳出來. } return sum; } int add1toN_while(int n){ int sum=0; int i=0; //step0 while(i<=n){ //step1 sum=sum+i; //step2 i++; //step3 } return sum; } int add1toN_do_while(int n){ int sum=0; int i=0; //step0 do{ sum=sum+i; i++; } while(i<=n); return sum; } // 類似for-each用法 void method1(){ int [] arr1={1,2,3,4,5,6}; //若有初始值設定 會自動NEW再設定 int sum=0; for(int i : arr1){ //類似陣列可用.. xx : 陣列 sum +=i; } System.out.println(sum); String [] arr2={"a","bc","def","ghijklmnopqrst" }; String str1=""; for( String str0 : arr2 ){ str1=str1 + str0; } System.out.println(str1); } //1,2,3,4 四個數字, 取三個不同數字可排成幾個數字.. 答案:24個. void method2(){ int i,j,k; int count=0; for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++) if(i!=j && j!=k && k!=i) { count ++; System.out.print(i+""+j+""+k+" "); } System.out.println(count); } void method3(){ //改良method2 int i,j,k; int count=0; for(i=1;i<5;i++){ for(j=1;j<5;j++){ if(j==i) continue; //從頭..相等下面的不做. for(k=1;k<5;k++){ if(k==i || k==j) continue; count ++; //使用continue, 此程式碼不用縮排.. System.out.print(i+""+j+""+k+" "); } } } System.out.println(count); } //使用if..程式要一直縮排.. void method4(){ int i,j,k; int count=0; for(i=1;i<5; i++){ for(j=1;j<5;j++){ if(i !=j){ for(k=1;k<5;k++){ if(k!=j && k!=i){ count ++; //因使用if {} 程式碼要縮排.. } } } } } System.out.println(count); } void method5(){ int i,j,k; int count=0; for(i=1;i<5; i++){ for(j=1;j<5;j++){ //使用continue的好處..減少if的{},減少縮排 if(i ==j) continue; //step5; for(k=1;k<5;k++){ if(k==i || k==j) continue; count ++; } } } System.out.println(count); } //三角形任意兩邊的和大於第三邊,任意兩邊的差小於第三邊 boolean triangle(int a, int b, int c){ //輸入三邊長a,b,c 判斷是否可組成一個三角形. //if(a+b<=c) return false; //if(b+c<=a) return false; //if(c+a<=b) return false; if( (a+b<=c) || (b+c<=a) || (c+a<=b) ) return false; return true; //有同學使用 //if( (a+b>c) && (b+c>a) && (c+a>b) ) return true; //else return false; } } public class Main { public static void main(String[] args) { MyLib obj=new MyLib(); obj.add1toN_for(100); //5050 System.out.println( obj.add1toN_for(100) ); System.out.println( obj.add1toN_for1(100) ); System.out.println( obj.add1toN_for2(100) ); System.out.println( obj.add1toN_for3(100) ); System.out.println( obj.add1toN_while(100) ); System.out.println( obj.add1toN_do_while(100) ); //obj.method1(); System.out.println( obj.triangle(2,3,2) ); } } ``` <hr> ```java import java.util.ArrayList; public class Main{ public static void main(String [] args){ MyLib obj=new MyLib(); System.out.println(obj.isPrime(23) ); ArrayList <Integer> list=obj.factor(100); for(int a : list ){ System.out.print(a+" "); } } } class MyLib{ boolean isPrime(int n){//質數判斷 for(int i=2;i< (int) Math.sqrt(n); i++){ if(n %i ==0) return false; } return true; } ArrayList factor(int n){//找出質因數 ArrayList <Integer> list=new ArrayList <Integer> (); list.add(1); for(int i=2;i< (int) Math.sqrt(n);i++){ if(n % i==0) list.add(i); } if(n!=1) list.add(n); return list; } } ``` **** ### **for loop:** ```java= for( step0 ; step1 ; step3 ){ step2; } ``` step0 --> step1 check判斷條件.. true.==> step2 ==> step3 ==> step1 check判斷條件. false 跳出迴圈.. **** ### while loop: ```java= step0 while(step1){ step2 //sum=sum+i; step3 //i++ } while( 布林運算式 ) { //迴圈內容 } ``` **** ### **do-while loop** ```java= do { } while(布林運算式); step0; do{ step2; //sum=sum+i step3; //i++ } while(step1) //i<=n ``` ### Java5 引入了一種主要用於陣列的增強型 for 迴圈。 break; continue; ### **泛型(generic type):** ArrayList <型別> 變數名稱= new ArrayList <型別> (); 型別 可為String , Integer ArrayList <String> 變數名稱1= new ArrayList <String> (); ArrayList <Integer> 變數名稱2= new ArrayList <Integer> (); ### 1的補數 用8位數當例子 ``` 0111-1111 127 0111-1110 126 0111-1101 125 ... 0000-0001 1 0000-0000 0 1111-1111 <--空著 1111-1110 -1 <-- 0000-0001 1111-1101 -2 <-- 0000-0010 1111-1100 -3 <-- 0000-0011 1111-1011 -4 <-- 0000-0100 ... 1000-0001 -126 <-- 0111-1110 1000-0000 -127 <-- 0111-1111 無-128 <-- 因此考慮用2's補數 1's補數後 加一. 1111-1111 -1 <-- 0000-0001 1111-1110+1 1111-1110 -2 <-- 0000-0010 1111-1101+1 1111-1101 -3 <-- 0000-0011 1111-1100+1 1111-1100 -4 <-- 0000-0100 1111-1011+1 1111-1011 -5 <-- 0000-0101 1111-1010+1 ... 1000-0001 -127 <-- 0111-1111 1000-0000+1 1000-0000 -128<-- 1000-0000 0111-1111+1=1000-0000 ``` ### **十進制轉二進制** https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=30750 ```java 15 00001111 -2 11111110 1111,1110 FE, 254 00000010-> 11111101+1==>1111-1110 -1 11111111 -1=255 -2=254, -3=253. int [] arr={0,0,0,0, 0,0,0,0}; if(n<0) n+=256; // -2會變程254, -1會變成255. i=0; do{ q=n/2; r=n %2; arr[i++]=r; n=q; }while(n>0); ```