【问题标题】:How to count the Percentage of Yes/No Responses?如何计算是/否响应的百分比?
【发布时间】:2019-12-08 20:01:49
【问题描述】:

请帮忙, 我制作了一个关于鸟类疾病的诊断应用程序。在这个应用程序中,任何 29 个问题,只是是/否响应。这种反应将找到鸟类疾病的答案。在这种情况下,我创建了 8 种鸟类疾病。

每个“是”响应的值都等于“1”。

每个“否”响应的值都等于“0”。

我想从是/否响应中计算鸟类疾病的百分比,但我失败了并且感到困惑。 示例:

鸟类疾病 (1) 100%

鸟类疾病 (2) 45%

鸟类疾病 (3) 50%

鸟类疾病 (4) 0%

Image Gif my app diagnosis.java

这是我的代码 Diagnosis.java

public class Diagnosa extends Fragment implements OnClickListener {


int nomor, jumlah_jawaban = 0;
ArrayList<String> gejala, bobot, penyakit;
ArrayList<String> jawaban;
ArrayList<Double> persentase;

String debug;
View rootView;
TextView txtGejala, txtDebug, txt1;
Button btn1, btn2, btn3, btn4, btn5, btn6;

public static Diagnosa newInstance()
{
    return new Diagnosa();
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     rootView = inflater.inflate(R.layout.fragment_diagnosa, container, false);


    nomor = 0;
    jawaban = new ArrayList<String>();
    persentase = new ArrayList<>();
    gejala = application.getGejala();
    bobot = application.getBobot();
    penyakit = application.getPenyakit();
    txt1 = (TextView) rootView.findViewById(R.id.txt1);
    txtDebug = (TextView) rootView.findViewById(R.id.txtdebug);
    txtGejala = (TextView) rootView.findViewById(R.id.txtHasil);
    txtGejala.setText(gejala.get(nomor).toString());

    btn1 = (Button) rootView.findViewById(R.id.btn1);
    btn2 = (Button) rootView.findViewById(R.id.btn2);


    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    txt1.setText("Silakan jawab pilihan gejala" + "\r\n" + "No. 1");

    return rootView;
}

public void onClick(View v)
{
    int id = v.getId();

    if (id == R.id.btn1)
    {
        jawaban.add("1");
        jumlah_jawaban++;
    }
    else if (id == R.id.btn2)
    {
        jawaban.add("0");

    }

    nomor++;
    if (nomor < gejala.size())
    {
        txtGejala.setText(gejala.get(nomor).toString());
        txt1.setText("Silakan jawab pilihan gejala" + "\r\n" + "No. "+ String.valueOf(nomor+1));

    }
    else
    {
        try {
            hitungHasil();
        } catch (Exception ex)
        {
            Toast.makeText(rootView.getContext(), ex.getMessage(), Toast.LENGTH_SHORT).show();
        }

        Fragment fragment = Hasil.newInstance();
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();


    }
}

private void hitungHasil()
{

    debug = "";
    int nourut_jawaban = 0;
    int hasil = 100;

    try {

        if (
                jawaban.get(0).equals("1")
                        && jawaban.get(1).equals("1")
                        && jawaban.get(2).equals("1")
                        && jawaban.get(3).equals("1")
                        && jawaban.get(4).equals("1")
                        && jawaban.get(5).equals("1")
                        && jawaban.get(6).equals("1")
                        && jawaban.get(7).equals("1")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("0")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 1;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("1")
                        && jawaban.get(6).equals("1")
                        && jawaban.get(7).equals("1")
                        && jawaban.get(8).equals("1")
                        && jawaban.get(9).equals("1")
                        && jawaban.get(10).equals("1")
                        && jawaban.get(11).equals("1")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 2;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("0")
                        && jawaban.get(6).equals("0")
                        && jawaban.get(7).equals("0")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("1")
                        && jawaban.get(12).equals("1")
                        && jawaban.get(13).equals("1")
                        && jawaban.get(14).equals("1")
                        && jawaban.get(15).equals("1")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 3;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("0")
                        && jawaban.get(6).equals("0")
                        && jawaban.get(7).equals("0")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("0")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("1")
                        && jawaban.get(17).equals("1")
                        && jawaban.get(18).equals("1")
                        && jawaban.get(19).equals("1")
                        && jawaban.get(20).equals("1")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 4;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("1")
                        && jawaban.get(6).equals("1")
                        && jawaban.get(7).equals("1")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("0")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("1")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("1")
                        && jawaban.get(22).equals("1")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 5;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("0")
                        && jawaban.get(6).equals("0")
                        && jawaban.get(7).equals("0")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("0")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("1")
                        && jawaban.get(24).equals("1")
                        && jawaban.get(25).equals("1")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 6;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("1")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("1")
                        && jawaban.get(4).equals("1")
                        && jawaban.get(5).equals("1")
                        && jawaban.get(6).equals("1")
                        && jawaban.get(7).equals("1")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("0")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("0")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("0")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("1")
                        && jawaban.get(27).equals("0")
                        && jawaban.get(28).equals("0")
            )
        {
            hasil = 7;
        }
        else
        if (
                jawaban.get(0).equals("0")
                        && jawaban.get(1).equals("0")
                        && jawaban.get(2).equals("0")
                        && jawaban.get(3).equals("0")
                        && jawaban.get(4).equals("0")
                        && jawaban.get(5).equals("0")
                        && jawaban.get(6).equals("0")
                        && jawaban.get(7).equals("0")
                        && jawaban.get(8).equals("0")
                        && jawaban.get(9).equals("0")
                        && jawaban.get(10).equals("0")
                        && jawaban.get(11).equals("1")
                        && jawaban.get(12).equals("0")
                        && jawaban.get(13).equals("0")
                        && jawaban.get(14).equals("0")
                        && jawaban.get(15).equals("1")
                        && jawaban.get(16).equals("0")
                        && jawaban.get(17).equals("0")
                        && jawaban.get(18).equals("1")
                        && jawaban.get(19).equals("0")
                        && jawaban.get(20).equals("0")
                        && jawaban.get(21).equals("0")
                        && jawaban.get(22).equals("0")
                        && jawaban.get(23).equals("0")
                        && jawaban.get(24).equals("0")
                        && jawaban.get(25).equals("0")
                        && jawaban.get(26).equals("0")
                        && jawaban.get(27).equals("1")
                        && jawaban.get(28).equals("1")
                )
        {
            hasil = 8;
        }

        if (hasil > 0) {

        }
        else
        {
            hasil = 100;
        }

        application.setId(jumlah_jawaban);
        application.setStatus(String.valueOf(hasil - 1));


    Toast.makeText(getActivity(), "Diagnosa Selesai", Toast.LENGTH_SHORT).show();

    } catch (Exception ex)
    {
        Toast.makeText(rootView.getContext(), ex.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

}

【问题讨论】:

    标签: java android percentage


    【解决方案1】:

    看到我还不允许添加评论(到目前为止我没有足够的声誉),以建立 Miku 的回答:一定要检查 sum != 0

    为了给你完整的想法:我已经从我不久前制作的一个应用程序中改编了这个:

    private void updatePercentage() {
        String percentText;
        double base = yesClicks + noClicks;
        if (base != 0) {
            percentage = (yesClicks) / (base / 100);
            DecimalFormat percentageFormat = new DecimalFormat("#.00");
            percentText = percentageFormat.format(percentage) + "%";
        } else {
            percentage = 0;
            percentageText = "-"; //hardcoding here so you get the idea
        }
        percentage_textView.setText("-");
    }
    

    【讨论】:

      【解决方案2】:

      你所做的就是同时计算是和否。 然后你写:

      int sum = yeses + noes;
      float percentage = (float) yeses / (float) sum * 100.0f;
      

      有点不同 - 我不禁注意到方法 hitungHasil 中的复制意大利面。你不应该那样做。而是尝试这样的事情:

      private boolean checkHitungHasil(String... values){
          for(int i=0; i<values.size; i++){
              if(!jawaban.get(i).equals(values[i])
                  return false;
          return true;
      }
      

      然后全部替换

          if (
                  jawaban.get(0).equals("1")
                          && jawaban.get(1).equals("1")
                          && jawaban.get(2).equals("1")
                          && jawaban.get(3).equals("1")
                          && jawaban.get(4).equals("1")
                          && jawaban.get(5).equals("1")
                          && jawaban.get(6).equals("1")
                          && jawaban.get(7).equals("1")
                          && jawaban.get(8).equals("0")
                          && jawaban.get(9).equals("0")
                          && jawaban.get(10).equals("0")
                          && jawaban.get(11).equals("0")
                          && jawaban.get(12).equals("0")
                          && jawaban.get(13).equals("0")
                          && jawaban.get(14).equals("0")
                          && jawaban.get(15).equals("0")
                          && jawaban.get(16).equals("0")
                          && jawaban.get(17).equals("0")
                          && jawaban.get(18).equals("0")
                          && jawaban.get(19).equals("0")
                          && jawaban.get(20).equals("0")
                          && jawaban.get(21).equals("0")
                          && jawaban.get(22).equals("0")
                          && jawaban.get(23).equals("0")
                          && jawaban.get(24).equals("0")
                          && jawaban.get(25).equals("0")
                          && jawaban.get(26).equals("0")
                          && jawaban.get(27).equals("0")
                          && jawaban.get(28).equals("0")
              )
      

      与:

      if(checkHitungHasil("1","1","1","1","1","1","1",/*7th*/ "1",
      /*8th*/"0","0","0","0","0","0","0","0","0","0",
      "0","0","0","0","0","0","0","0","0","0","0"))
          ...
      

      【讨论】:

      • Float 不是float,你可能一开始就指的是“double”。
      • 仍然:不要使用浮点数,使用双精度数。
      • 你为什么?如果我错了,请纠正我,但作为一般规则 - 是的 double 更好,但在这种特定情况下,额外的精度没有任何好处。
      • 基本上是因为 double 是“默认值”。比如:当你写出文字 100.0 时,这是一个 double 值。所以你从一个双倍乘法开始。然后你转换为浮动,这意味着你在事后放弃了精确度。如果你真的想要浮动,你可以使用sum * 100.0f
      • @Miku 但是显式转换为浮动也没有任何好处。
      猜你喜欢
      • 2020-10-21
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2021-05-26
      • 2011-06-01
      • 2021-01-10
      相关资源
      最近更新 更多