这是该计划应该做的事情:
这个词,zatabracabrac,不是方形的,因为它有子词,abrac两次开始 - 在这个词的第4位。
我们不允许使用字符串,中断或其他复杂内容。我得到的广场和广场不是一部分,但我找不到它的位置。我想我错了一些地方,就像我无法解决的那样。
public static void main(String[] args) {
// part (a) of the main
Scanner keyboard = new Scanner(System.in);
System.out.println("***************************");
System.out.println(" Part (a)");
System.out.println("***************************");
do{
System.out.println("Enter a word and then press enter:");
String str=keyboard.next();
char[] word = str.toCharArray();
isSquareFree(word);
System.out.println("Do you want to test another word? Press y for yes, or another key for no");
}while(keyboard.next().charAt(0)=='y');
public static void isSquareFree(char[] word){
int z = 0;
for(int i=0; i<word.length; i++){
for(int j=0; j<word.length-1;j++){
if (word[j] == word[j+1]){
z = 1;
j = word.length;
}
else{
z = 2;
}
}
}
if (z == 1){
System.out.println();
System.out.println("Not Square Free");
}
else{
System.out.println();
System.out.println("Square Free");
}
}
}
答案 0 :(得分:1)
关于这个问题的问题:这不是你解决家庭作业的地方......我们都经历了家庭作业并解决了它们(好吧,我们大多数人),这也是我们&#39的部分原因能够帮助你。
您正在检查word
是否包含两个相同的连续字符。
这不是你想要的,尝试另一种解决方案。
这就是为什么它如上所述:
for
循环对内部循环没有影响,因为内部未使用i
j
和j+1
其他说明:
j = word.length
与此处break
相同,尝试使用它,它会像结束条件一样停止循环;阅读更多:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html main
等调用的其他isSquareFree("zatabracabrac".toCharArray());
函数,即使是多个调用,也可以一次查看多个测试结果
这将大大减少更改 - 编译 - 运行 - 检查周期的长度。println/print/printf
调用来查看您拥有的迭代次数以及迭代期间的值。提示解决方案:
another level
i
尝试查找长度为k
且从i + k
开始的相应匹配的子字(这有助于连续约束)k
可以是一个字母和一半字符串之间的任何东西(超过那个就是矫枉过正,因为它不能重复两次)在您的示例中:
borborygmus
^=>
i
borborygmus
^=>
i+k
With k = 3 there is a match
zatabracabrac
^===>
i
zatabracabrac
^===>
i+k
With k = 5 there is a match