---
# System prepended metadata

title: '**1111004-java**'

---

# **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); 
        
```                  

    


