Java中的无方块字

Java中的无方块字,java,arrays,for-loop,Java,Arrays,For Loop,我一直在为一个班级创建一个解决问题的程序。我有一个主要的方法和一个次要的测试方法来解决这个问题,但是当出现变化时,我无法让解决方案起作用。 问题是确保一个单词是正方形,下面是问题的摘录: 对于这一部分,实现一个名为isSquareFree的方法,该方法将字符数组作为输入(引用)。您可以假设数组的元素都是小写字母。(换句话说,您不必担心这样的问题:“Z和Z是同一个字母吗?”)您的方法应该测试给定的字符输入数组是否是无平方的。如果是,则该方法应打印一条消息,说明此情况,否则它应打印一条消息,说明世界

我一直在为一个班级创建一个解决问题的程序。我有一个主要的方法和一个次要的测试方法来解决这个问题,但是当出现变化时,我无法让解决方案起作用。 问题是确保一个单词是正方形,下面是问题的摘录:


对于这一部分,实现一个名为isSquareFree的方法,该方法将字符数组作为输入(引用)。您可以假设数组的元素都是小写字母。(换句话说,您不必担心这样的问题:“Z和Z是同一个字母吗?”)您的方法应该测试给定的字符输入数组是否是无平方的。如果是,则该方法应打印一条消息,说明此情况,否则它应打印一条消息,说明世界不是无正方形的,正方形子字从何处开始,以及该子字是什么。例如,如果给定数组包含单词zatabracabrac,则该方法应打印:单词zatabracabrac不是无正方形的,因为它有子单词abrac两次,从单词的位置4开始

下面是我的当前代码,它适用于有一个重复字符彼此相邻的情况,但我不确定如何继续检查是否有多个重复字符(例如abab),也不确定如何打印重复子字

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 sqf = 0;
    for(int i=0; i<word.length; i++){
        for(int j=0; j<word.length-1;j++){
            if (word[j] == word[j+1]){
                sqf = 1;
                j = word.length;
            }
            else{
                sqf = 2;
            }
        }
    }
    if (sqf == 1){
        System.out.println();
        System.out.println("Not Square Free");
    }
    else{
        System.out.println();
        System.out.println("Square Free");
    }
}}
publicstaticvoidmain(字符串[]args){
//主要报告(a)部分
扫描仪键盘=新扫描仪(System.in);
System.out.println(“*******************************”);
System.out.println(“第(a)部分”);
System.out.println(“*******************************”);
做{
System.out.println(“输入一个单词,然后按Enter:”);
String str=keyboard.next();
char[]word=str.toCharArray();
isSquareFree(单词);
System.out.println(“您想测试另一个单词吗?按y表示是,或按另一个键表示否”);
}while(keyboard.next().charAt(0)='y');
}
公共静态无效isSquareFree(字符[]字){
int sqf=0;
对于(int i=0;i
  • 要查看一个字符序列是否重复,对于给定的序列长度(例如,n),您可以将
    if
    替换为将
    word[j+x]
    word[j+n+x]进行比较的循环<代码> <代码> x<代码> 0和n之间;如果所有n匹配,只考虑它们是相同的。因此,您需要在<代码> x < /C>中循环这些n值;如果需要考虑n的不同值,则需要另一个循环来完成这些。

    从您的代码中不清楚您使用的是什么代码<代码> >代码>,但是如果它是重复部分的长度(我称之为n),那么您只需要考虑长度为Word(或者没有重复的空间)的值(

    )。
  • 要打印子单词,可以按顺序打印每个字母(使用
    print
    而不是
    println


  • 例如,如果给定数组包含单词zatabracabrac,则该方法应打印:“-打印什么?您能解释“无正方形”的含义吗?”单词zatabracabrac不是无正方形的,因为它有子单词,abrac两次从单词的位置4开始。”那是我的错误,我忘记了那一点。我仍然对你想说的话感到迷茫。如果我有任何进展,我会继续努力,并再次发表评论。感谢你的帮助。根据你告诉我的,我成功了!非常感谢!