2015-12-02 59 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

但是,百分比仍然不起作用,它不会计算检查了多少个复选框。 –