2011-11-13 80 views
0

我是新来的Java,并已编写一个程序来检查,如果给定的字符串是周期性或not.A字符串不是周期性的,如果它不能被表示为一个较小的字符串连接在一起的若干次。例子“1010”是周期性的,但“1011”不是。这是我的代码。它编译,但问题是它告诉每个字符串不是周期性的。我想问题是在isPeriodic函数中的for循环。请帮我弄清楚它的正确性。参数传递在Java中的问题

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; 
    } 

} 

回答

4

您无法将对象(包括字符串的)与==比较。您必须使用equals方法。

0

在你isPeriodic()你正在做的检查是错误的。如下所示:

if (s.equals(temp)) { 
    pflag = true; 
    break; 
    } 
2

与C++不同(我认为这是您的首选语言)Java不允许将字符串对象与==运算符进行比较。使用equals方法比较字符串。

if (s.equals(temp)) { 
    pflag = true; 
    break; 
    } 
0

s.equal(临时)单独不会解决问题,是的,它将使代码正确执行的输入作为主法给出但对于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; 
} 

这将确保所有组合这个程序工作。