2011-11-13 14 views
0

私はjavaを初めて使い、指定された文字列が定期的かどうかをチェックするプログラムを書いています。文字列が、何回か連結された小さな文字列として表現できない場合、 。例 "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()で行っているチェックが間違っています。

2

C++(これはあなたの言語です)と異なり、JavaではStringオブジェクトと==演算子を比較することはできません。 equalsメソッドを使用して文字列を比較します。

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

s.equal(TEMP)だけで文句を言わないの問題を解決するには、はい、それは、1011年も1010年のために文句を言わない主な方法で与えられたようなコードが入力を正しく実行させるであろうが。

は、このメソッドを使用してみてください:

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

これは、このプログラムが動作するすべての組み合わせについてのことを確認します。

関連する問題