[問題] 計算值為零

看板AndroidDev作者 (炸彈摔5566)時間12年前 (2013/05/20 19:56), 編輯推噓0(009)
留言9則, 4人參與, 最新討論串1/1
各位好,我在網路上看到下面一段程式, 我要取值在MainActivity中顯示f2跟f4的數值, 可是我能在MainActivity中顯示出f2的值, 卻顯示不出f4的值, 我用debugger看,f2有值,f3是f2的值(這f3是我用來觀看 ), 但f4的值總是為0, (1)照理來講,應該是將f2做運算而已,怎麼會是0而已? 請各位大大解說一下。 另外,我想請教,這應該跟Java有關,但我沒學過Java, (2)就前面f2已設為int,為什麼還要設f2=(int)並用()號包住裡面的計算式? 因為我移除等號後面的()號會出現錯誤,把(int)單獨移掉也是錯,這是甚麼性質? (3)另外,我如果for(i=0;i<30;i++); 其中的i算int還是哪種類型? 謝謝! public void Test() { float frequency=0; int f1=0,f2=0,i=0; int f4=0; int f3=0; AAA_time = System.currentTimeMillis(); frequency = AAA_time - LAST_AAA_time; frequency = 1000/frequency*60; f1=(int)frequency; f[29]=(int)frequency; if(f[0]>0) { for(i=0;i<30;i++) f2=f2+f[i]; f2=(int) ((f2/30) + 0.5); f3=f2; f4= (60/f3)*1000; Message msg = mHandler.obtainMessage(MainActivity.MESSAGE_READ_AAAT); Bundle b = new Bundle(); b.putInt("f2",f2); b.putInt("f3",f4); msg.setData(b); msg.sendToTarget(); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.43.36 batista5566:轉錄至看板 java 05/20 19:56

05/20 20:20, , 1F
可以說一下 f3 可能是多少嗎? 問題應該就出在 60/f3?
05/20 20:20, 1F

05/20 20:22, , 2F
大概是1~0.04間
05/20 20:22, 2F

05/20 21:02, , 3F
f3 是多少?大於60的話 (60/f3) = 0 再乘 1000也是0
05/20 21:02, 3F

05/20 21:04, , 4F
我猜你應該是要 f4=(int) ((60.0/f3)*1000);
05/20 21:04, 4F
真奇妙,為什麼60改為60.0即可? 我前面有測試過, 一開始 int f4=0; 改為 float f4=0; 接著 f4= (60/f3)*1000; 改為 f4=(float) (60/f3)*1000; b.putInt("f3",f4); 改為 b.putFloat("f3",f4); 接收端的地方也將int/Int改為float/Float等, 也是0, 但是加".0"就可以了, 可否說一下這加".0"的意思在哪嗎? 感謝><" ※ 編輯: batista5566 來自: 140.124.43.36 (05/20 21:13) ※ 編輯: batista5566 來自: 140.124.43.36 (05/20 21:19)

05/20 21:42, , 5F
60(int) 60.0(double)(此時會自動將 f3 轉型為 double)
05/20 21:42, 5F

05/20 21:44, , 6F
上面那行少說 60.0/f3 會自動將 f3 也轉為 double 計算
05/20 21:44, 6F

05/21 00:03, , 7F
這是考試嗎@@ 看不懂第一題
05/21 00:03, 7F

05/21 00:03, , 8F
沒學過java也無妨 所有的程式概念都是一樣的
05/21 00:03, 8F

05/21 00:05, , 9F
.0在java中會當成floating,你也可以寫 60F
05/21 00:05, 9F
文章代碼(AID): #1HcWz_HK (AndroidDev)