2016-10-02 9 views
-1

私はちょうどアンドロイド& javaの初心者です。私はあなたがギャンブルでマーチンゲーレに勝つか敗北するかを教えてくれるアプリを作ろうとしています。ループにくっついて、何が間違っているかわからない

私のコンセプトは、お金、ターゲット、最低ベットを設定することです。

たとえば、現在のお金が1000、目標が1100、最低ベットが100の場合、アプリは自動的に関数を10回実行して勝率を計算します。

私は固執していますが、アンドロイドスタジオはエラーを表示しませんが、アプリをエミュレートしようとすると「残念なことに、アプリが停止しました」と表示されます。エラーを見つけてください...私を案内してください。万のおかげ

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; 
    } 
} 
+1

私は多くの編集をロールバックしました。 Stackoverflowは新しいものを尋ねるためにあなたの質問を操作することができるフォーラムではありません。次に、新しい質問があります。新しい投稿を作成し、古い質問だけを残してください。 – Tom

+1

あなたのlogcatを見てください。例外スタックトレースを読んでください。いくつかの基本的なデバッグを行います。 – njzk2

答えて

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); 
} 

を/イニシャライザブロックであり、ここでそれらを使用する理由は間違いありません。

のパラメータ名は、変数と同じでcurrentMoneyであることがわかります。これを回避しようとすると、あなたのコードを読んでいる誰かが混乱している可能性があります。

+0

こんにちは、おかげさまであなたのご意見をお寄せいただきありがとうございます。私はonCreateのアドバイスを追加しましたが、今度はwinPercentageで "currentMoney"などを解決できないという新しいエラーが表示されます。 – DouglasQ

+0

いいえ、私が言ったように、あなたの変数は 'onCreate'メソッドの上で宣言する必要があり、' onCreate'メソッドでこれをやっています。私の投稿をよく見てください。あなたの変数はインスタンス変数でなければなりません。今は 'onCreate'メソッドのローカル変数ですので、他の場所には表示されません:) – Shadov

+0

HI、今はonCreateの上に置いています。私はエミュレータを介してアプリを起動するたびに、それは "残念なことに、アプリケーションが停止している"と表示され、コードに間違ったことがありますか?申し訳ありませんが、私はアンドロイドでは本当に新しいです、時々あなたが意味するものを得ることができないかもしれません... – DouglasQ

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の括弧()とをフィールドにエクスポート変数theTarget、minBet、findRateとcurrentMoney彼らは、このクラスの他の部分に表示することができます。

+0

こんにちは、あなたのアドバイスに感謝します。私はonCreateのものを追加しましたが、今度はwinPercentageで解決できないという新しいエラーが出ます"currentMoney"など... – DouglasQ

関連する問題