2012年8月10日 星期五

術語

計算機結構(computer architecture)、分子模型繪圖(molecular graphic),以及虛擬環境(virtual environment) 實作(implementation)、互動(interaction) 理論家(theoretician)基督教三位一體的教義(Christian doctrine of the Trinity)介質(medium)操控(tractable)物理缺陷(physical limitation)

2012年8月6日 星期一

Visual Studio認證 最新MCSD認證)MCPD-網頁程式認證班

認識MCTS和MCPD(微軟最新MCSD認證) MCTS和MCPD是Microsoft有關應用程式開發人員與解決方案設計人員的最新認証,擁有這兩種證照代表您可以使用.NET 平台和Visual Studio 2010 應用程式開發工具與網頁開發工具為企業或客戶提供最符合需求,而且具有高效能,高延展性,以及高安全性的解決方案。 快速取得證照 參加本課程,可以讓您極有效率地一舉取得Microsoft最新證照,心動不如馬上行動. 課程特色 1. 精心設計的先修課程,協助尚未熟悉.NET平台程式開發的學員建立紮實的基礎。 2. 獨一無二的系統分析設計與實作進階課程,體驗.NET系統開發的完整流程,去除紙上談兵,光說不練的缺點。 3. 完整的課程與時數,實在的價格,貼心的認證考試方案 適用對象 對程式設計有興趣者, 具程式設計經驗者尤佳 課程內容 1. 先修課程: Microsoft .NET 平台應用程式開發基礎 3天/21小時 原價9000元 2. ASP.NET網頁程式設計 6天/36小時 原價15000元 3. ADO .NET 資料庫應用程式設計 5天/30小時 原價15000元 4. 設計WCF分散式服務 5天/30小時 原價18000元 5. 物件導向分析設計與實作 5天/30小時 原價18000元 學員可享有: 1.專屬硬碟 2.MCAD/MCSD舊學員可享VIP級的學費優惠,不限版本 3.免費參加總複習 時數費用 報名PD班(含上列1,2,3,4,5四項課程) 原價75,000元 特價39,000元 ◎報名本課程學員, 每門課免費加贈價值1700元~2900元的原版教材一套 結訓學員可享原價5折的優惠價格加修Microsoft ASP.NET AJAX最新網頁開發技術速成 、Microsoft Silverlight新世代動態影音網頁開發設計 及MCTS/MCPD Windows Developer 認證班 (Windows視窗程式設計) 開課時期 PD班 2012/10/13-2012/12/16 週六、日 假日 報名  註:使用Visual C#

2012年8月5日 星期日

關於LinkedList

我用的軟體為Netbeans

老師可以開我的Hw13_2看看

取眾數的指令不是很了解
其中:
private void print2(Map<String, Integer> hm2) {
        Map<String, Integer> hm = MapUtil.sortByValue( hm2, true );
        this.jTextArea1.setText("依數值排序:\n");
        int total = 0, maxv=0;
        boolean start = false;
        LinkedList<String> ll = new LinkedList();
        for (String e : hm.keySet()) {
            if (! start) { //第一次進入
                maxv = hm.get(e);
                start = true;
            }
            if (hm.get(e) == maxv) ll.add(e);
            this.jTextArea1.append(String.format("姓%s的有 %d人\n", e, hm.get(e)));
            total += hm.get(e);
        }// 接著印出總人數及眾數
            if(maxv==1){
                this.jTextArea1.append(String.format("共有%d人,這些姓名的眾數為:%s", total,ll));
            }
            else{
               this.jTextArea1.append(String.format("共有%d人,這些姓名的眾數為:%s", total,ll.clone()));
            }
        }

紅色粗體那一段ll.clone()不知道是甚麼意思
查了API解釋為:  返回此 LinkedList 的淺表副本。
老師能為我解釋嗎
聽說改成ll.toString();也可以不知道為何@@
A:
你可以認為說clone()只是把記憶體位置複製過去

所以資料是共享的

[作業] 階乘問題 n!

1.請寫出可計算n!階乘的類別,若n=10 計算10!。

階乘
0!=1
1!=1
2!=2*1=2
3!=3*2*1=6
4!=4*3*2*1=24
依此類推

2.請運用階乘類別寫出可計算階乘和的類別,若n=3 計算1!+2!+3!。

3.請說明兩者的關係 is a 或是 has a。


A:
終於發表題目了....趕緊來看看...哈哈
回復如下:

本帖隱藏的內容需要回覆才可以瀏覽

import java.util.*;
class fact{
        private int sum = 0;
        public int setFact(int n){
                int fac=1;
                if(n == 0){
                        fac = 1 ;
                }else{
                        for(int i=1;i<=n;i++){
                                fac *= i;
                        }
                }
                        return(fac);                        
        }
        public int setSum(int m){
                for(int i =0;i<=m;i++){
                        sum+=setFact(i);
                }
                return(sum);
        }
}
public class Test3 {
        public static void main(String[] args){
                Scanner s=new Scanner(System.in);
                System.out.println("請輸入n值");
                int m = s.nextInt();
                fact ff = new fact();
                System.out.println("階乘:"+ff.setFact(m));
                System.out.println("階乘和:"+ff.setSum(m));
        }
}
兩者在同一類別中

BigInteger的使用方法

個人試著練習了一下BigInteger的使用方法
但以下程式碼卻發生9個錯誤

import static java.lang.System.*;
import java.math.*;
public class BigInteger{
    public static void main(String args[]){
        BigInteger a = new BigInteger("8786567886771666523775892");
        BigInteger b = new BigInteger("1126838773993333890888316");
        BigInteger c = a.add(b);
        out.println("a + b = " + c);
        out.println("a - b = " + a.add(b.negate()));
        out.println("a - b = " + a.subtract(b));
        out.println("a × b = " + a.multiply(b));
        out.println("a ÷ b = " + a.divide(b));
        out.println("a^3 = " + a.pow(3));
        out.println("gcd(a , b)" + a.gcd(b));
    }
}

大致發生這3種錯誤:
constructor BigInteger in class BigInteger cannot be applied to given types;
actual and formal argument lists differ in length
error: cannot find symbol

向各方高手 求解  謝謝
A:
請把你的類別名稱改掉

名稱要具唯一性

BigInteger a = new BigInteger

你是要NEW你自己,還是要NEW "java.math.BigInteger" ??
A:
說得好
其實class名稱我改過了
但是錯誤並沒有減少的趨勢
謝謝您的回答
A:
請問您的類別名稱改掉後,檔名有跟著一起改嗎?

有重新編譯??

我付上三張圖片,證明用各種方法來跑您貼上的程式碼,是正常的

By 柏宇

DOS  Eclipse  NetBeans




Q: 這就怪了 @@
看來我們改的擋名&class都一樣
居然我的DOS編譯不了
難道這台電腦有問題 = =?
我試試看其他電腦好了
非常感謝

重新指派法

請問一下大家,昨天小孟老師的第二題範例(重新指派法).
第一個問題:
有沒有test t=new test();這行.
因為想說是static頂層方法,可以直接去存取,不需要再建立物件.
想說是不是我打字的時候打錯?
第二個問題:
關於GC回收,因為會回傳s,是否是main方法內的s被回收?

public class test
{
        public static void main(String args[])
        {
                test t=new test();
                StringBuffer s=getStringBuffer();
                System.out.println("s="+s);
        }
        static StringBuffer getStringBuffer()
        {
                StringBuffer s=new StringBuffer("java");
                return s;
        }
}


A:
>>第一個問題:
>>有沒有test t=new test();這行.
你可以試試看,即使把這行mark之後一樣可以執行,因為這個t 確實沒用到

>>第二個問題:
>>關於GC回收,因為會回傳s,是否是main方法內的s被回收?
假如是 main方法內的s被回收,那誰要來接收getStringBuffer所回傳的s?

[作業] 撰寫販賣機

請以物件導向方式撰寫報紙販賣機及飲料販賣機。

1.硬幣物件有三種幣別屬性1元 5元 10元。
2.販賣機可接受硬幣物件。
3.販賣機有投幣、退幣找零、按鈕購物及顯示物品功能。
4.販賣機可賣三種商品。
要做一個使用者視窗介面出來
Q:
老師~
用import java.io.*;、BufferedReader寫的話
可以嗎~?A: 可以


A:
簡陋版瘋哥販賣機
import java.util.*;
class Coins{//硬幣類別
        private int one;
        private int five;
        private int ten;
        private int money;
        public void setMoney(int n){//應找金額硬幣數量
                money = n;
                ten=(int)n/10;
                five = (int)(n-ten*10)/5;
                one = n-(ten*10+five*5);
        }
        public void getMoney(){//印出硬幣數量
                System.out.println("退"+ten+"個10元硬幣");
                System.out.println("退"+five+"個5元硬幣");
                System.out.println("退"+one+"個1元硬幣");
                System.out.println("共退"+money+"元");
        }
}        
class Vma{
                private int money;
                private int[] moneyObj;
                public void inPutMoney(int n){//投幣
                        money = n;
                }
                public void outPutMoney(){//找零
                        Coins c = new Coins();
                        c.setMoney(this.money);
                        c.getMoney();
                }
                public void setObj(String s,int s1 , String ss,int ss1 , String sss,int sss1){//設定三種商品
                        int[] moneyObj1 = {s1,ss1,sss1};
                        moneyObj = moneyObj1;
                        System.out.print("品項   1:"+s+"   ");
                        System.out.print("2:"+ss+"   ");
                        System.out.print("3:"+sss+"\n\n");
                }
                public void moneyCount(int n){//計算金額
                        int a = money;
                        if((a-n)>=0){
                                money-=n;
                        }else{
                                System.out.println("投入金額不足");
                        }
                        
                }
                public int chooseObj(int n){//選擇項目
                        if(n==1)
                                return moneyObj[0];
                        else if(n==2)
                                return moneyObj[1];
                        else if(n==3)
                                return moneyObj[2];
                        else
                                System.out.println("輸入錯誤");
                                return 0;
                }
}
public class Test4 {
        public static void main(String[] args){
                Scanner s = new Scanner(System.in);
                System.out.println("**********************");
                System.out.println("******瘋哥販賣機******");
                System.out.println("**********************\n");
                Vma v = new Vma();
                v.setObj("可樂100元",100,"紅茶50元",50,"果汁120元",120);
                System.out.print("@@@@@@請輸入投幣金額:");
                int n=s.nextInt();
                v.inPutMoney(n);
                System.out.print("\n======請輸入購買品項例如買第一個品項就輸入1)");
                int n1 = s.nextInt();
                v.moneyCount(v.chooseObj(n1));
                v.outPutMoney();
                
        }
}

複寫跟多載是不一樣的東西

小孟老師有說用方法寫出這題目,下面是可以編譯的,但是我把System那行改了一下,編譯就出錯了,請問問題是出在哪邊?

可以編譯的:
class CShape
{
        public double area()
        {
                return 1.0;
        }
}
class CCircle extends CShape
{
        double radius;
        public double area(double r)
        {
                return r*r*3.1415926;
        }
}
class CSquare extends CShape
{
        double side;
        public double area(double s)
        {
                return s*s;
        }
}
class CTriangle extends CShape
{
        double base,height;
        public double area(double b,double h)
        {
                return b*h/2;
        }
}
public class test 
{
        public static void main(String args[])
        {
                CShape s01=new CCircle();
                System.out.println(((CCircle)s01).area(2.0));

                CShape s02=new CSquare();
                System.out.println(((CSquare)s02).area(2.0));

                CShape s03=new CTriangle();
                System.out.println(((CTriangle)s03).area(2.0,2.0));
        }
}

編譯錯誤的 
public class test 
{
        public static void main(String args[])
        {
                CShape s01=new CCircle();
                System.out.println(s01.area(2.0));

                CShape s02=new CSquare();
                System.out.println(s02.area(2.0));

                CShape s03=new CTriangle();
                System.out.println(s03.area(2.0,2.0));
        }
}

test.java:37: error: method area in class CShape cannot be applied to given type
s;
                System.out.println(s01.area(2.0));
                                      ^
  required: no arguments
  found: double
  reason: actual and formal argument lists differ in length
test.java:40: error: method area in class CShape cannot be applied to given type
s;
                System.out.println(s02.area(2.0));
                                      ^
  required: no arguments
  found: double
  reason: actual and formal argument lists differ in length
test.java:43: error: method area in class CShape cannot be applied to given type
s;
                System.out.println(s03.area(2.0,2.0));
                                      ^
  required: no arguments
  found: double,double
  reason: actual and formal argument lists differ in length
3 errors

這題錯在哪?


class test
{
        int i01,i02,sum01=0,sum02=1;
        test(int i01)
        {
                for(int i02=1;i02<=i01;i02++)
                {
                        sum01+=i02;
                        sum02*=i02;
                }
                        System.out.println("1+2+3+....+"+i01+"="+sum01);
                        System.out.println("1*2*3*....*"+i01+"="+sum02);
        }
}
import javax.swing.*;
public class test01
{
        public static void main(String args[])
        {
                int num;
                String str01;
                do
                {
                        str01=JOptionPane.showInputDialog("請輸入大於一以上數字");
                        num=Integer.parseInt(str01);
                }while(num<1);
                test t=new test(num);
        }
}

編譯會出錯訊息

test01.java:15: error: class, interface, or enum expected
import javax.swing.*;
^
1 error

A:
請把你的import

貼在 class test 上方..........

不然就是把你的class test 另外創一個類別
A:
import javax.swing.*;
public class test01
{
        public static void main(String args[])
        {
                int num;
                String str01;
                do
                {
                        str01=JOptionPane.showInputDialog("請輸入大於一以上數字");
                        num=Integer.parseInt(str01);
                }while(num<1);
                test t=new test(num);
        }
}
class test
{
        int i01,i02,sum01=0,sum02=1;
        test(int i01)
        {
                for(int i02=1;i02<=i01;i02++)
                {
                        sum01+=i02;
                        sum02*=i02;
                }
                        System.out.println("1+2+3+....+"+i01+"="+sum01);
                        System.out.println("1*2*3*....*"+i01+"="+sum02);
        }
}

請遵循package -import-class順序即可