无限循环在哪里?

War*_*una 1 java infinite-loop

你好这是我的第一个溢出的消息(对不起,如果问题太长),我也是初级的java和英语.

我最近读了一个心灵游戏.问题是这样的:有四个女人,他们的名字:kirmizi - yesil -sari -mavi(这些是土耳其语中的颜色名称)每个女人都穿着这些颜色的裙子.例如;

mavi女人穿着纱丽裙

但有两个规则:

女士的裙子颜色都不应该与她们的名字相同

他们的名字和裙子的长度也不能相等.例如,mavi女人不能穿纱丽裙.但她可以穿kirmizi和yesil.

你能找到每个女人的裙子颜色吗?

我试图解决它,但它进入无限循环

颜色= renk名称= isim土耳其语:)

编辑:我刚发现了新的线索.小姐kirmizi和纱丽不能穿mavi和yesil裙子.他们的裙子也是不同的颜色.如果你愿意,我可以写出答案,但我相信这对像我这样的初学者来说是一个很好的问题:)

package ana;

class Ana {

   static boolean birtobir=false;
   static boolean ikitoiki=false;
   static boolean uctouc=false;
   static boolean dorttodort=false;

   String renk;
   String isim;
   public static void main(String[] args) {

        String[] isimler={"bir","iki","uc","dort"};
        String[] renkler={"kirmizi","sari","yesil","mavi"};

        Ana bir = new Ana();
        bir.isim = "kirmizi";
        bir.renk="kirmizi";

        Ana iki = new Ana();
        iki.isim = "sari";
        iki.renk="sari";

        Ana uc = new Ana();
        uc.isim = "yesil";
        uc.renk="yesil";

        Ana dort = new Ana();
        dort.isim = "mavi";
        dort.renk="mavi";

        while ( birtobir=true && bir.renk.matches(bir.isim))
               while( ikitoiki=true && iki.renk.matches(iki.isim) )
                      while( uctouc=true && uc.renk.matches(uc.isim) )
                              while( dorttodort=true && dort.renk.matches(dort.isim)) {

                                    for (int a=0;a<renkler.length;a++) {
                                        bir.renk=renkler[a];

                                        if(bir.renk.length()==bir.isim.length()) {
                                            boolean birtobir=true;
                                        }

                                        for (int b=0;b<renkler.length;b++) {
                                            iki.renk=renkler[b];

                                            if(iki.renk.length()==iki.isim.length()) {
                                                boolean ikitoiki=true;
                                            }

                                            for (int c=0;c<renkler.length;c++) {
                                                uc.renk=renkler[c];

                                                if(uc.renk.length()==uc.isim.length()) {
                                                boolean uctouc=true;

                                                for (int d=0;d<renkler.length;d++) {
                                                     dort.renk=renkler[d];

                                                }
                                                if(dort.renk.length()==dort.isim.length()){
                                                     boolean dorttodort=true;
                                                }

                                            }
                                        }   
                                    }
                               }                        
     } 


    System.out.println(bir.isim+"="+bir.renk);
    System.out.println(iki.isim+"="+iki.renk);
    System.out.println(uc.isim+"="+uc.renk);
    System.out.println(dort.isim+"="+dort.renk);


    }
}
Run Code Online (Sandbox Code Playgroud)

ami*_*mit 6

这只是一个猜测,但在这里:

while ( birtobir=true && bir.renk.matches(bir.isim))
               while( ikitoiki=true && iki.renk.matches(iki.isim) )
                      while( uctouc=true && uc.renk.matches(uc.isim) )
                              while( dorttodort=true && dort.renk.matches(dort.isim)){
Run Code Online (Sandbox Code Playgroud)

你最想要的是:birtobir==true && .. ikitoiki==true && ... uctouc==true && ... dorttodort==true[使用operator ==而不是operator = ]

birtobir=true将birtobir设置为true,同时birtobir==true检查变量是否为true.

关于java中运算符的更多细节

如果它不是一个bug,你实际上想要设置变量 - 它是一个糟糕的样式,你应该重构你的代码.

编辑: 我还能注意到的另一件事:

   if(bir.renk.length()==bir.isim.length()){
            boolean birtobir=true;
        }
Run Code Online (Sandbox Code Playgroud)

在这里,您创建一个名为birtobir 的新变量,并将其设置为true.此变量不是while循环中检查[或应该检查]的变量.我假设你实际上想要将类成员设置为true.为此,请替换boolean birtobir=true;birtobir=true;