编辑:我的程序现在可以运行了,但是对于else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)部分仍然需要一些澄清,这对于解决难题至关重要。我只想完全了解该程序的每一点,谢谢。

这仅出于审查目的,我花了几个小时试图弄清楚。我要么获取变量的全零,要么无限循环。这是书中写的问题:

“在密码算术难题中,数学方程式是用字母写的。每个字母可以是0到9之间的数字,但是两个字母不能相同。这是一个示例问题:
发送+更多=金钱
难题的解决方案是S = 9,R = 8,O = 0,M = 1,Y = 2,E = 5,N = 6,D =7。编写一个程序,找到关于的算术难题的解决方案以下:
太+太+太+太=好
最简单的技术是对每个唯一字母(在这种情况下为T,O,G,D)使用嵌套循环。循环将系统地将0到9的数字分配给每个字母。例如,它可能首先尝试T = 0,O = 0,G = 0,D = 0,然后T = 0,O = 0,G = 0,D = 1,然后T = 0,O = 0,G = 0 ,D = 2,依此类推,直到T = 9,O = 9,G = 9,D =9。在循环体内,测试每个变量是否唯一并且方程是否成立。输出满足方程式的字母的值。”

public class PracticeProjectEight
{
    public static void main(String[] args)
    {
        int T = 0 , O = 0 , G = 0 , D = 0;
        boolean keepGoing = true;
        //boolean againT = true , againO = true , againG = true , againD = true ;

        // while (keepGoing)
        //{
            for (T = 0 ;  T > 10 ; T++)
            {
                for (O = 0 ; O > 10 ; O++)
                {
                    for (G = 0 ; G > 10 ; G++)
                    {
                        for (D = 0 ; D > 10 ; D++)
                        {
                            if ((D == G) || (D == O) || (D == T) || (G == O) || (G == T) || (O == T))
                            {
                                //keepGoing = true;
                                continue;
                            }

                            else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)
                            {
                                //keepGoing = false;
                                System.out.println("T = " + T);
                                System.out.println("O = " + O);
                                System.out.println("G = " + G);
                                System.out.println("D = " + D);
                                System.exit(0);
                            }
                        }
                    }
                }
            }
       //}
    }
}


如您所见,我尝试将所有for循环放入while循环中以控制所有内容,这是我进行的许多修复尝试之一。 (完全不起作用),所以我将其注释掉。

最佳答案

所有这些>应该是<。您需要< 10,而不是> 10

换句话说,应该是:

for (T = 0; T < 10; T++) {
    for (O = 0; O < 10; O++) {
        for (G = 0; G < 10; G++) {
            for (D = 0; D < 10; D++) {
                // your logic as before
            }
        }
    }
}

10-08 11:04