我一直在网上搜索这个问题的解决方案好几个小时,但找不到一个。我是java的初学者,所以我不理解很多错误,这就是为什么我自己无法纠正这个错误。
无论如何,我试图为变量赋值,然后将变量中的int值添加到另一个变量中。编译时我遇到错误:"这不是声明"还有一个错误,我错过了一个分号,如果我修复了这个陈述,我怀疑它会被清除。
以下是错误,以防您需要:
hw8_ex2_jm2rv.java:61: error: ';' expected
int sumOfGames += value;
^
hw8_ex2_jm2rv.java:61: error: not a statement
int sumOfGames += value;
^
2 errors
这是我的代码:
public static int oneGame()
{
int trueValue = 1;
int falseValue = 0;
int total = sumTwoDice();
if((total == 7) || (total == 11))
{
//System.out.println(trueValue + " " + total);
return(trueValue);
}
else if((total == 2) || (total == 3) || (total == 12))
{
//System.out.println(falseValue + " " + total);
return(falseValue);
}
else
{
int total2 = 0;
while((total2 != 7) || (total2 != total))
{
total2 = sumTwoDice();
if(total2 == total)
{
//System.out.println(trueValue + " " + total + " " + total2);
return(trueValue);
}
else if(total2 == 7)
{
//System.out.println(falseValue + " " + total + " " + total2);
return(falseValue);
}
}
}
}
你可能想知道sumTwoDice方法,它只是返回2到12之间的数字,我已经知道它正在工作。如果你想看到它我也可以发布它,只是问。
oneGame函数只是模拟掷骰游戏并返回1或0的整数值.1为胜利,0为亏损。
//this method runs a simulation of n values and returns the avg.
public static double monteCarloSim()
{
int trueValue = 1;
int falseValue = 0;
int sumOfGames = 0;
int n = 2;
for (int i = 0; i <= n; i++)
{
int value = oneGame();
int sumOfGames += value;
}
double avg = sumOfGames / n;
return(avg);
}
我现在只有一个小n,因此更容易处理并且编译速度更快。
我的主要问题是关于是什么让这个声明无效以及我该怎么做才能修复它,但是因为很多线程都没有在堆栈溢出上覆盖这个,是什么让 a 声明一般无效。希望这对我和其他没有理解这个错误的初学者有所帮助。
提前感谢您的帮助和知识!
答案 0 :(得分:1)
在循环外声明你的sum变量:
int sumOfGames = 0;
循环中值的增量:
int sumOfGames = 0;
for (int i = 0; i <= n; i++)
{
int value = oneGame();
sumOfGames += value;
}
答案 1 :(得分:0)
您应该了解声明和作业之间的区别。
声明是:int sumOfGames;
,或者您也可以声明和分配,就像您正在做的那样:int sumOfGames = 0;
。
但是你不能不多次声明变量。因此,在循环中,您不应该使用int
。这将是这样的:
for (int i = 0; i <= n; i++)
{
value = oneGame();
sumOfGames += value;
}
请注意,您需要首先声明变量,然后分配一次或多次。所以在你的情况下,整个方法看起来像:
public static double monteCarloSim()
{
/* declaration of variables */
int trueValue = 1;
int falseValue = 0;
int sumOfGames = 0;
int n = 2;
int value; //this is what you have been missing
for (int i = 0; i <= n; i++)
{
value = oneGame();
sumOfGames += value;
}
double avg = sumOfGames / n;
return(avg);
}
还可以通过不使用其他变量缩短您的循环:
public static double monteCarloSim()
{
/* declaration of variables */
int trueValue = 1;
int falseValue = 0;
int sumOfGames = 0;
int n = 2;
for (int i = 0; i <= n; i++)
{
sumOfGames += oneGame();
}
double avg = sumOfGames / n;
return(avg);
}
答案 2 :(得分:0)
只需删除
的int
部分即可
int sumOfGames += value;
所以它变成
sumOfGames += value;
您不能在变量声明中使用复合赋值运算符 - 复合赋值运算符的整个点是它使用前一个值。即使你可以这样做,它也会在同一方法中与先前的sumOfGames
声明发生冲突。
作为一种风格问题,值得注意的是,您使用的括号超出了您的需要 - 有时可以辅助可读性,但它也会伤害它。例如,而不是:
if((total == 7) || (total == 11))
{
//System.out.println(trueValue + " " + total);
return(trueValue);
}
我会写:
if (total == 7 || total == 11)
{
//System.out.println(trueValue + " " + total);
return trueValue;
}
至于什么使 语句一般无效 - 如果它以某种方式违反了Java Language Specification规则。有许多不同的方法可以发生,从词法和句法错误(根本没有任何意义的事情,如表达式中的x..y
)到语法上有效但在语义上无效的事物(例如尝试调用一个不存在的方法,或者尝试调用 存在的方法,但是由于多个重载有效但是没有一个重载比其他重载更好,所以调用是不明确的。