作者game0416 (鳳狼)
看板NTUE-CS102
標題Re: [閒聊] 程設作業
時間Mon Oct 18 15:51:46 2010
沒事亂寫一下hmmm
這份能看懂大概算不錯(嗄
第二份JAVA作業是字串內數值排序
指定輸入模式 數值,數值....... ,數值
中間可能有非數值穿插,需輸出輸入錯誤
前面廢話一下原始根本作法,後面再來附幾個method各自應用這樣
不算很難....吧(?)
雖然我為了凹個東西多凹掉一小時,結論還是放棄了就是
--
首先,提供輸入的方法同樣是一個字串讀進String型態
然後你會注意到...中間夾,的關係,不能直接作排序
這個是這次題目的重點...問你怎麼作字串處理
首先,如果用以前C的方式去作,我們需要一個字元陣列...
所以參照了一下api,會得到在String裡頭有一個方法叫
toCharArray()
只要
char[] = string.toCharArray()就能得到字元陣列
有了字元陣列之後要怎麼作?
照著數值一個一個作判斷就好
--
比方說...
1,20,5,8,6,4,3
是輸入
這些存進字元陣列會變成
陣列索引:
0 1
2 3
4 5
6 7
8 9
10 11
該值 :
1 ,
2 0
, 5
, 8
, 6
4 3 (char)
設立另一個陣列與一個for迴圈從最前頭逐個檢測ASCII code
當遇到數字,就把char轉數字後減48
﹕ 0的ascii值為48,9則為57
然後存進一個temp裡頭,然後讀取下一個
是數字的話,就temp = temp*10+integer
是,時,就把計算到現在的temp置入陣列、歸零,然後檢查下一個
: ,的ascii值是44
如果不是數字也不是,,那就只要break出去之後輸出輸入錯誤即可
--
實做一小段範例code作為參考
int index = 0
for (int i=0;i<input.length;i++){
if ((int)input[i] <= 57 || (int)input[i] >= 48)
temp = temp*10+(input[i]-57);
else if ((int)input == 44){
array[index++] = temp;
temp=0;
}
else{
System.out.print ("input error");
break;
}
}
大概會像這個樣子作運作
--
面對要支援負數、小數點
也是同樣的方法,只是更多的判斷去作分別處理即可
當然,這樣的方法略顯原始...
所以可以應用其他method
比方說split()用正規表示式直接把字串拆成陣列
然後就能直接針對每個陣列元素作轉換
利用前面提及的toCharArray另創一個陣列
檢查沒問題就parse成數值陣列也是個作法這樣
--
所恐懼的,不是沒有知識的大眾 所憎恨的,不是深沉幽暗的人心
而是自以為是的思考之聲 而是自恃甚高的執法者
所毀滅的,不是溫馨和諧的世界 這是我最後的期許,沒有憤怒、沒有悔恨
而是自欺欺人的夢境 只剩下,渾沌的死亡呼吸
節自 新月神話-弒王者
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.128.171
推 teiikushi:我想問一下,走地圖的地圖,是在程式內設定?? 10/18 16:00
→ game0416:那倒是無所謂...看你要在哪裡設定地圖都可以 10/18 18:13
→ game0416:那部份不是主要要測驗的部份 10/18 18:13
→ game0416:看過課本那段,看能不能對那段演算法有點概念比較重要 10/18 18:15
推 jerry771210:加油吧 這份要拿及格分數大概寫個10分鐘 10/18 19:36
※ 編輯: game0416 來自: 120.127.47.86 (10/21 10:39)