首页 > 解决方案 > 将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 中)或更正替换代码表示赞赏。谢谢!

代码的输出应该是:

图片的第 1 部分 图片的 第 2 部分

标签: javac++11while-loop

解决方案


如果我理解正确,Javaboolean中的类型与Number类型(如 int、float、double、char 等)是分开的。和type之间没有隐式式转换,因此您不能编写类似or的东西,因为返回类型 of是 int 并且需要! 唯一的方法是在你的函数 中返回 false 和 true 。booleanNumberwhile (win())if(win())win()whilebooleanwin

boolean win() {
    return (fc == 3 && fm == 3) ? false : true;
    /// or better: return !(fc == 3 && fm == 3);
}

推荐阅读