2015-12-02 81 views
1

我遇到問題。我有25個複選框,我需要知道檢查多少個複選框的百分比。 我的代碼如下。我有一個錯誤消息/強制關閉應用程序,當我檢查複選框。如何在android中檢查複選框時計算百分比?

p1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if (p1.isChecked()){ 
     palm1=longitude+","+latitude; 
     //Toast.makeText(getBaseContext(), palm1, Toast.LENGTH_SHORT).show(); 
    }else { 
     palm1="health"; 
     //Toast.makeText(getBaseContext(), "uncheck", Toast.LENGTH_SHORT).show(); 
    } 

    percentage(); 

     }}); 
public void percentage(){ 
    Vector<CheckBox> allCheck=new Vector<CheckBox>(); 

    int counterChecked=0; 

    allCheck.add(p1); 
    allCheck.add(p2); 
    allCheck.add(p3); 
    allCheck.add(p4); 
    allCheck.add(p5); 
    allCheck.add(p6); 
    allCheck.add(p7); 
    allCheck.add(p8); 
    allCheck.add(p9); 
    allCheck.add(p10); 
    allCheck.add(p11); 
    allCheck.add(p12); 
    allCheck.add(p13); 
    allCheck.add(p14); 
    allCheck.add(p15); 
    allCheck.add(p16); 
    allCheck.add(p17); 
    allCheck.add(p18); 
    allCheck.add(p19); 
    allCheck.add(p20); 
    allCheck.add(p21); 
    allCheck.add(p22); 
    allCheck.add(p23); 
    allCheck.add(p24); 
    allCheck.add(p25); 



    for(int i=0; i<allCheck.size();i++) 
      if(allCheck.get(i).isChecked()){ 
       // str.get(i)=longitude+","+latitude; 
      counterChecked++; 
      } 

    double percent = (counterChecked * 100)/allCheck.size(); 
    persen=String.format("%.1f", percent+"%"); 
    kerusakan= Integer.toString(counterChecked); 


} 

登錄貓:

12-02 15:27:02.280: E/AndroidRuntime(311): FATAL EXCEPTION: main 
12-02 15:27:02.280: E/AndroidRuntime(311): java.util.IllegalFormatConversionException: f is incompatible with java.lang.String 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.util.Formatter$Transformer.badArgumentType(Formatter.java:1452) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.util.Formatter$Transformer.transformFromFloat(Formatter.java:1923) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.util.Formatter$Transformer.transform(Formatter.java:1421) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.util.Formatter.doFormat(Formatter.java:1082) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.util.Formatter.format(Formatter.java:994) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.lang.String.format(String.java:2254) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.lang.String.format(String.java:2219) 
12-02 15:27:02.280: E/AndroidRuntime(311): at com.kt.MainActivity.percentage(MainActivity.java:672) 
12-02 15:27:02.280: E/AndroidRuntime(311): at com.kt.MainActivity$2.onCheckedChanged(MainActivity.java:121) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.widget.CompoundButton.setChecked(CompoundButton.java:124) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.widget.CompoundButton.toggle(CompoundButton.java:86) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.widget.CompoundButton.performClick(CompoundButton.java:98) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.view.View$PerformClick.run(View.java:8816) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.os.Handler.handleCallback(Handler.java:587) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.os.Looper.loop(Looper.java:123) 
12-02 15:27:02.280: E/AndroidRuntime(311): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.lang.reflect.Method.invokeNative(Native Method) 
12-02 15:27:02.280: E/AndroidRuntime(311): at java.lang.reflect.Method.invoke(Method.java:521) 
12-02 15:27:02.280: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-02 15:27:02.280: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-02 15:27:02.280: E/AndroidRuntime(311): at dalvik.system.NativeStart.main(Native Method) 
+1

你的logcat會告訴你它在哪裏崩潰。 – Buddy

+1

發佈你的logcat – Nas

+0

@Buddy我更新了我的日誌貓 –

回答

1

退房:

persen=String.format("%.1f", percent+"%"); 

將其更改爲:

persen=String.format("%.1f", percent); 
+1

更改爲'persen = String.format(「%。1f %%」,percent);'會好一點! – Prasanna

+0

對。如果您希望在數字後使用百分號,請使用Prasanna的代碼。我剛剛刪除了答案中的錯誤。 – FlanschiFox

+0

但是,百分比仍然不起作用,它不會計算檢查了多少個複選框。 –