你好,这是我在溢出时的第一条消息(对不起,如果问题太长),我也是java和英语的初级。
我最近读过一款精神游戏。问题是这样的: 有四个女人,他们的名字是:kirmizi - yesil -sari -mavi (这些是土耳其语中的颜色名称)每个女人都穿着这些颜色的裙子。例如;
mavi女士穿着纱丽裙
但有两条规则:
女士的裙子颜色都不应与她们的名字相同
他们的名字和裙子的长度也不能相等。例如,mavi女人不能穿纱丽裙。但她可以穿kirmizi和yesil。
你能找到每个女人的裙子颜色吗?
我试图解决它,但它进入无限循环
颜色= RENK 土耳其语中的name = 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);
}
}
答案 0 :(得分: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)){
您最有可能:birtobir==true && .. ikitoiki==true && ... uctouc==true && ... dorttodort==true
[使用运算符== 而不是运算符= ]
birtobir=true
将birtobir设置为true,而birtobir==true
检查变量是否为true。
如果它不是错误,并且您实际上想要设置可变性 - 这是一个糟糕的样式,您应该refactor您的代码。
修改强> 还有一点我可以注意到:
if(bir.renk.length()==bir.isim.length()){
boolean birtobir=true;
}
在这里,您创建一个名为birtobir的新变量,并将其设置为true。此变量不是while
循环中检查[或应该检查]的变量。我假设你实际上想要将类成员设置为true。为此,请将boolean birtobir=true;
替换为birtobir=true;
答案 1 :(得分:0)
单个=
为变量赋值,而==
检查相等性。这意味着您应该更改while循环中的条件以检查是否相等而不是分配值。
即。
while ( birtobir=true && bir.renk.matches(bir.isim))
实际上与while (bir.renk.matches(bir.isim))
相同。
因此应将其更改为while ( birtobir==true && bir.renk.matches(bir.isim))
编辑:amit说..
答案 2 :(得分:0)
这是我的演绎。如果我理解正确,您想要打印所有有效组合吗?
public class Colours
{
private static String[] names = new String[]{"kirmizi","yesil", "sari", "mavi"};
private static String[] colors = new String[]{"kirmizi","yesil", "sari", "mavi"};
public static void main(String[] args)
{
for (int i = 0; i < names.length; i++)
{
for (int j = 0; j < colors.length; j++)
{
if(allowed(names[i], colors[j])) {
System.out.println(names[i] + " may wear " + colors[j]);
}
}
}
}
private static boolean allowed(String name, String color) {
return (!name.equals(color)) && (name.length() != color.length());
}
}
答案 3 :(得分:0)
无法确定发生了什么,但您似乎需要多次循环。
我尝试从一个简单但简单的算法开始:
for (person in persons) {
for (color in skirtColors) {
if (person.name != color && person.name.lenght != color.lenght) {
person.skirtColor = color;
} else {
person.skirtColor = "";
}
}
if (allPersonsHaveSkirts(persons)) {
// a more complete check should be done
// to make sure they all have different colored skirts
printSolution();
}
}
通过使用2个简单的有限for
循环,可以保证不会发生无限循环。