Я новичок в Java, и я пишу программу, чтобы проверить, является ли данная строка периодической или нет. Строка не периодическая, если она не может быть представлена как строка меньшего размера, конкатенированная несколько раз. Пример «1010» является периодическим, а «1011» - нет. Вот мой код Он компилируется, но проблема в том, что он сообщает, что каждая строка не является периодической. Я предполагаю, что проблема в цикле for в функции isPeriodic
. Пожалуйста, помогите мне понять это правильно.
import java.io.*;
import java.util.*;
public class Test {
/**
* @param args
*/
public static void main(String[] args) throws java.lang.Exception {
java.io.BufferedReader R = new java.io.BufferedReader
(new java.io.InputStreamReader(System.in));
//String st = R.readLine();
String st = "10101010";
if (isPeriodic(st) == false) {
System.out.println(" Non Periodic");
}
else {
System.out.println("Periodic");
}
}
private static boolean isPeriodic(String s)
{
String temp = s;
int i;
boolean pflag = false;
for ( i = 1; i <= (s.length()/2); i++) {
s = rotateNltr(s,i);
if (s == temp) {
pflag = true;
break;
}
}
return pflag;
}
private static String rotateNltr(String s, int n) {
if( n > s.length()) {
return null;
}
for ( int i = 0; i < n; i++) {
s = leftRotatebyOne(s);
}
//System.out.println(s);
return s;
}
private static String leftRotatebyOne(String s) {
char[] temp = s.toCharArray();
char t = temp[0];
for ( int i = 0 ; i < s.length()-1 ;i++ ) {
temp[i] = temp [i+1];
}
temp[s.length()-1] = t;
String r = new String(temp);
//System.out.println(r);
return r;
}
}