2011-11-13 3 views
0

나는 자바를 처음 접했고 주어진 문자열이 주기적인지 아닌지를 검사하는 프로그램을 작성했다. 더 작은 문자열을 몇 번 연결하면 문자열을 나타낼 수 없다. . 예 "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; 
    } 

} 

답변

4

당신은 객체를 비교할 수 없습니다 (그리고 그 문자열의 포함) ==와 함께. equals 방법을 사용해야합니다.

0

isPeriodic()에서 수행하는 검사가 잘못되었습니다. 아래를 마 : (내가 선호하는 언어라고 가정)

C는 달리
if (s.equals(temp)) { 
    pflag = true; 
    break; 
    } 
2

++ 자바 문자열 비교를 허용하지 않는 것은 == 연산자와 객체. 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; 
} 

이이 프로그램이 작동하는 모든 조합에 대한 사항을 확인합니다.

관련 문제