我正在开发一个模拟板球游戏的应用程序。我的逻辑是正确的,但程序不断提供错误的输出,因为变化没有得到反映。我使缓存失效,并重新启动了android工作室。但是,没有反映出这些变化的小故障仍在继续。这些变化与bool变量特别相关。两天后,突然间,我运行了这个应用程序,它的表现就像预期的那样。我很困惑,在Gradle构建系统中有什么问题吗?这些乱七八糟的东西占用了我很多时间。我正在考虑改用其他的android。哪一种更好,不使用梯度?因为我对Android和Gradle感到沮丧。我并不是想散布对Android和Gradle的仇恨,但我对其性能和不一致深感沮丧。
编辑:,我有一个名为 team 的类,它有两个bool变量,用来指示团队是、batting还是bowling。
代码如下:
public class Team {
private int numberOfRunsScored, numberOfWicketsTaken;
private int numberOfBallsThrown, numberOfOversCompleted;
private String inningTypeString;
private boolean batting,balling;
public boolean isBatting() {
return batting;
}
public void setBatting(boolean batting) {
this.batting = batting;
}
public boolean isBalling() {
return balling;
}
public void setBalling(boolean balling) {
this.balling = balling;
}
在MainActivity中,我制作了类Team的两个对象为,即a“和"b"”。在比赛开始时,一个随机的结果决定哪个队先击球,哪个队打拳头。因此,对于第一局,我将行为设置为:
`public void performToss() {
tossCallByTeamA = a.tossCall();
tossOutput.setTossOutcome(tossOutput.doToss());
boolean tossOutCome = tossOutput.getTossOutcome();
if (tossOutCome == tossCallByTeamA) {
a.setInningType(Team.InningType.BATTING);
b.setInningType(Team.InningType.BOWLING);
a.setBatting(true);
b.setBalling(true);
} else {
a.setInningType(Team.InningType.BOWLING);
b.setInningType(Team.InningType.BATTING);
a.setBalling(true);
b.setBatting(true);
}
}`
在第一局之后,击球和保龄球在两队之间切换。所以我编写了下面的代码来转换角色。
public void switchViewStubs() {
//stub1.setVisibility(View.GONE);
//stub2.setVisibility(View.GONE);
alloversCompleted = true;
createViewStubs();
if (a.getInningType().equalsIgnoreCase("batting")) {
newStub1.setLayoutResource(R.layout.bowling_team_layout);
newStub2.setLayoutResource(R.layout.batting_team_layout);
a.setBatting(false);
b.setBatting(true);
}
if (a.getInningType().equalsIgnoreCase("bowling")) {
newStub1.setLayoutResource(R.layout.batting_team_layout);
newStub2.setLayoutResource(R.layout.bowling_team_layout);
b.setBatting(false);
a.setBatting(true);
}
newStub1.inflate();
newStub2.inflate();
instantiateViewsAndSettingListenersToButtons();
aRuns = 0;
bRuns = 0;
}
将文本设置为运行TextView的代码是制造麻烦并吃掉我宝贵的2-3个小时的代码,尽管我是无辜的,而且写逻辑是正确的。这是密码。
if (view.equals(oneRun)) {
//incrementBalls();
totalRuns++;
if (a.isBatting()) {
//new AlertDialog.Builder(this).setTitle("batting staus").setMessage("a is batting").show();
aRuns++;
//a.setNumberOfRunsScored(aRuns);
if (!alloversCompleted) {
incrementBalls();
updateRuns(aRuns);
}
if (alloversCompleted) {
updateRuns(0);
alloversCompleted = false;
}
if ((totalRuns > targetRuns) && (secondInning)) {
setTextOnFooter("Team A wins");
}
}
if (b.isBatting()) {
//new AlertDialog.Builder(this).setTitle("batting staus").setMessage("b is batting").show();
bRuns++;
//b.setNumberOfRunsScored(bRuns);
if (!alloversCompleted) {
incrementBalls();
updateRuns(bRuns);
}
if (alloversCompleted) {
updateRuns(0);
alloversCompleted = false;
}
if ((totalRuns > targetRuns) && (secondInning)) {
setTextOnFooter("Team B wins");
}
}
}
以上代码中的(b.isBatting)代码块根本没有执行,甚至切换了批处理角色。但是我写了正确的代码和逻辑,把击球的角色改为保龄球,把保龄球变成击球。我使现金失效并重新启动了android,但是代码不正确。我听说Gradle构建系统是快速的,因为它只考虑和构建修改过的代码,而不是一次又一次地构建所有代码。我怀疑Gradle中的一些故障没有考虑到我对bool变量所做的更改。两天后,我重新构建了代码,并再次运行,它运行得非常好。这种行为是不一致的和有问题的。有人能预测出一定是哪里出了问题吗?分级版本是gradle:4.2.2
发布于 2021-08-31 08:25:06
如果一个团队可以是“滚球”/“保龄球”或“击球”,但不能两者兼而有之,那么Team
类的设计就容易出错(因为您可以将两个值都设置为true,或者将两个值都设置为false,这意味着团队既不是“滚球”,也不是“击球”)。
让我们假设在开始时,a队是击球队(a.batting
是真,a.balling
是假),B队是相应的球(b.batting
是假的,b.balling
是真的)。
如果现在void switchViewStubs()
被调用,它将改变两支球队的“击球”状态,并保持原来的“球拍”状态。因此,我们会出现以下情况:
a.batting
是假的,a.balling
是真的,b.balling
是真这是否意味着B队在对抗自己?
如果这个“滚球”/“保龄球”或“击球”真正是排他性的,那么您应该按照以下方式更改您的Team
类:
public class Team {
private boolean batting;
public boolean isBatting() {
return batting;
}
public void setBatting(boolean batting) {
this.batting = batting;
}
public boolean isBalling() {
return !batting;
}
https://stackoverflow.com/questions/68993620
复制相似问题