简体   繁体   中英

Parameter passing in Java problems

I am new to java, and have been writing a program to check if a given string is periodic or not.A string is not periodic if it cannot be represented as a smaller string concatenated some number of times. Example "1010" is periodic but "1011" is not. Here is my code. It compiles, but the problem is that it tells every string is not periodic. I guess the problem is with the for loop in the isPeriodic function. Please help me get it correct.

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

}

You can't compare objects (and that includes String's) with ==. You have to use the equals method.

Unlike C++ (which I assume is your language of preference) Java doesn't allow comparing String objects with the == operator. Use the equals method to compare the strings.

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

In your isPeriodic() the check you are doing is wrong. Do it as below:

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

s.equal(temp) alone wont solve the problem, yes it will make the code execute correctly for the input as given in Main method but for 1010, 1011 it wont.

Try using this method :

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

This will ensure that for all combination this program works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM