【发布时间】:2011-09-30 09:37:12
【问题描述】:
您好,这是我在溢出中的第一条消息(对不起,如果问题太长),我也是 java 和英语的初级。
我最近读了一个智力游戏。问题是这样的: 有四个女人,她们的名字:kirmizi - yesil -sari -mavi (这些是土耳其语中的颜色名称)每个女人都穿着这些颜色的裙子。例如;
mavi 女人穿纱丽裙
但是有两条规则:
所有女性的裙子颜色都不能和名字一样
他们的名字和裙子的长度也不能相等。例如,mavi 女人不能穿纱丽裙。但她可以穿 kirmizi 和 yesil。
你能找出每个女人的裙子颜色吗?
我已经尝试解决它,但它进入了无限循环
颜色=renk 土耳其语中的 name=isim :)
编辑:我刚刚发现了新的线索。 kirmizi 和 sari 小姐不能穿 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);
}
}
【问题讨论】:
-
您应该从正确缩进代码开始,这样其他人阅读起来就不会那么困难了。此外,与其提供翻译指南,不如进行搜索和替换。
-
您是否尝试使用调试器并查看 inifite 循环在哪里?当您处于无限循环时,哪个变量/s 是常数或超出范围?
-
嗨。请您解释变量
birtobir、ikitoiki、uctouc和dorttodort的含义?此外,将 cmets 添加到描述正在发生的事情的代码中不仅可以帮助其他人分析它,还可以帮助您自己理解它。 -
在最里面的循环中添加一个 System.out.println,这样您就可以看到那里发生了什么——或者使用调试器。
-
乍一看,main 方法似乎只是要返回而不经过任何循环;你定义了
birtobir=false,你的第一个循环是while ( birtobir=true && bir.renk.matches(bir.isim))。
标签: java infinite-loop