1. Are you ready for the Galaxy S20? Here is everything we know so far!

A bug in a simple code/where is it ?

Discussion in 'Android Development' started by max222, Mar 1, 2022.

  1. max222

    max222 Lurker
    Thread Starter

    I cannot find a bug in the following application for Android Studio.
    We have a set of players
    {1,...,n} and a valuation from the set of all subsets to
    {0,1}. The apllication is supposed to read numbers labeled with binary strings of length n
    corresponding to coalitions S (1 indicates that this player is in S).
    And then it should compute how many S have the property that v(S)=1 and v(S-{i})=0 for all
    players i in {1,...,n}. I have this code but it has a bug in it.


    00=v({0,0})=0
    01=v({0,1})=0
    10=v({1,0})=0
    11=v({1,1})=1

    yields 0 instead of 1 (corresponding to {1,1}). The number of all such S for all 's togeather is called "swingove" in the code.
    It should be swingove=1, but the app gives swingove=0. Below I attach MainActivity.java i aktivyty_Main.xml.

    To make clear the flow of the application, button4 increases by 1 the number of coalitions (subsets of {1,...,n})
    button2 generates the editText areas shap is the result for the shapley value (not ineteresting now)
    and banzhaf which should after "K" print the number swingove.

    I will explain any part of the code if necessary.


    Code (Text):
    1. package com.example.tablelayout6;
    2.  
    3. import androidx.appcompat.app.AppCompatActivity;
    4.  
    5. import android.icu.text.MeasureFormat;
    6. import android.os.Bundle;
    7.  
    8. import androidx.appcompat.app.AppCompatActivity;
    9.  
    10. import android.os.Bundle;
    11. import android.view.MotionEvent;
    12. import android.view.View;
    13. import androidx.constraintlayout.widget.ConstraintLayout;
    14.  
    15. import android.widget.Button;
    16. import android.widget.EditText;
    17. import android.widget.RadioButton;
    18. import android.widget.TableRow;
    19. import android.widget.TabWidget;
    20.  
    21. import android.widget.TextView;
    22. import android.widget.TableLayout;
    23.  
    24. import android.view.ViewGroup.LayoutParams;
    25. import android.widget.LinearLayout;
    26. import java.lang.StringBuilder;
    27.  
    28. public class MainActivity extends AppCompatActivity {
    29. public Integer N=0;
    30. public String a="2";
    31. private EditText editText1;
    32. private EditText linear;
    33. private Integer[] hodnoty =new Integer[10];
    34. private String[] koal=new String[10];
    35. private float[] shap=new float[10];
    36.  
    37.    [USER=1021285]@override[/USER]
    38.    protected void onCreate(Bundle savedInstanceState) {
    39.        super.onCreate(savedInstanceState);
    40.        setContentView(R.layout.activity_main);
    41.  
    42.  
    43.    }
    44.  
    45.    public boolean iswinning(Integer J,int ii) {
    46. return true;
    47.  
    48.    }
    49.  
    50.    public Integer fact (Integer f) {
    51.        if (f==0) return 1;
    52. else return f*fact((Integer) (f-1));
    53.    }
    54.  
    55.    //T pocetHracu
    56.  
    57.  
    58.    public Integer[] stringToArray(String binary) {
    59.        Integer[] arrayOfPLayers=new Integer[binary.length()];
    60.         for(int i=0;i<binary.length();i++) {
    61.             arrayOfPLayers=Integer.parseInt("" + binary.charAt(i));
    62.  
    63.         }
    64.         return arrayOfPLayers;
    65.    }
    66.  
    67.    //N je pocet koalici
    68.    public void click5(View view) {
    69.        int pocetHracu=Integer.toBinaryString(N-1).length();
    70.        Integer[][] koalice=new Integer[N][pocetHracu];
    71.        Integer[][] koalice2=new Integer[N][pocetHracu];
    72.        Integer[][] koalice3=new Integer[N][pocetHracu];
    73.  
    74.        TextView tv6 = (TextView) findViewById(R.id.textView6);
    75.  
    76.        for (Integer ith=0;ith<N;ith++) {
    77.            for(Integer T=0;T<pocetHracu;T++) {
    78.              String StringPadded=stf(Integer.toBinaryString(ith),pocetHracu-Integer.toBinaryString(ith).length());
    79.              koalice[ith][T]=stringToArray(StringPadded)[T];
    80.              koalice2[ith][T]=stringToArray(StringPadded)[T];
    81.              koalice3[ith][T]=stringToArray(StringPadded)[T];
    82.            }
    83.        }
    84.        float[] shap=new float[pocetHracu];
    85.        float[] vyhryKoalici = new float[N];
    86.        Integer[] isSwing=new Integer[pocetHracu];
    87.  
    88.        for (int i=0; i<N;i++) {
    89.            editText1 = (EditText) findViewById(330+i);
    90.            String a=editText1.getText().toString();
    91.            float f1 = Float.parseFloat(a);
    92.         vyhryKoalici=f1;
    93.        }
    94.  
    95.        Integer[] kolikJeSwingu=  new Integer[pocetHracu];
    96.  
    97.  
    98.  
    99.  
    100. String S="";
    101.        Integer jth;
    102.        for (int p = 0; p < pocetHracu; p++) {
    103.            isSwing[p] =0;
    104.            kolikJeSwingu[p]=0;
    105.        }
    106.  
    107.        for(Integer T=0;T<pocetHracu;T++) {
    108.          for (Integer ith = 0; ith < N; ith++) {
    109.  
    110.              int bool = 1;
    111.  
    112. //vyhryKoalici[ith];
    113. //musis najit jth<N pro ktere koalice3[jth]=S-ith
    114.              if (koalice[ith][T] == 1 && vyhryKoalici[ith]==1) {
    115.                  koalice3[ith][T] = 0;
    116.                  for (jth = 0; jth < N; jth++) {
    117.  
    118.                      for (int k = 0; k < pocetHracu; k++) {
    119.                          if (k != T && koalice[ith][k] != koalice3[jth][k]) {
    120.                              bool = 0;
    121.                          }
    122.                      }
    123.  
    124.                      if (vyhryKoalici[jth] == 0 && bool == 1) {
    125.                          isSwing[T]++;
    126.                      }
    127.                  }
    128.                  koalice3[ith][T]=1;
    129.              }
    130.  
    131.          }
    132.        }
    133.  
    134. //kolikJeSwingu(Integer TmaSwing, Integer pocetHracu, Integer pocetKoalici,
    135. //                                   Integer[][] koal, Integer[] koalicePriKtereJeSwing, float[] vyhryKoal)
    136.  
    137.            for (Integer ith = 0; ith < N; ith++) {
    138.                for(Integer T=0;T<pocetHracu;T++) {
    139. //isSwingBool(Integer kteraKoalice, Integer TmaSwing, Integer pocetHracu, Integer pocetKoalici,
    140. //                               Integer[][] koal, Integer[] koalicePriKtereJeSwing, float[] vyhryKoal) {
    141.  
    142.                 //   kolikJeSwingu[T]+=kolikJeSwingu(T, pocetHracu, N,
    143.                  //          koalice, koalice[ith],vyhryKoalici);
    144.  
    145.  
    146.                    if (koalice[ith][T] == 1) {
    147.                        koalice2[ith][T] = 0;
    148.                        for (jth = 0; jth < N; jth++) {
    149.                            int bool = 1;
    150.                            for (int k = 0; k < pocetHracu; k++) {
    151.                                if (k != T && koalice[ith][k] != koalice2[jth][k]) {
    152.                                    bool = 0;
    153.                                }
    154.                            }
    155.  
    156.                            int bool2=0;
    157.                            koalice2[ith][T] = 1;
    158.  
    159.                            if (vyhryKoalici[ith] == 1 && vyhryKoalici[jth] == 0) {
    160.                                for (int k = 0; k < pocetHracu; k++) {
    161.                                    if (koalice[ith][k] != koalice2[jth][k]) {
    162.                                        bool2++;
    163.                                    }
    164.                                }
    165.  
    166.                            //    if(bool2==1) {
    167.                             //       isSwing[T]++;
    168.                             //   }
    169.  
    170.                            }
    171.                            koalice2[ith][T] = 1;
    172.                            Integer t = 0;
    173.                            for (int p = 0; p < pocetHracu; p++) {
    174.                                t += koalice[ith][p];
    175.                            }
    176.                            // Integer[] isSwing=new Integer[pocetHracu];
    177.  
    178.                            if (bool == 1) {
    179.                                shap[T] += (float) ((float) fact(t - 1) * fact(pocetHracu - t) / (float) (fact(pocetHracu)) * (float) (vyhryKoalici[ith] - vyhryKoalici[jth]));
    180.                            }
    181.                        }
    182.                    }
    183.  
    184.            }
    185.        }
    186.  
    187.  
    188. S+="here";
    189.        String T2="";
    190.        T2+="banzhaf";
    191.  
    192.        Integer swingove=0;
    193.  
    194. for(int p=0;p<pocetHracu;p++) {
    195.    swingove+=isSwing[p];
    196.  
    197. }
    198.  
    199.        String strPokus="banzhaf ";
    200.  
    201. float[] banzh=new float[pocetHracu];
    202. for(int p=0;p<pocetHracu;p++)
    203. {
    204.    banzh[p]=(float) isSwing[p]/(float) swingove;
    205.  
    206. }
    207.  
    208.  
    209.         String strPokus2="shap ";
    210.  
    211.        for(int i=0;i<pocetHracu;i++) {
    212.         //   S+=(" "+String.valueOf(shap));
    213.            strPokus2+=String.format("%.2f ",shap);
    214.            strPokus+=String.format("%.2f ",banzh);
    215.        }
    216.  
    217.  
    218. //      tv6.setText(strPokus2+"\n"+strPokus+"\nswing"+isSwing[0]+"swingPrvni:"+isSwing[1]+"\nH"+swingove);
    219.  
    220.        tv6.setText(strPokus2+"\n"+strPokus+"K"+String.valueOf(swingove));
    221.    }
    222.  
    223.    public void click4(View view) {
    224.    //
    225.        linear = (EditText) findViewById(R.id.simpleEditText);
    226. if(N==0) {
    227.    linear.setText("0");
    228. }
    229.  
    230.    String     a = linear.getText().toString();
    231.       N = Integer.parseInt(a);
    232.       N++;
    233.     linear.setText(N.toString());
    234.  
    235.  
    236.    }
    237.  
    238.    public  String stf(String a,Integer l) {
    239.        if(l==0) { return a; }
    240.        l--;
    241.        return stf("0"+a,l);
    242.  
    243.    }
    244.    public void click2(View view) {
    245.        String col1;
    246.        String col2;
    247.      //  String playerChanged;
    248.  
    249.        TableLayout tl = (TableLayout)findViewById(R.id.tableLayout1);
    250.  
    251.        EditText editText = (EditText)findViewById(R.id.simpleEditText);
    252.  
    253.  
    254.        TableRow row = new TableRow(this);
    255.        TextView tv = new TextView(this);
    256.        TextView c = new TextView(this);
    257.  
    258.        //EditText etUserInfoNewValue = (EditText)findViewById(R.id.simpleEditText);
    259.   //  a = editText.getText().toString();
    260.  
    261.     tv.setId(202);
    262.  
    263.  
    264.  
    265.  
    266.        tv.setText("This is text");
    267. //
    268.        tl.addView(row);
    269.  
    270.        row.addView(tv);
    271.  
    272. int sf=Integer.toBinaryString(N-1).length();
    273.        for (int x = 0; x < N; x++) {
    274.            //String.format("%010d",(
    275.            String jl=Integer.toBinaryString(x);
    276.            String jl2=stf(jl,sf-jl.length());
    277. koal[x]=jl2;
    278.            col1 = "(" + x + ")"+jl2;
    279.           // col1 = "(" + x + ")"+Integer.toBinaryString(x);
    280.            col2 = "1";
    281.  
    282.            //col3 = "(" + x + ") Column 3";
    283.            //col4 = "(" + x + ") Column 4";
    284.  
    285.            TableRow newRow = new TableRow(this);
    286.  
    287.            TextView column1 = new TextView(this);
    288.            TextView column2 = new TextView(this);
    289.            EditText editText1 = new EditText(this);
    290.  
    291.           editText1.setId(330+x);
    292.           // String stringAnswer = editText1.getText().toString();
    293.  
    294.            TextView column3 = new TextView(this);
    295.           // TextView column4 = new TextView(this);
    296.            editText1.setText("0        ");
    297.            column1.setText(col1);
    298.            column1.setText(col1);
    299.            column2.setText(col2);
    300.            //column3.setText(col3);
    301.            //column4.setText(col4);
    302.  
    303.           // column1.setText(stringAnswer);
    304.  
    305.            newRow.addView(column1);
    306.            newRow.addView(editText1);
    307.  
    308.  
    309.  
    310.  
    311.  
    312.             newRow.addView(column3);
    313.           // newRow.addView(column4);
    314.  
    315.            tl.addView(newRow, new TableLayout.LayoutParams());
    316.        }
    317.  
    318.  
    319.  
    320.  
    321.    }
    322.  
    323.  
    324.    }
    325.  
    326. XML
    327.  
    328. <?xml version="1.0" encoding="utf-8"?>
    329. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    330.    xmlns:android2="http://schemas.android.com/apk/res/android"
    331.    android:layout_width="wrap_content"
    332.    android:layout_height="fill_parent"
    333.    android:layout_columnSpan="12"
    334.    android:layout_columnWeight="12"
    335.    android:accessibilityLiveRegion="none"
    336.    android:eek:rientation="vertical">
    337.  
    338.    <TableLayout
    339.        android:id="@+id/tableLayout1"
    340.        android:layout_width="fill_parent"
    341.        android:layout_height="wrap_content"></TableLayout>
    342.  
    343.    <Button
    344.        android:id="@+id/button2"
    345.        android:layout_width="wrap_content"
    346.        android:layout_height="wrap_content"
    347.        android:eek:nClick="click2"
    348.        android:text="Button2" />
    349.  
    350.  
    351.    <EditText
    352.        android:id="@+id/simpleEditText"
    353.        android:layout_width="wrap_content"
    354.        android:layout_height="wrap_content"
    355.        android:layout_centerInParent="true"
    356.        android:digits="10"
    357.        android:hint="Enter Your Name Here"
    358.        android:inputType="text" />
    359.  
    360.    <Button
    361.        android:id="@+id/button4"
    362.        android:layout_width="match_parent"
    363.        android:layout_height="wrap_content"
    364.        android:eek:nClick="click4"
    365.        android:text="Button4" />
    366.  
    367.    <Button
    368.        android:id="@+id/button5"
    369.        android:layout_width="match_parent"
    370.        android:layout_height="wrap_content"
    371.        android:eek:nClick="click5"
    372.        android:text="Button5" />
    373.  
    374.    <TextView
    375.        android:id="@+id/textView6"
    376.        android:layout_width="match_parent"
    377.        android:layout_height="wrap_content"
    378.        android:text="Shapley1" />
    379.  
    380.  
    381. </LinearLayout>
     


    #1 max222, Mar 1, 2022
    Last edited by a moderator: Mar 1, 2022

    1. Download the Forums for Android™ app!


      Download

       
  2. Unforgiven

    Unforgiven ...eschew obfuscation...
    Moderator

    I moved this to the development area and added code tags for readability. I hope you get this sorted. Cheers!! :)
     
  3. James_Watson

    James_Watson Android Enthusiast

    Not sure about your data structures and algorithms. But why not to step debug your code in Android Studio?
     
    GameTheory likes this.
  4. max222

    max222 Lurker
    Thread Starter

    I do not know how to use debugger. Could you point me to some video on YouTube ?
     
  5. James_Watson

    James_Watson Android Enthusiast

    First of all, create an Android Virtual Device (AVD) in order for your app to run. Check my blog for detailed information about how to create an AVD.

    Then check the official document about how to debug your app.
    https://developer.android.com/studio/debug
     
    mikedt likes this.
Loading...

Share This Page

Loading...