java - 将int函数传递给java中的while循环
问题描述
我正在实施三个传教士和食人者问题。在实现时它在 c++ 和 python 中运行良好,但在 Java 中实现时在 while 循环中给出错误。c++中的代码如下:
/* Variables are as follows:
* im and ic = initial missionaries and cannibal respectfully
* fm and fc = final missionaries and cannibal respectfully
* status = indicates what side we are on
* select = used in solution() method to determine the boat grouping
* flag = used to determine boat's current location
* i = loop counter
*/
int im = 3, ic = 3, i, fm = 0, fc = 0, status = 0, flag = 0, select = 0;
void display(char bpass1, char bpass2)
{
cout << "\n\n\n";
for (int i = 0; i < fm; i++)
cout << " M ";
for (int i = 0; i < fc; i++)
cout << " C ";
if (flag == 0)
cout << " ~~~~~WATER~~~~~<B0(" << bpass1 << "," << bpass2 << ")AT> ";
else
cout << " <BO(" << bpass1 << "," << bpass2 << ")AT>~~~~~WATER~~~~~ ";
for (int i = 0; i < im; i++)
cout << " M ";
for (int i = 0; i < ic; i++)
cout << " C ";
}
int win()
{
return (fc == 3 && fm == 3) ? 0 : 1;
}
/**
Basic algorithm is as follows:
* 1 - Get boat's current location
* 2 - Determine passenger grouping
* 3 - Make trip
* 4 - Determine if we won
* 5 - Repeat until we won
*/
void solution()
{
while (win()) //In java gives me error here in my IDE.
{
if (!flag)
{
switch (select)
{
case 1: display('C', ' ');
ic++;
break;
case 2: display('C', 'M');
ic++; im++;
break;
}
if (((im - 2) >= ic && (fm + 2) >= fc) || (im - 2) == 0)
{
im = im - 2;
select = 1;
display('M', 'M');
flag = 1;
}
else if ((ic - 2) < im && (fm == 0 || (fc + 2) <= fm) || im == 0)
{
ic = ic - 2;
select = 2;
display('C', 'C');
flag = 1;
}
else if ((ic--) <= (im--) && (fm++) >= (fc++))
{
ic = ic - 1;
im = im - 1;
select = 3;
display('M', 'C');
flag = 1;
}
}
else
{
switch (select)
{
case 1: display('M', 'M');
fm = fm + 2;
break;
case 2: display('C', 'C');
fc = fc + 2;
break;
case 3: display('M', 'C');
fc = fc + 1;
fm = fm + 1;
break;
}
if (win())
{
if (((fc > 1 && fm == 0) || im == 0))
{
fc--;
select = 1;
display('C', ' ');
flag = 0;
}
else if ((ic + 2) > im)
{
fc--; fm--;
select = 2;
display('C', 'M');
flag = 0;
}
}
}
}
}
int main()
{
cout << "MISSIONARIES AND CANNIBAL SOLUTION";
display(' ', ' ');
solution();
display(' ', ' ');
return 0;
}
我不知道我哪里出错了。任何用相同的输出(在 java 中)或更正替换代码表示赞赏。谢谢!
代码的输出应该是:
解决方案
如果我理解正确,Javaboolean
中的类型与Number
类型(如 int、float、double、char 等)是分开的。和type之间没有隐式和显式转换,因此您不能编写类似or的东西,因为返回类型 of是 int 并且需要! 唯一的方法是在你的函数 中返回 false 和 true 。boolean
Number
while (win())
if(win())
win()
while
boolean
win
boolean win() {
return (fc == 3 && fm == 3) ? false : true;
/// or better: return !(fc == 3 && fm == 3);
}
推荐阅读
- python - 在 Mac OS 上安装 mecab-python3 时出错
- ansible - 从“tasks/alternate.yml”而不是“tasks/main.yml”开始角色
- python - 构建 MultiIndex pandas DataFrame 嵌套 Python 字典
- php - 如何使用基于数据库行的 N 个表单填充 Smyfony CollectionType
- c# - 如何为现有的数据库提供者注入/拦截 DbConnection 实例?
- javascript - 如何将依赖项传递给 Vue 组件?
- angular - 从打字稿中的集合中提取值给出错误
- amazon-web-services - 从多个账户到中央账户的 AWS 可信咨询报告
- php - 将特定数据绑定到 url
- r - 如何计算包含特定单词的值?