我是java的新手,并且一直在编写一个程序来检查给定的字符串是否是周期性的。如果字符串不能表示为连接多次的较小字符串,则该字符串不是周期性的。示例“1010”是周期性的,但“1011”不是。这是我的代码。它编译,但问题是它告诉每个字符串不是周期性的。我想问题是isPeriodic
函数中的for循环。请帮我把它搞定。
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;
}
}
答案 0 :(得分:4)
您无法将对象(包括String的对象)与==进行比较。您必须使用equals
方法。
答案 1 :(得分:2)
与C ++(我假设您喜欢的语言)不同,Java不允许将String对象与==运算符进行比较。使用equals方法比较字符串。
if (s.equals(temp)) {
pflag = true;
break;
}
答案 2 :(得分:0)
在你的isPeriodic()中,你正在做的检查是错误的。请按以下步骤操作:
if (s.equals(temp)) {
pflag = true;
break;
}
答案 3 :(得分:0)
单独使用s.equal(temp)不会解决问题,是的,它会使代码在Main方法中为输入正确执行,但对于1010,1011则不会。
尝试使用此方法:
private static boolean isPeriodic(String s) {
String temp = s;
int i;
boolean pflag = false;
for (i = 1; i <= (s.length() / 2); i++) {
s = leftRotatebyOne(s);
if (s.equals(temp)) {
pflag = true;
break;
}
}
return pflag;
}
这将确保所有组合此程序有效。