2011-11-13 77 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; 
} 

這將確保所有組合這個程序工作。