坚持循环,不知道有什么不对

时间:2016-10-02 09:11:30

标签: java android

我只是Android和Android的初学者java的。我正在尝试构建一个应用程序,告诉您是否在赌博上赢得或失去了鞅。

我的理念是,您可以设定您的金钱,目标和最低赌注。

例如,如果我将当前的金额设置为1000,并且我的目标是获得1100,并且最小赌注是100,那么应用程序将自动运行该功能10次并计算赢率。

现在我被困了,android工作室显示没有错误,但是,每当我尝试模拟应用程序时,它显示“不幸的是,应用已经停止”一切似乎对我来说都很好,我不知道如何找到错误......请指导我。百万谢谢

package com.example.android.gambling;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Editable;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

        }

        EditText cMoney = (EditText) findViewById(R.id.money);
        double currentMoney = Double.parseDouble(cMoney.getText().toString());

        EditText target = (EditText) findViewById(R.id.target);
        double theTarget = Double.parseDouble(target.getText().toString());

        EditText bet = (EditText) findViewById(R.id.bet);
        double minBet = Double.parseDouble(bet.getText().toString());

        boolean findRate = calRate(currentMoney, theTarget, minBet);


        public void seeRate(View view) {


            TextView textview = (TextView)findViewById(R.id.textView);
            textview.setText("You " + winPercentage());



        }

        public boolean calRate(double currentMoney, double theTarget, double minBet) {

            while (currentMoney>minBet){
                boolean win = winRate();
                if (win){
                    currentMoney += minBet;
                    minBet = minBet;
                }
                else {
                    currentMoney -= minBet;
                    minBet *= 2;
                }
                if (currentMoney>=theTarget){
                    return true;
                }

            }

            return false;
        }

        private boolean winRate() {
            double d = Math.random();
            if (d < 0.5)
            return true;
            else
                return false;

        }

        public int winPercentage (){
            int numberWin = 0;
            for (int i=0; i<=10; i++){
                boolean win = calRate(currentMoney, theTarget, minBet);
                if (win){
                    numberWin = numberWin + 1;
                }

            }
            return numberWin/10*100;
        }
    }

编辑(1)

 package com.example.android.gambling;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


    EditText cMoney = (EditText) findViewById(R.id.money);
    double currentMoney = Double.parseDouble(cMoney.getText().toString());

    EditText target = (EditText) findViewById(R.id.target);
    double theTarget = Double.parseDouble(target.getText().toString());

    EditText bet = (EditText) findViewById(R.id.bet);
    double minBet = Double.parseDouble(bet.getText().toString());

    boolean findRate = calRate(currentMoney, theTarget, minBet);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }


    public void seeRate(View view) {


        TextView textview = (TextView)findViewById(R.id.textView);
        textview.setText("You " + winPercentage());



    }

    public boolean calRate(double currentMoney, double theTarget, double minBet) {

        while (currentMoney>minBet){
            boolean win = winRate();
            if (win){
                currentMoney += minBet;
                minBet = minBet;
            }
            else {
                currentMoney -= minBet;
                minBet *= 2;
            }
            if (currentMoney>=theTarget){
                return true;
            }

        }

        return false;
    }

    private boolean winRate() {
        double d = Math.random();
        if (d < 0.5)
        return true;
        else
            return false;

    }

    public int winPercentage (){
        int numberWin = 0;
        for (int i=0; i<=10; i++){
            boolean win = calRate(currentMoney, theTarget, minBet);
            if (win){
                numberWin = numberWin + 1;
            }

        }
        return numberWin/10*100;
    }
}

2 个答案:

答案 0 :(得分:1)

这样做:

private EditText cMoney;
private double currentMoney;
private EditText target;
private double theTarget;
private EditText bet;
private double minBet;
private boolean findRate;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  cMoney = (EditText) findViewById(R.id.money);
  currentMoney = Double.parseDouble(cMoney.getText().toString());
  target = (EditText) findViewById(R.id.target);
  theTarget = Double.parseDouble(target.getText().toString());
  bet = (EditText) findViewById(R.id.bet);
  minBet = Double.parseDouble(bet.getText().toString());
  findRate = calRate(currentMoney, theTarget, minBet);
}

你不能将这样的代码放在任何方法/构造函数之外,除非它是静态/初始化程序块,并且绝对没有理由在这里使用它们。

另外,我发现calRate中的参数名称与您的变量currentMoney相同,请尽量避免这种情况,对于其他读取您的代码的人来说可能会让您感到困惑,甚至可能编译器,如果你走得太远。

答案 1 :(得分:0)

把这个:

    EditText cMoney = (EditText) findViewById(R.id.money);
    double currentMoney = Double.parseDouble(cMoney.getText().toString());

    EditText target = (EditText) findViewById(R.id.target);
    double theTarget = Double.parseDouble(target.getText().toString());

    EditText bet = (EditText) findViewById(R.id.bet);
    double minBet = Double.parseDouble(bet.getText().toString());

    boolean findRate = calRate(currentMoney, theTarget, minBet);

方法onCreate()的括号内,然后将变量ofTarget,minBet,findRate和currentMoney导出到字段中,以便它们可以在此类的其他部分中显示。