Java 被套圈绊住了,不确定出了什么问题
我只是android和java的初学者。我正试图建立一个应用程序,将告诉你,如果你赢或输的赌博鞅的基础 我的想法是,你可以设定你的钱,目标和最低赌注 例如,如果我将我的当前资金设置为1000,我的目标是获得1100,最小赌注为100,则应用程序将自动运行该功能10次,并计算赢率 现在我被绊倒了,android studio没有显示任何错误,然而,每当我尝试模拟应用程序时,它都会显示“不幸的是,应用程序已停止”对我来说一切似乎都很好,我不知道如何找到错误。。。请引导我。万分感谢Java 被套圈绊住了,不确定出了什么问题,java,android,Java,Android,我只是android和java的初学者。我正试图建立一个应用程序,将告诉你,如果你赢或输的赌博鞅的基础 我的想法是,你可以设定你的钱,目标和最低赌注 例如,如果我将我的当前资金设置为1000,我的目标是获得1100,最小赌注为100,则应用程序将自动运行该功能10次,并计算赢率 现在我被绊倒了,android studio没有显示任何错误,然而,每当我尝试模拟应用程序时,它都会显示“不幸的是,应用程序已停止”对我来说一切似乎都很好,我不知道如何找到错误。。。请引导我。万分感谢 package c
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;
}
}
package com.example.android.gambing;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.text.Editable;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.TextView;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(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目标=(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());
布尔findRate=calRate(当前货币、目标、最小赌注);
公共无效率(视图){
TextView TextView=(TextView)findViewById(R.id.TextView);
setText(“你”+winPercentage());
}
公共布尔计算率(双倍当前货币、双倍目标、双倍最小赌注){
while(currentMoney>minBet){
布尔值win=winRate();
如果(赢){
currentMoney+=minBet;
minBet=minBet;
}
否则{
当前货币-=minBet;
minBet*=2;
}
如果(当前货币>=目标){
返回true;
}
}
返回false;
}
私有布尔winRate(){
double d=Math.random();
如果(d<0.5)
返回true;
其他的
返回false;
}
公共整数百分比(){
int numberWin=0;
对于(int i=0;iminBet){
布尔值win=winRate();
如果(赢){
currentMoney+=minBet;
minBet=minBet;
}
否则{
当前货币-=minBet;
minBet*=2;
}
如果(当前货币>=目标){
返回true;
}
}
返回false;
}
私有布尔winRate(){
double d=Math.random();
如果(d<0.5)
返回true;
其他的
返回false;
}
公共整数百分比(){
int numberWin=0;
对于(int i=0;i进行以下操作:
私有编辑文本cMoney;
私人双重货币;
私有文本目标;
私人双重目标;
私人文本投注;
私人双保险;
私有布尔findRate;
@凌驾
创建时受保护的void(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);
target=Double.parseDouble(target.getText().toString());
bet=(EditText)findViewById(R.id.bet);
minBet=Double.parseDouble(bet.getText().toString());
findRate=计算利率(当前货币、目标、最小赌注);
}
您不能将这样的代码放在任何方法/构造函数之外,除非它是静态/初始值设定项块,并且这里绝对没有理由使用它们
另外,我发现calRate
中的参数名与变量currentMoney
相同,请尽量避免这种情况,这可能会让其他人阅读您的代码时感到困惑,如果您做得太过分,甚至会让编译器感到困惑。请注意:
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()的括号内然后将Target、minBet、findRate和currentMoney等变量导出到字段中,以便在该类的其他部分可以看到它们。您好,非常感谢您的评论,根据您的建议,我已经在onCreate下添加了这些变量,但是,现在弹出新的错误,表示在winPercentage中,它无法解析“currentMoney”等等……不,你没有像我说的那样做,你的变量需要在onCreate
方法上面声明,你在onCreate
方法中这样做,仔细看我的帖子。你的变量需要是实例变量,现在它们是onCreate
方法中的局部变量,所以它们在任何地方都不可见lse:)嗨,现在我已经把它放在了onCreate上面,它又回到了以前的问题,即每当我通过emulator启动应用程序时,它都会显示“不幸的是,应用程序已经停止了”,代码有什么问题吗?很抱歉,我是android新手,有时可能不懂你的意思…请仔细阅读我的帖子。在onCreate
方法中,您可以执行EditText-cMoney=…
等操作,然后查看我的帖子。cMoney
已经声明,现在您需要为它赋值,以及您正在做的事情再次声明。嗨,我又有点迷路了…你介意给我看一下确切的代码吗,这样我就可以和我的代码进行比较,找出我到底哪里出错了…?嗨,非常感谢你的评论,根据你的建议,我已经在下面添加了这些
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);