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