给定一个字符数组作为输入,返回一个数组,其中元素已被"左移"一个人

时间:2015-08-20 17:21:41

标签: java

示例输入#1

shift({'a','b','c','d','e'})

样本输出#1

{'b','c','d','e','a'}

public class ShiftElements {

    static char[] testcase1 = {'a', 'b', 'd', 'c', 'b', 'd', 'c'};

    public static void main(String args[]) {
        ShiftElements testInstance = new ShiftElements();
        char[] result = testInstance.shift(testcase1);
        System.out.println(result);
    }

    public char[] shift(char[] elements) {

        if (elements.length >= 2) {
            int temp = elements[0];
            for (int i = 0; i < elements.length - 1; i++)
            elements[i] = elements[i + 1];
            temp = elements[elements.length - 1];
        }
        return elements;

    }

当我尝试运行测试用例时,它输入{'b','c','d','e','a'}'失败。我的输出{'c','d','e','a','a'} 正确输出{'c','d','e','a','b'}。该怎么办?

3 个答案:

答案 0 :(得分:5)

temp=elements[elements.length-1];

那应该是另一种方式。您只是将elements[elements.length-1]分配给本地临时变量,而不是更改elements[elements.length-1]

将其更改为:

elements[elements.length-1] = temp;

另外,将temp设为char,它不必是int

答案 1 :(得分:1)

你的最后一行应该翻转:

elements[elements.length-1] = temp;

也可以使用System.arraycopy

来完成元素的移动
char temp = elements[0];
System.arraycopy(elements, 1, elements, 0, elements.length - 1);
elements[elements.length - 1] = temp;

答案 2 :(得分:0)

另一种方法是使用String

public char[] shift(char[] elements) {
    return elements.length < 2 ? 
        elements : 
        (new String(elements, 1, elements.length - 1) + elements[0])
            .toCharArray();
}