總網頁瀏覽量

2015年9月29日 星期二

[Java] Java object sorting example (Comparable and Comparator)

因為上次練習Ex_PriorityQueue_1用到了 Comparator,
但是書裡看到的
PriorityQueue<String> pq = new PriorityQueue<String> (3,c);
拿Comparator c 來和3 做大於, 等於, 小於的比較座排序.
所以啥一下資料看到了之前也貼過的連結

http://give.pixnet.net/blog/post/11346747-how-to-sort-objects-in-java-%28%E6%8E%92%E5%BA%8Fjava%E7%89%A9%E4%BB%B6%29

又查了一下看到外國網站的範例

http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

現在在把這個外國按歷練習一下

Sort_an_Array

import java.util.*;

public class Sort_an_Array{
    public static void main(String args[]){

        String[] fruits = new String[] {"Pineapple","Apple", "Orange", "Banana"};
        Arrays.sort(fruits);
        int i=0;
        for(String temp: fruits){
            System.out.println("fruits " + ++i + " : " + temp);
        }
    }
}

-----------------------
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
----------------------- 
可以看出 Arrays.sort 所作的排列是以字母開頭唯排序標準, 由大到小.

Sort_an_ArrayList
import java.util.*;

public class Sort_an_ArrayList{
 public static void main(String args[]){
  List<String> fruits = new ArrayList<String>();
  fruits.add("Pineapple");
  fruits.add("Apple");
  fruits.add("Orange");
  fruits.add("Banana");
  
  Collections.sort(fruits);
  int i = 0;
  for(String temp: fruits){
   System.out.println("fruits "+ ++i +" : "+temp);
  }
  
 }
}
-----------------------
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
----------------------- 
Collections.sort(fruits); 好像也是一字母排列




Sort_an_Object_with_Comparable

import java.util.Arrays;


public class Sort_an_Object_with_Comparable{
 
 public static void main(String args[]){

  Fruit[] fruits = new Fruit[4];
  
  Fruit pineappale = new Fruit("Pineapple", "Pineapple description",70); 
  Fruit apple = new Fruit("Apple", "Apple description",100); 
  Fruit orange = new Fruit("Orange", "Orange description",80); 
  Fruit banana = new Fruit("Banana", "Banana description",90); 
  
  fruits[0]=pineappale;
  fruits[1]=apple;
  fruits[2]=orange;
  fruits[3]=banana;
  
  Arrays.sort(fruits);

  int i=0;
  for(Fruit temp: fruits){
     System.out.println("fruits " + ++i + " : " + temp.getFruitName() + 
   ", Quantity : " + temp.getQuantity());
  }
 } 
}


(NO: public)class Fruit{
 
 private String fruitName;
 private String fruitDesc;
 private int quantity;
 
 public Fruit(String fruitName, String fruitDesc, int quantity) {
  super();
  this.fruitName = fruitName;
  this.fruitDesc = fruitDesc;
  this.quantity = quantity;
 }
 
 public String getFruitName() {
  return fruitName;
 }
 public void setFruitName(String fruitName) {
  this.fruitName = fruitName;
 }
 public String getFruitDesc() {
  return fruitDesc;
 }
 public void setFruitDesc(String fruitDesc) {
  this.fruitDesc = fruitDesc;
 }
 public int getQuantity() {
  return quantity;
 }
 public void setQuantity(int quantity) {
  this.quantity = quantity;
 }
}


卡關(1)
Sort_an_Object_with_Comparable.java:31: error: class Fruit is public, 
should be declared in a file named Fruit.java
public class Fruit{
       ^
以上這個例外是因為多了public.
 
改完之後就可以執行了,
卡關(2)
但是又會出現
Exception in thread "main" java.lang.ClassCastException: Fruit cannot be cast to java.lang
.Comparable
        at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
        at java.util.ComparableTimSort.sort(Unknown Source)
        at java.util.Arrays.sort(Unknown Source)
        at Sort_an_Object_with_Comparable.main(Sort_an_Object_with_Comparable.java:53)
 
在 class Fruit{ 理面加上這些還是不行, 跟之前Ex_PriorityQueue_1的寫好好像不同
 >< 這裡有夠怪異的

 public int compareTo(Fruit compareFruit) {
 
  int compareQuantity = ((Fruit) compareFruit).getQuantity(); 
  
  //ascending order
  return this.quantity - compareQuantity;
  
  //descending order
  //return compareQuantity - this.quantity;
  
 }  
 
歐歐歐歐歐
由錯誤訊息最後一個知道說, 錯誤出現在65行, 也就是 Arrays.sort(fruits);
網路上也說
Nice try, but, what you expect the Arrays.sort() will do? 
You didn’t even mention what to sort in the Fruit class. 
 
把他刪掉就可以執行了 

The new Fruit class implemented the Comparable interface, and overrided the compareTo() method to compare its quantity property in ascending order.
The compareTo() method is hard to explain, in integer sorting, just remember
  1. this.quantity – compareQuantity is ascending order.
  2. compareQuantity – this.quantity is descending order.
To understand more about compareTo() method, read this Comparable documentation.

 現在理解是說, 可以用Comparable的interface, Comparable會複寫compareTo()方法,
用quantity來比叫座排序, 而 ascending 是漸升的; descending 漸減

改完之後就可以執行了. ^.<

完整程式碼
Sort_an_Object_with_Comparable
 import java.util.*;

class Fruit{
   
    private String fruitName;
    private String fruitDesc;
    private int quantity;
   
    public Fruit(String fruitName, String fruitDesc, int quantity) {
        super();
        this.fruitName = fruitName;
        this.fruitDesc = fruitDesc;
        this.quantity = quantity;
    }
   
    public String getFruitName() {
        return fruitName;
    }
    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }
    public String getFruitDesc() {
        return fruitDesc;
    }
    public void setFruitDesc(String fruitDesc) {
        this.fruitDesc = fruitDesc;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
   
    public int compareTo(Fruit compareFruit) {
   
        int compareQuantity = ((Fruit) compareFruit).getQuantity();
       
        //ascending order
        return this.quantity - compareQuantity;
       
        //descending order
        //return compareQuantity - this.quantity;
       
    }   
}


public class Sort_an_Object_with_Comparable{
   
    public static void main(String args[]){

        Fruit[] fruits = new Fruit[4];
       
        Fruit pineappale = new Fruit("Pineapple", "Pineapple description",70);
        Fruit apple = new Fruit("Apple", "Apple description",100);
        Fruit orange = new Fruit("Orange", "Orange description",80);
        Fruit banana = new Fruit("Banana", "Banana description",90);
       
        fruits[0]=pineappale;
        fruits[1]=apple;
        fruits[2]=orange;
        fruits[3]=banana;
       
        int i=0;
        for(Fruit temp: fruits){
           System.out.println("fruits " + ++i + " : " + temp.getFruitName() +
            ", Quantity : " + temp.getQuantity());
        }
    }   
}


----------------------------------------------
fruits 1 : Pineapple, Quantity : 70
fruits 2 : Apple, Quantity : 100
fruits 3 : Orange, Quantity : 80
fruits 4 : Banana, Quantity : 90
----------------------------------------------
 
Sort_an_Object_with_Comparator 
import java.util.Comparator;

class Fruit implements Comparable<Fruit>{
 
 private String fruitName;
 private String fruitDesc;
 private int quantity;
 
 public Fruit(String fruitName, String fruitDesc, int quantity) {
  super();
  this.fruitName = fruitName;
  this.fruitDesc = fruitDesc;
  this.quantity = quantity;
 }
 
 public String getFruitName() {
  return fruitName;
 }
 public void setFruitName(String fruitName) {
  this.fruitName = fruitName;
 }
 public String getFruitDesc() {
  return fruitDesc;
 }
 public void setFruitDesc(String fruitDesc) {
  this.fruitDesc = fruitDesc;
 }
 public int getQuantity() {
  return quantity;
 }
 public void setQuantity(int quantity) {
  this.quantity = quantity;
 }

 public int compareTo(Fruit compareFruit) {
 
  int compareQuantity = ((Fruit) compareFruit).getQuantity(); 
  
  //ascending order
  return this.quantity - compareQuantity;
  
  //descending order
  //return compareQuantity - this.quantity;
  
 }
 
 public static Comparator<Fruit> FruitNameComparator = new Comparator<Fruit>() {

     public int compare(Fruit fruit1, Fruit fruit2) {
      
       String fruitName1 = fruit1.getFruitName().toUpperCase();
       String fruitName2 = fruit2.getFruitName().toUpperCase();
       
       //ascending order
       return fruitName1.compareTo(fruitName2);
       
       //descending order
       //return fruitName2.compareTo(fruitName1);
     }

 };  有" ; "注意
}

以下程式碼相同
public class Sort_an_Object_with_Comparator{
 
 public static void main(String args[]){

  Fruit[] fruits = new Fruit[4];
  
  Fruit pineappale = new Fruit("Pineapple", "Pineapple description",70); 
  Fruit apple = new Fruit("Apple", "Apple description",100); 
  Fruit orange = new Fruit("Orange", "Orange description",80); 
  Fruit banana = new Fruit("Banana", "Banana description",90); 
  
  fruits[0]=pineappale;
  fruits[1]=apple;
  fruits[2]=orange;
  fruits[3]=banana; 
 
  Arrays.sort(fruits, Fruit.FruitNameComparator);
 
  int i=0;
  for(Fruit temp: fruits){
     System.out.println("fruits " + ++i + " : " + temp.getFruitName() + 
   ", Quantity : " + temp.getQuantity());
  }
 } 
}
 ----------------------------------------------
fruits 1 : Pineapple, Quantity : 70
fruits 2 : Apple, Quantity : 100
fruits 3 : Orange, Quantity : 80
fruits 4 : Banana, Quantity : 90
---------------------------------------------- 

ㄟ 奇怪, 哪有排, 原來, 少了
Arrays.sort(fruits, Fruit.FruitNameComparator);
在Sort_an_Object_with_Comparator類別上加上去, 但是卻又卡關了
Sort_an_Object_with_Comparator.java:82: error: cannot find symbol
                Arrays.sort(fruits, Fruit.FruitNameComparator);
                ^
  symbol:   variable Arrays
  location: class Sort_an_Object_with_Comparator 1 error

崩潰了 QQ
 
幹, 別崩潰, 由錯誤代碼中知道, 現在complier不知道 Arrays 是三小叮噹,
拉到上面看一下發現  import java.util.Comparator; 只import了Comparator,
所以加上            import java.util.Arrays;  就可以跑囉~

 
Arrays.sort(fruits, Fruit.FruitNameComparator);
---------------------------------------------- 
fruits 1 : Apple, Quantity : 100
fruits 2 : Banana, Quantity : 90
fruits 3 : Orange, Quantity : 80
fruits 4 : Pineapple, Quantity : 70
---------------------------------------------- 
 
Arrays.sort(fruits);

fruits 1 : Pineapple, Quantity : 70
fruits 2 : Orange, Quantity : 80
fruits 3 : Banana, Quantity : 90
fruits 4 : Apple, Quantity : 100



Comparator 就像是多加限制, 不用原本的排列方法.

但是問題是為啥原本字母的時候, 昰以 A->Z 來排列,
數字的時候, 昰由小到大, 這樣推論可能是以 A 的ASCII比較小, 所以排前面.



網站抵下有些東西可以看一下:
I think it's not this     Arrays.sort(fruits, Fruit.FruitNameComparator);
but this     Collections.sort(fruits, Fruit.FruitNameComparator);
 為啥不能用 Collections


fruits is an Array, not a List.


[Java] Generics 練型

雖然泛型這種機制常常看到,
也都是略懂略懂得,
不知道為什麼對這個印象很差,
好像陌生人一樣.


import java.util.*;

public class Ex_Generic_1{
    public static void main(String args[]){
        Vector vc = new Vector();
        vc.add("AA");
        vc.add("BB");
        vc.add("CC");
       
        for(Object obj: vc){
            String data = (String)obj;
            System.out.println(data+" ");
        }
    }
}

AA
BB
CC


import java.util.*;

public class Ex_Generic_2{
    public static void main(String args[]){
        Vector<String> vc = new Vector<String>();
        vc.add("AA");
        vc.add("BB");
        vc.add("DD");
       
        for(String obj: vc){
            String data = obj;
            System.out.println(data+" ");
        }
    }
}

AA
BB
DD

2015年9月28日 星期一

[Java] PriorityQueue 練習

import java.util.*;

public class Ex_PriorityQueue_1{
    public static void main(String args[]){
        Comparator<String> c = new Comparator<String>(){
            public int compare(String a , String b){
                return a.compareTo(b)*-1;
            }
        };
        PriorityQueue<String> pq = new PriorityQueue<String> (3,c);
        pq.offer("c");
        pq.offer("a");
        pq.offer("b");
        String s;
        while((s = pq.poll())!= null){
            System.out.println(s+" ");
        }
    }
}


PriorityQueue

關於Comparator別人哦論點
http://give.pixnet.net/blog/post/11346747-how-to-sort-objects-in-java-%28%E6%8E%92%E5%BA%8Fjava%E7%89%A9%E4%BB%B6%29

[Java] HashMap 練習

import java.util.*;

public class Ex_HashMap{
    public static void main(String args[]){
        HashMap map = new HashMap();
        map.put("a","abcd");
        map.put(new Integer(200), new Integer(2));
        map.put(new Object(),"object");
        map.put(null, null);
        System.out.println(map.toString());
        System.out.println("key =A: "+ map.get("a"));
        System.out.println("key =B: "+ map.get("B"));
        System.out.println("key =new Integer(100): "+map.get(200));
    }
}


{null=null, a=abcd, 200=2, java.lang.Object@15db9742=object}
key =A: abcd
key =B: null
key =new Integer(100): 2

[Java] Queue中poll和peek的差別

 import java.util.*;

public class Ex_Queue_2{
    public static void main(String args[]){
        Queue q1 = new LinkedList();
        q1.offer("First");
        Queue q2 = new LinkedList();
        q2.offer("Second");
      
      
        System.out.println(q1.poll());
        System.out.println(q1.toString()+"\n");
        System.out.println(q2.peek());
        System.out.println(q2.toString());
      
    }
}

First
[]

Second
[Second]


poll()和peek()差別在於poll會將元素移除, 而peek只會顯示

[Java] Queue

import java.util.*;

public class Ex_Queue{
    public static void main(String args[]){
        Queue q = new LinkedList();
        q.offer("First");
        q.offer("Second");
        q.offer("Third");
       
        Object o;
        System.out.println(q.toString());
        while((o=q.poll())!=null){
            String s = (String)o;
            System.out.println(s);
        }
        System.out.println(q.toString());
    }
}




[First, Second, Third]
First
Second
Third
[]

因為每次用poll把queue內的元素取出,
所以最後是空的.

[Java] ArrayList

import java.util.*;

public class Ex_ArrayList{
    public static void main(String args[]){
        ArrayList as = new ArrayList();
       
        as.add("CCCD");
        as.add("ACDE");
        as.add("ADEF");
       
        ListIterator it = as.listIterator();
        while(it.hasNext()){
            int index = it.nextIndex();
            String data = (String) it.next();
            System.out.println(index+" "+data+"\n");
        }
    }
}

0 CCCD

1 ACDE

2 ADEF

2015年9月27日 星期日

[Java] IO test

import java.io.*;

public class Ex_File{
    public static void main(String args[]){
        File f = new File("NewFile.txt");
        System.out.println("Data exist: "+ f.exists());
        if(!f.exists()){
            System.out.print("Use createNewFile() \n");
        }
       
        try{
            System.out.println(f.createNewFile());
        }catch(IOException e){
            System.out.println(e);
        }

        System.out.println("Data exist: "+ f.exists());
    }
}

---------------------------------------
Data exist: false
Use createNewFile()
true
Data exist: true


2015年9月23日 星期三

[C] Mod 模除

模除是一種不具交換性的二元運算。

程式語言     : 運算子
C                 :   %
C++             :   %
Java            :   %
JavaScript   :   %
PHP            :    %
Microsoft Excel  :    MOD() (函數)
SQL            : mod() (函數)


但是在C鐘的%只能對於int型態作運算,
雖然C++不設址限制.
原理應該是因為取餘數數學上只取整數餘數,
如果要對於浮點數的取餘數原理上是不通的.


但是還是要取的話就會使用modf達成,
 #include <stdio.h>      /* printf */
#include <math.h>       /* fmod */
#include <cstdlib>

int main ()
{
  printf ( "fmod of 5.3 / 2 is %f\n",      fmod (5.3  , 2) );
  printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5, 4.2) );
  system("pause");
  return 0;
}

fmod of 5.3 / 2 is 1.300000
fmod of 18.5 / 4.2 is 1.700000

---------------------------------------------------------------















https://zh.wikipedia.org/wiki/%E5%90%8C%E9%A4%98

2015年9月22日 星期二

[Java] TreeSet 範例

import java.util.*;

public class Ex_TreeSet{
    public static void main(String args[]){
        HashSet hs = new HashSet();
        hs.add("SCJP");
        hs.add("SCWCD");
        hs.add("SCBCD");
        hs.add("SCMCD");
        TreeSet ts =  new TreeSet(hs);
        Iterator it = ts.iterator();
        while(it.hasNext()){
            String data = (String) it.next();
            System.out.println(data+"  ");
        }
       
    }
}





來自: 猛虎出閘

[C] 整數輸入中文輸出

11不是一十一是十一
20不是二十零而是二十
109不是一百零十九而是一百零九

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double mod(double, double);

int main(void)
{
  //  char *x;
    int a;
    char x[4];
    printf("Please input a number \n");
    scanf("%d", &a);

    sprintf(x, "%d", a);
    int sum = 0;
    for(int i = 0 ; i < 4 ; i++){
        if(x[i] > 47 && x[i] < 58){
            sum++;
        }
        printf("<%d>  ", x[i]);
       
    }
    printf("  Sum: %d  ", sum);
    if(sum > 4){
        printf("Input the number in 0~999");
        return 0;
    }
    printf("  \n++++++++++++++++\n ");

    for(int i = 0; i<3 ; i++){
        if(i==1 && sum==2 ){
            printf("十");
        }else if(sum==3 && i == 1){
            printf("百");
        }else if(sum==3 && i == 2 && x[1] != 48){
            printf("十");
        }else if(sum == 3 && i == 2 && x[1] == 48 && x[2] !=48){
            printf("零");
        }
        switch(x[i]){
            case '1':
                if(sum != 2 && i != 1)
                 printf("一");
                 break;
            case '2':
                printf("二");
                break;
            case '3':
                 printf("三");
                 break;
            case '4':
                printf("四");
                break;
            case '5':
                 printf("五");
                 break;
            case '6':
                printf("六");
                break;
            case '7':
                 printf("七");
                 break;
            case '8':
                printf("八");
                break;
            case '9':
                 printf("九");
                 break;
        }
    }

    system("pause");
    return 0;
}


2015年9月21日 星期一

[C] 測是有沒有除了fmod可以取餘數的

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double mod(double, double);

int main(void)
{
    double x, y;
    printf("Please input a number \n");
    scanf("%lf%lf", &x, &y);
   
    int a1 = x, a2 = y;

    printf("Intput %lf,  %lf\n",x, y);
    printf("Intput %d,  %d\n",a1, a2);

    printf("INT: %d\n",a1%a2);
    printf("INT: %d\n",(int)x%(int)y);
    printf("DOU: %f\n",mod(x,y));
    printf("DOU: %f\n",fmod(x,y));
    system("pause");
    return 0;
}


double mod(double a, double b){
    double sum = (int)a % (int)b;
    return sum;
}


答案是 沒有 !!!!!!!!!!!!!
%只能用在整數型態
要取浮點數的餘數, 請還是記得fmod吧, 他是在#include<math.h> 底下

[C] 字元大小寫轉換

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    char x;
    printf("Please input a char(small or big): ");
    scanf("%c", &x);
    if(x < 122 && x > 97){
        printf("%c\n",(x-32));
    }else if(x < 90 && x > 64){
        printf("%c\n",(x+32));
    }else{
        printf("Not a char");
    }
    system("pause");
    return 0;
}


2015年9月9日 星期三

[Java] 猛虎 ThreadTest

ThreadTest
public class ThreadTest{
    public static void main(String args[]){
        System.out.println("Hello Word");
        String tname = Thread.currentThread().getName();
        System.out.println(tname);
        int tnumber = Thread.activeCount();
        System.out.println(tnumber);
    }
}

Thread.currentThread().getName();
取得目前執行序名稱

Thread.activeCount();
取得目前執行序有多少可用





------------------------------------------------------------------------------------------------------------------
取自於 猛虎出閘 6


ThreadTest4
public class ThreadTest4{
    public static void main(String args[]){
        HelloTheard r1 = new HelloTheard();
        HelloTheard r2 = new HelloTheard();
        Thread t1 = new Thread(r1, "T1");
        Thread t2 = new Thread(r2, "T2");
        t1.start();
        t2.start();
       
    }
}

class HelloTheard extends Thread{
    public void run(){
        for(int i = 1 ; i <= 10 ; i++){
            String tname = Thread.currentThread().getName();
            System.out.println(i+" "+tname);
        }
    }
}


Thread t1 = new Thread(r1, "T1");
Thread t2 = new Thread(r2, "T2");
建立Thread物件


class HelloTheard implements Runnable{
    public void run(){
        for(int i = 1 ; i <= 10 ; i++){
            String tname = Thread.currentThread().getName();
            System.out.println(i+" "+tname);
        }
    }
}

Thread                                           Runnable
 

 -----------------------------------------------------------------------------------------------------------------------
class FatherThead implements Runnable{
        public void run(){
            System.out.println("Go Home");
            System.out.println("standardBath");
            System.out.println("No Fire");
            System.out.println("Cell phone");
            Thread worker = new Thread(new WorkerThread());
            System.out.println("Waite");
            worker.start();
            [                                                     ]
            System.out.println("beingBath");
            System.out.println("OverBath");
        }
}

class WorkerThread implements Runnable{
    public void run(){
        System.out.println("fire trantfor");
        try{
            for(int i = 1 ; i <=5 ; i++){
                Thread.sleep(1000);
                System.out.println(i + "min");
            }
        }catch(InterruptedException ie){
            System.out.println("AcError");
        }
       
        System.out.println("\nfire is come home\nfire is over\n");
    }
}

public class Shower{
    public static void main(String args[]){
        Thread father = new Thread(new FatherThead());
        father.start();
    }
}
---------------------
Go Home
standard Bath
No Fire
Cell phone
Waite
beingBath
OverBath
fire trantfor
1min
2min
3min
4min
5min

fire is come home
fire is over
-------------
[   ] 加上Thread.yied(); 後

Go Home
standardBath
No Fire
Cell phone
Waite
beingBath
fire trantfor
OverBath
1min
2min
3min
4min
5min

fire is come home
fire is over

---------------------



17: error: '(' expected
public void run{
                       ^

class WorkerThread implements Runnable{
    public void run(){
        ....
    }
}

run是方法, 記得加上()


11: error: incompatible types: String cannot be converted to long
Thread.sleep("1000");




13: error: package system does not exist
system.out.println("No bath");
                              ^
---------------------------------------------------

class WithDraw implements Runnable{
    private Account account;
    private double withdrawMoney;
   
    public WithDraw(Account account, double withdrawMoney){
            this.account = account;
            this.withdrawMoney = withdrawMoney;
    }
    public void run(){
        account.withDraw(account,withdrawMoney);
    }
}

class Account{
    private double balance;
    public Account(double balance){
        this.balance = balance;
    }
    public void withDraw(Account account, double withdrawMoney){
        String tName = Thread.currentThread().getName();
        System.out.println(tName+" Start ");
       
        double tmpBalance = balance;
        for(double d = 0 ; d < 99999999 ; d++);
       
        tmpBalance = tmpBalance - withdrawMoney;
        if(tmpBalance < 0){
            System.out.println("------------\n"+" No Money "+"\n------------");
        }else{
            balance = tmpBalance;
        }
        System.out.println(tName+"     OutMoney: "+withdrawMoney+"$, Overage "+ account.checkAccount());
    }
    public double checkAccount(){
        return balance;
    }
}

public class MagicMachine{
    public static void main(String args[]){
        Account ac = new Account(10000);
        System.out.println("Original money: "+ ac.checkAccount()+"$" );
        WithDraw s1 = new WithDraw(ac,5000);
        WithDraw s2 = new WithDraw(ac,2000);
        WithDraw s3 = new WithDraw(ac,4000);
        Thread t1 = new Thread(s1,"T1");
        Thread t2 = new Thread(s2,"T2");
        Thread t3 = new Thread(s3,"T3");
        t1.start();
        t2.start();
        t3.start();
    }
}


Original money: 10000.0$
T1 Start
T3 Start
T2 Start
T1     OutMoney: 5000.0$, Overage 5000.0
T2     OutMoney: 2000.0$, Overage 8000.0
T3     OutMoney: 4000.0$, Overage 6000.0

如果說for迴圈數目太小, 就會發生
Original money: 10000.0$
T1 Start
T2 Start
     OutMoney: 5000.0$, Overage 5000.0
T1 Over
------------
     OutMoney: 2000.0$, Overage 3000.0
T2 Over
------------
T3 Start
------------
 No Money
------------
     OutMoney: 4000.0$, Overage 3000.0
T3 Over
------------

速度太快使得有些執行序會跑兩次

2015年9月7日 星期一

[高中生解題程式] a001. 哈囉

Java

import java.util.Scanner;
public class a001{
    public static void main(String stgs[]){
            Scanner sc = new Scanner(System.in);
            String s;
            while (sc.hasNext()) {
                s = sc.nextLine();
                System.out.println("hello, " + s);
            }
    }
}

失敗測資:
import java.util.*;
public class a001{
    public static void main(String stgs[]){
        while(true){
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            System.out.println("hello, "+s);
        }
       
    }
}

NA:
第 1 測資點(20%): RE (code:1)
執行時期錯誤

您的程式被監控系統中斷,可能是程式無法正常結束所導致。
Exception in thread "main" java.util.NoSuchElementException: No line found
 at java.util.Scanner.nextLine(Scanner.java:1585)
 at code_2441285.main(code_2441285.java:6)

第 2 測資點(80%): RE (code:1)
執行時期錯誤
您的程式被監控系統中斷,可能是程式無法正常結束所導致。
Exception in thread "main" java.util.NoSuchElementException: No line found
 at java.util.Scanner.nextLine(Scanner.java:1585)
 at code_2441285.main(code_2441285.java:6) 
 
網路提供的解答:
http://codex.wiki/question/1885289-3312 

2015年9月3日 星期四

[水族] 養蝦記錄_9月

值接放水2/3自來水, 1/3開水, 偶爾用水耕植物的水填充

2015/08/30 拿到魚缸並開始養水
2015/09/02 魚缸開始起泡泡

原因: 消化菌沒起作用

2015/09/03
跟別人買了魚缸跟外掛, 別人多送了兩條金娃娃,
所以, 就只好直接把他們放在放了一個禮拜的養水水缸中,
其實當下看網路上都說要用的水最好要用過濾器跑使水流動,
讓水變白, 在等到細菌養成, 水變清澈.....
還好前任主人視把他們養在淡水中,
也就這樣丟下去, 過了3天還好好的, 好理家在.

2015/09/04
買黑殼蝦, 去銀合買20元, 可能是因為少量買,
所以量沒有半兩一兩個可怕, 這裡半兩還是一兩忘了, 要60元,
所以算是買貴, 但是數量剛剛好也不會死太多蝦, 整理而言反而是好事.

因為一個剛是養水 一個禮拜, 放魚跑過濾一天,
一個缸是養水一天, 水是1/2自來水, 1/2飲水機, 所以就拿就缸的水互相中和一下,
一開始試外掛輪流放, 但是只有一個外掛, 所以只好把金娃娃和黑殼下放在一起,
一開始還好, 但是一個下午過去了, 本來有蛋的母蝦只剩下一半躺在水里變食物,
心痛之際, 為了避免蝦被吃掉, 我的24cm小缸, 把莫斯排排列, 一片占了缸的2/5,
把珍奶吸管切成4分綁在一起撲上莫斯, 也放了一推雞精罐子和一推水草,
一個晚上過去了.

2015/09/05
沒錯, 天亮了, 本來以為蝦子和金娃娃可以和平共處,
因為早上還看到一推蝦子和金娃娃游在一起,
中間離開了一下, 沒開外掛, 想測看看到底可不可以活,
結果一回來, 本來一眼看到如同動物頻到草原上滿是羚羊,
蝦剛滿是瞎子奔跑的魚缸裡蝦都不見了!!!!!!

這可怕之際, 猜想應該是因為沒外掛, 含氧量不足,
蝦子跑到水面呼吸的時候被金娃娃吃了,
在有一推蝦子的其況下, 金娃娃是不會是紅蟲的,
所以, 當下又跑去買了一個150的外掛讓他們分開睡.

2015/09/06
外掛開一天, 金娃娃又開始吃紅蟲了, 蝦缸一樣把水耕薄荷值接放下去,
因為根上面也長了一推青苔, 順便拿來餵蝦, 剛好也來清理,
一個晚上沒用外掛, 等明天.

2015/09/07
一切正常, 但是天氣變冷,沒用外掛, 希望回去一就美好.
                  
2015/09/08
一切正常, 原來還有一隻孕蝦, 把吃玩的香蕉撥了一小小塊放入蝦缸,
大小跟蝦子的一半在一半一樣大, 蝦子有在吃, 所以就丟了更大塊的香蕉,
大概一隻母蝦再一半的大小.

2015/09/09
 e04, 水好白, e04, 蝦子死了好多隻, e04, 我的孕蝦居然死了.
可能是放了香蕉下去, 水變髒變濁, 細菌分解香蕉導致含氧量不夠,
雖然從睡覺到起床才6小時半,就這幾把水的氧氣搞到蝦子跳跳,
所以還是不要多事就對了 !!!!! 今天出門的時候就把外掛打開,換了一點水,
希望回去的時候可以看到蝦子快樂的還在那裏.

2015/09/10 沒錯! 就是不要管他, 讓牠自由生長, 偶而睡前跟出門中間空檔讓外掛跑一下.
                   目前安好, 目視大尬有8隻.


2015/09/13
(金娃娃)本來小隻食慾很好的, 現在都不吃東西,
以為是水質太差, 所以從學校裝一罐開水加到魚缸淨化水質,
隔天再把多餘的水拿去澆花

2015/09/14
(金娃娃)早上大隻的金娃娃有吃了一點飼料, 但是小隻的仍然沒進食,
背上的斑點顏色變淡, 好緊張 QQ
ps. 這幾天在網路上送金娃娃, 但是在外面喜好程度似乎比黑殼蝦還低,
記得去了兩次金山都看到有路邊抓魚的再讓人撈金娃娃,
台北我只看過撈烏龜跟小金魚的, 原來金娃娃已經變成麼路邊攤貨,
這種難養的魚居然還這樣賣, 既然路邊攤能賣代表生命力很強~

在蝦缸看到3隻小蝦, 雖然很開心但是想到他媽被魚吃或是被熱死心酸酸.

2015/09/16
昨晚睡前, 把養了一整天的水, 一勺水拿來換, 把金娃娃的水換了2/3, 剩下的水
就丟到蝦缸裡面當補水, 金娃娃的水還是感覺白白濯濯的, 最近都慢慢把底部
的珊瑚砂清掉, 想說這樣比較不會藏屎把缸給用髒. 而金娃娃小隻的還是一樣
不吃東西, 大隻的也指是啄了幾下食物, 真的是水的關係嗎? 前一個主人都這
樣用, 應該也還好吧...
             
而蝦缸的話, 換了那一點點水感覺有些蝦子在爆走, 但是今天早上看又恢復和
平了, 沒跳缸, 沒死蝦, 應該safe.

2015/09/17
小隻的金娃娃, 昨夜移至蝦缸, 早上蝦缸平和, 但是不知道是不是天氣太冷導致蝦子沒出來活動, 跟先前的一推蝦在運動相比之下, 但是昨晚用筷子夾了一之乾燥蝦放在金娃娃旁邊, 金娃娃卻全無動靜, 猜想可能是如同網路上的人說的, 金娃娃瞎掉了, 害我早起看paper有氣無力, 蠻難過的, 我看牠也沒吃掉任何一隻蝦吧.

至於另外一隻大金娃娃, 則是恢復了胃口, 紅蟲跟乾燥蝦一丟下去就開始吃了, 所以水質很像真的有差, 但是金娃娃金會大便, 水真的要讓他乾淨.

至於小隻的金娃娃, 我則把他載至龜吼後的一處海岸, 希望牠一路好走.

2015/09/21
把金魚藻剪半給學弟, 今天才發現原來長了一倍出來,
而蝦缸前天也撈了3隻給大眼妹,
看現在蝦缸這樣還不錯啦, 只是水草好像太多了, 反而覺得亂亂的,
莫斯現在也是用成一坨那沙子押住而以, 真是毫無美感, ㄎㄎ
而金娃娃又恢復什麼都吃了, 早知道就不要在去買乾燥蝦, 跟把他紅蟲罐賣掉了,
跟我買紅蟲了人感覺是個貪小便宜的人 = = 好像跟我一樣..
母蝦現在沒一隻抱蛋的,WHY

2015/09/29
我的金河豚, 去世了
其實蠻傷心的, 三天沒餵食 , 一回去看, 用上面的黴菌跟缸壁上的黴菌判斷應該有一-兩天了,
但是不知道是因為水質上太髒還是沒打氣造成的.

2015/09/30
蝦缸一如往常, 但是好了水蚤跟線蟲,
每次看到都用湯匙把牠撈出來東到垃圾桶,
感覺不是孑孓, 到底怎麼跑出來得還是個迷,
而蝦子則是有一隻母蝦抱蛋, 但是很奇怪, 只抱了兩顆,
平常也沒動於缸應該不會是踢蛋造成.

至於因為水蘊草上看到成群水蚤,
所以我就把水蘊草放到自來水裡面去了,
因為沒養水不知道能不能把他殺掉.

水裡清潔則是開外掛並把附近的沙子翻動,
一次到三次, 每次都是一推沉積物,
看外掛慮材都一推垢,
本來想用來擦拭缸壁, 但是一放下去就是一推髒東西飄散,
所以只好作罷,
我把裡面的海綿拿來賽太陽, 而裡面的陶瓷環則是洗一洗載丟回水裡,
讓蝦子自己清.

陶瓷環:

陶瓷環是用來讓硝化菌附著繁殖用的濾材之一.除了陶瓷環外,很多濾材都可以培殖硝化菌;例如過濾棉,生化棉,生化球,石英球,甚至連洗碗用的菜瓜布都有魚友拿來培植硝化菌;只不過硝化菌的培殖還是以陶瓷患最有效率!  

陶瓷環本身是用陶土經過高溫燒結,本身對水族箱裡的水質無害;但在硝化菌附著繁殖後,就可以淨化水質

陶瓷環之所以放在過濾器中,是因為過濾器中的環境最適合硝化菌繁殖.水流能帶來大量的氧氣,供給硝化菌生長與工作,所以一般都把陶瓷環放在過濾器中  

https://tw.answers.yahoo.com/question/index?qid=20120413000010KK03039