Ошибка расчета?Или что-то другое? - PullRequest
0 голосов
/ 18 августа 2011

Так что я не уверен, что я просто слеп к этой проблеме или что происходит. Из всего, что я проверил, это должно работать просто отлично. Я предполагаю, что здесь есть что-то крошечное, что я не замечаю, и я надеюсь, что кто-то еще поймает это, потому что я не вижу этого. По сути, в первом классе есть счетчики, и он принимает и сохраняет их все, загружая старую информацию и добавляя новую. Затем он делает расчет, чтобы дать мне новый дубль для одного из них. Второй класс - это то, что их отображает. По какой-то причине он постоянно отображает onbasePerc как 0,000. Расчет, который он должен делать, должен давать мне число, и я не уверен, почему это не так.

Вот класс ввода

public class AddGameBR extends Activity{

private static final String[] stealAttempt = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15","16","17","18","19","20"};
private static final String[] stolenBase = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15","16","17","18","19","20"};
private static final String[] caughtSteal = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15","16","17","18","19","20"};
private static final String[] runs = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15","16","17","18","19","20"};

double stolenPerc=0;
int sa=0, sb=0, caught=0, run=0;

double ostolenPerc=0;
int osa=0, osb=0, ocaught=0, orun=0;

double nstolenPerc=0;
int nsa=0, nsb=0, ncaught=0, nrun=0;

public static final String PREFS_NAME = "GameSaved";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addgamebr);

    oldStats();

    //Baserunning Stats

    final Spinner spin16 = (Spinner) findViewById(R.id.spin16);
    ArrayAdapter<String> spinn16 = new
        ArrayAdapter<String>(this, R.layout.spinner_entry, stealAttempt);
    spinn16.setDropDownViewResource(R.layout.spinner_entry);
    spin16.setAdapter(spinn16);

    final Spinner spin17 = (Spinner) findViewById(R.id.spin17);
    ArrayAdapter<String> spinn17 = new
        ArrayAdapter<String>(this, R.layout.spinner_entry, stolenBase);
    spinn17.setDropDownViewResource(R.layout.spinner_entry);
    spin17.setAdapter(spinn17);

    final Spinner spin18 = (Spinner) findViewById(R.id.spin18);
    ArrayAdapter<String> spinn18 = new
        ArrayAdapter<String>(this, R.layout.spinner_entry, caughtSteal);
    spinn18.setDropDownViewResource(R.layout.spinner_entry);
    spin18.setAdapter(spinn18);

    final Spinner spin19 = (Spinner) findViewById(R.id.spin19);
    ArrayAdapter<String> spinn19 = new
        ArrayAdapter<String>(this, R.layout.spinner_entry, runs);
    spinn19.setDropDownViewResource(R.layout.spinner_entry);
    spin19.setAdapter(spinn19);

    Button save = (Button) findViewById(R.id.save);
    save.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View calculate)
        {
             //Running


            sa = Integer.parseInt((String) spin16.getSelectedItem());
            sb = Integer.parseInt((String) spin17.getSelectedItem());
            caught = Integer.parseInt((String) spin18.getSelectedItem());
            run = Integer.parseInt((String) spin19.getSelectedItem());

            nsa = sa + osa;
            nsb = sb + osb;
            ncaught = caught + ocaught;
            nrun = run + orun;

            if(nsa==0)
                nstolenPerc=0;
            else
                nstolenPerc = nsb / nsa;

            if(sa<sb){
                AlertDialog.Builder builder = new AlertDialog.Builder(AddGameBR.this);
                builder.setMessage("You have more Stolen Bases than Steal Attempts. Please fix and then resubmit.")
                       .setCancelable(false)
                       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                           }
                       });
                AlertDialog alert = builder.create();
                builder.show();
            }
            else{

                AlertDialog.Builder builder = new AlertDialog.Builder(AddGameBR.this);
                builder.setMessage("Are you sure these stats are correct? \n\nAfter submitting they are final.")
                       .setCancelable(false)
                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {


                               SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE);
                                SharedPreferences.Editor editor = settings.edit();
                                saveGame(editor);
                                editor.commit();

                               Intent i = new Intent(AddGameBR.this, ViewBR.class);
                                startActivity(i);
                                finish();
                           }
                       })
                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                           }
                       });
                AlertDialog alert = builder.create();
                builder.show();
            }
        }
    });

}

public void saveGame(SharedPreferences.Editor map){
    if (map == null) {          
        return;
    }
    //Baserunning
            map.putInt("stealattempts", nsa);
            map.putInt("stolenbases", nsb);
            map.putInt("caughtstealing", ncaught);
            map.putInt("run", nrun);
            map.putString("stealPercentage", Double.toString(nstolenPerc));
}

public void oldStats(){
     SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE);
    //Baserunning
        osa = saved.getInt("stealattempts", 0);
        osb = saved.getInt("stolenbases", 0);
        ocaught = saved.getInt("caughtstealing", 0);
        orun = saved.getInt("run", run);
        ostolenPerc = Double.parseDouble(saved.getString("stealPercentage", "0"));
}

}

Это класс просмотра

public class ViewBR extends Activity{
public static final String PREFS_NAME = "GameSaved";

double stolenPerc=0;
int sa=0, sb=0, caught=0, run=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewbr);

// this.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    oldStats();

    final DecimalFormat formatter = new DecimalFormat("0.000");

    if(sa==0)
        stolenPerc=0;
    else
        stolenPerc = sb / sa;

  //Base Running

    TextView stealattempts = (TextView)findViewById(R.id.stealattempts);
    stealattempts.setText("Steal Attempts: " + sa);

    TextView stolenbases = (TextView)findViewById(R.id.stolenbases);
    stolenbases.setText("Stolen Bases: " + sb);

    TextView caughtstealing = (TextView)findViewById(R.id.caughtstealing);
    caughtstealing.setText("Caught Stealing: " + caught);

    TextView runs = (TextView)findViewById(R.id.runs);
    runs.setText("Runs: " + run);

    TextView stolenpercentage = (TextView)findViewById(R.id.stolenpercentage);
    stolenpercentage.setText("Stolen Base Percentage: " + formatter.format(stolenPerc) + "%");

    Button copy = (Button) findViewById(R.id.copy_btn);
    copy.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View copy)
        {
            ClipboardManager clipboard = 
                      (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 

                 clipboard.setText("Base Running Stats:" +
                        "\nSteal Attempts: " + sa+
                        "\nStolen Bases: " + sb +
                        "\nCaught Stealing: " + caught +
                        "\nRuns: " + run +
                        "\nStolen Base Percentage: " + formatter.format(stolenPerc) + "%");
                 Toast.makeText(ViewBR.this, "Copied To Clipboard", 1).show();
        }
    });


}

public void oldStats(){
     SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE);

    //Baserunning
        sa = saved.getInt("stealattempts", 0);
        sb = saved.getInt("stolenbases", 0);
        caught = saved.getInt("caughtstealing", 0);
        run = saved.getInt("run", run);
        stolenPerc = Double.parseDouble(saved.getString("stealPercentage", "0"));
}

}

Любая помощь будет оценена. Вероятно, это будет что-то настолько простое, что в итоге я получу удар по лицу. В любом случае позаботься. (Также, когда я вводю все это, я не представляю это с sa как ноль обычно, я пытаюсь sa как 4 и sb как 2, который должен быть .500.

1 Ответ

1 голос
/ 18 августа 2011

Отладили ли вы, чтобы пройти через codez и выяснить, какие именно значения перед тем, как проблемный метод вернет неверное значение?Также - я могу быть здесь, но целочисленное деление вернет целое число (ожидаемое значение равно .5, вместо этого оно будет равно 0).См. этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...