数组 - 无方字

时间:2014-10-28 23:35:41

标签: java arrays char

这是该计划应该做的事情:

这个词,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");
    }
  }
}

1 个答案:

答案 0 :(得分:1)

关于这个问题的问题:这不是你解决家庭作业的地方......我们都经历了家庭作业并解决了它们(好吧,我们大多数人),这也是我们&#39的部分原因能够帮助你。

您正在检查word是否包含两个相同的连续字符。 这不是你想要的,尝试另一种解决方案。

这就是为什么它如上所述:

  • 外部for循环对内部循环没有影响,因为内部未使用i
  • 与角色和下一个角色相同的迭代中的索引jj+1

其他说明:

  • j = word.length与此处break相同,尝试使用它,它会像结束条件一样停止循环;阅读更多:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
  • 为了便于测试,您可能希望使用仅包含main等调用的其他isSquareFree("zatabracabrac".toCharArray());函数,即使是多个调用,也可以一次查看多个测试结果 这将大大减少更改 - 编译 - 运行 - 检查周期的长度。
  • 您可以在IDE(Eclipse或IntelliJ)中使用调试器来查看程序的功能。
  • 如果不进行调试,您可以使用println/print/printf调用来查看您拥有的迭代次数以及迭代期间的值。

提示解决方案:

  • 我认为你基本上是在寻找连续的k长子字副本
  • 你在评论中说得对,任意长度给它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