Java-Chars可以向左旋转,但不能向右旋转?



其中:Roteer=旋转,Links=左侧,Rechts=右侧。。。。

似乎如果你在roteerNaarLinks中输入"Oliebol",3,输出将是"bololie",这是应该发生的。但如果你在roteerNaarRechts中输入"Oliebol",1,输出将是"lOliebo",但它应该变成"llieboo",我该如何解决这个问题?:)

public class Roteer {
        public static String roteerNaarLinks(String invoer, int n){
            String in = invoer;
            int aantal = n;
            for(int i = 0; i< aantal; i++){
                char firstLetter = in.charAt(0);
                in = in.substring(1);
                in = in + firstLetter;
            }
            return in;
        }
        public static String roteerNaarRechts(String invoer, int n){
            String in = invoer;
            int aantal = n;
            for(int y = n; y > aantal; y--){
                char lastLetter = in.charAt(in.length()-1);
                in = in.substring(1);
                in = lastLetter + in;
            }
            return in;
        }
}

for永远不会在roteerNaarRechts中执行。您先设置aantal = n,然后设置y = n,然后说循环应该在y > aantal时执行,这从来都不是真的。将其更改为

对于(int y=n;y>=0;y-)

我建议以下解决方案(根据您的需求,仍然可以调整)

public class Roteer {
    public static String roteerNaarLinks(String invoer, int n) {
        StringBuilder sb = new StringBuilder(invoer.length() * 2);
        sb.append(invoer).append(invoer);
        int offset = n % invoer.length();
        return sb.substring(offset, offset + invoer.length());
    }
    public static String roteerNaarRechts(String invoer, int n) {
        StringBuilder sb = new StringBuilder(invoer.length() * 2);
        sb.append(invoer).append(invoer);
        int offset = invoer.length() - n % invoer.length();
        return sb.substring(offset, offset + invoer.length());
    }
    public static void main(String[] args) {
        final String inputString = "Oliebol";
        System.out.println("--- roteerNaarLinks");
        for (int i = 0; i <= inputString.length(); i++) {
            System.out.println(roteerNaarLinks(inputString, i));
        }
        System.out.println("--- roteerNaarRechts");
        for (int i = 0; i <= inputString.length(); i++) {
            System.out.println(roteerNaarRechts(inputString, i));
        }
    }
}

最新更新