2015-08-20 32 views
1

採樣輸入# 「左移」 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'}。該怎麼辦?

+0

供參考:因爲你就地改變了數組,所以不需要返回數組。只需打印'testcase1'。 – Andreas

回答

5
temp=elements[elements.length-1]; 

這應該是相反的。您只是將elements[elements.length-1]分配給您的本地臨時變量,而不是更改elements[elements.length-1]

將其更改爲:

elements[elements.length-1] = temp; 

此外,還要temp一個char,它並不需要是一個int

+0

可能會損失元素的精度[elements.length-1] = temp; –

+0

@PallaviSingh這是因爲你使'temp'成爲'int'(而不是'char')。這是不需要的,精度的損失不會發生。 – amit

+0

@PallaviSingh這是因爲你將'temp'定義爲'int',而不是'char'。 – Andreas

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

另一種方法是使用String

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