看板java
標 題Re: 請問要怎樣化簡這段code...
發信站無名小站 (Thu Mar 2 23:19:14 2006)
轉信站ptt!ctu-reader!Spring!ctu-peer!news.nctu!csnews.cs.nctu!news.cs.nctu!n
※ 引述《ee55244 (好想睡覺啊orz)》之銘言:
> 我是要用來檢查一個點是否被上下左右包住...
從你的程式碼 看不太懂甚麼叫包住 (汗).....
> 以下的x和y的值都有點大(最少有1024 最大大約是到10240)...
> 我這樣做等於是土法煉鋼...所以執行起來真的很慢...
> 原則上四個迴圈的結構相同...所以我在想可能可以合併...
> 讓執行一次時可以不跑這麼多次好讓效率上升...
> 我現在是想到用一個雙層的迴圈...
> 但是卻想不到怎樣去控制變數讓它同時往(x,y)的上下左右去檢查...
> 想請位各位有沒有一些方法可以讓他效率更好...謝謝大家<(_ _)>
我想到的想法 (好像沒有比較好 XD)
不過就是把四個方向集中在同一個for迴圈做
boolean[] location=new boolean[4];
for(int i=0;i<4;i++) location[i]=true;
for(int c=0;location[0]||location[1]||location[2]||location[3];c++){
try{
if(location[0]&&xy[x+c][y]==1){ //往右
test++;
location[0]=false;
}
}catch(Exception e){ //out of bound exception
location[0]=false;
}
try{
if(location[1]&&xy[x-c][y]==1){ //往左
test++;
location[1]=false;
}
}catch(Exception e){ //out of bound exception
location[1]=false;
}
try{
if(location[2]&&xy[x][y-c]==1){ //往上
test++;
location[2]=false;
}
}catch(Exception e){ //out of bound exception
location[2]=false;
}
try{
if(location[3]&&xy[x][y+c]==1){ //往下
test++;
location[3]=false;
}
}catch(Exception e){ //out of bound exception
location[3]=false;
}
}
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以不殆 A01015B.dorm.yzu.edu.tw海