2014-10-27 20 views
0

對於類的分配,我必須編寫一個名爲encodeChars的方法,該方法接收一組字符並將數組中的每個小寫字母向上移動一個。該方法應該修改傳入的數組並且沒有返回值。我現有的代碼如下:Java - 一種採用數組並改變它的方法,不返回任何東西(問題)

public void encodeChars(char[] change){ 
    for (int x = 0; 0 < change.length; x++){ 
     switch (change[x]){ 
     case('a'): 
      change[x] = 'b'; 
      break; 
     case('b'): 
      change[x] = 'c'; 
      break; 
     case('c'): 
      change[x] = 'd'; 
      break; 
     case('d'): 
      change[x] = 'e'; 
      break; 
     case('e'): 
      change[x] = 'f'; 
      break; 
     case('f'): 
      change[x] = 'g'; 
      break; 
     case('g'): 
      change[x] = 'h'; 
      break; 
     case('h'): 
      change[x] = 'i'; 
      break; 
     case('i'): 
      change[x] = 'j'; 
      break; 
     case('j'): 
      change[x] = 'k'; 
      break; 
     case('k'): 
      change[x] = 'l'; 
      break; 
     case('l'): 
      change[x] = 'm'; 
      break; 
     case('m'): 
      change[x] = 'n'; 
      break; 
     case('n'): 
      change[x] = 'o'; 
      break; 
     case('o'): 
      change[x] = 'p'; 
      break; 
     case('p'): 
      change[x] = 'q'; 
      break; 
     case('q'): 
      change[x] = 'r'; 
      break; 
     case('r'): 
      change[x] = 's'; 
      break; 
     case('s'): 
      change[x] = 't'; 
      break; 
     case('t'): 
      change[x] = 'u'; 
      break; 
     case('u'): 
      change[x] = 'v'; 
      break; 
     case('v'): 
      change[x] = 'w'; 
      break; 
     case('w'): 
      change[x] = 'x'; 
      break; 
     case('x'): 
      change[x] = 'y'; 
      break; 
     case('y'): 
      change[x] = 'z'; 
      break; 
     case('z'): 
      change[x] = 'a'; 
      break; 
     default: 
      change[x] = change[x]; 
      break; 
     } 
    } 
} 

雖然我知道,開關可能是矯枉過正改變輸入字符和一個循環會更有效,我的問題來試圖在我的主要方法,對代碼進行測試時。

對於我的生活,我無法弄清楚,或者在課堂筆記/互聯網上找到任何地方如何讓這個方法接受一個字符數組並修改它。

這與測試方法一致,以確保我正確編寫了代碼,以便根據需要進行操作。此外,對於任何可能導致我無法將代碼發佈到stackoverflow的問題感到抱歉。

+5

'char [] foo = {'f','o','o'}; encodeChars(FOO); System.out.println(java.util.Arrays.toString(foo));' – 2014-10-27 16:24:51

+7

提示:''b'=='a'+ 1' – 2014-10-27 16:25:45

+6

除非你喜歡無限循環,否則你可能想再看一遍這行好:'for(int x = 0; 0 sheltem 2014-10-27 16:28:28

回答

-2

Java按值傳遞對象引用。這意味着您在方法中對數組所做的更改將在方法外部看到。

既然你正在處理的字符數組,你可以直接從它使用適當的構造函數創建一個字符串:String(char[])

Java的字符可以作爲一種特殊的整數類型來處理,如果你想要做他們的數學。如果你想添加一個到char數組元素,你可以做到以下幾點:

if(change[x] == 'z') change[x] = 'a'; 
else change[x]++; 

你必須檢查循環指數,而不是在循環恆定:for (int x = 0; 0 < change.length; x++)應該讀for (int x = 0; x < change.length; x++)

+1

* Java通過引用傳遞對象* [**否,Java按值傳遞**](http://stackoverflow.com/q/40480/1065197) – 2014-10-27 16:37:10

+0

@LuiggiMendoza。你在技術上是正確的。我改變了帖子。 – 2014-10-27 16:39:35

+0

老實說,我不知道爲什麼選擇這個答案。我更喜歡其他人。咩。 – 2014-10-27 16:53:54

2

要點:如何讓這個方法接受一個字符數組並修改它?

要簡單地檢查它是否編譯和運行:

  • 創建char[]並對其進行初始化。
  • 調用你的方法並通過這個char[]作爲參數。
  • 打印char[]的內容。
  • 執行代碼。

基本代碼:

public class YourClass { 
    public void encodeChars(char[] change) { 
     //implementation details... 
    } 
    public static void main(String[] args) { 
     char[] foo = { 'f', 'o', 'o' }; 
     YourClass yourClass = new YourClass(); 
     yourClass.encodeChars(foo); 
     System.out.println(java.util.Arrays.toString(foo)); 
    } 
} 

爲了測試它:

  • 創建char[]並對其進行初始化。
  • 調用你的方法並通過這個char[]作爲參數。
  • 創建另一個char[]與預期的更改結果。
  • 比較這些char[]的每個值以驗證它們是否相等。如果沒有,那麼在實施該方法時出現問題。

基本代碼:

char[] foo = { 'f', 'o', 'o' }; 
encodeChars(foo); 
char[] expectedFoo = { 'g', 'p', 'p' }; 
for (int i = 0; i < expectedFoo.length; i++) { 
    if (expectedFoo[i] != foo[i]) { 
     System.out.println("Expected: " + expectedFoo[i] + ". Found: " + foo[i] + "."); 
     break; 
    } 
} 

還是在JUnit測試形式:

public class YourClassTest { 
    @Test 
    public void testEncodeChars() { 
     char[] foo = { 'f', 'o', 'o' }; 
     encodeChars(foo); 
     char[] expectedFoo = { 'g', 'p', 'p' }; 
     Assert.assertArrayEquals(expectedFoo, foo, "encodeChars doesn't work as expected!"); 
    } 
} 

您也可以通過使用String#toCharArray創建一個String一個char[]

char[] foo = "foo".toCharArray(); 

有在你的問題實現,但這不是你確切的問題,所以修復它們不在這裏。

+0

您的迴應對於向我提供完成作業所需的理解方面最有幫助。我很欣賞你用這樣一個詳細的答案回覆我的發帖的時間。 – Cremedekhan 2014-10-27 16:55:59

+0

不客氣。 – 2014-10-27 16:57:00

0

從你的問題看起來你只是處理小寫字符。答案很簡單。用以下語句替換您的開關盒:

if(change[x] > 96 && change[x] < 122) 
{ 
    change[x]= change[x] + 1; 
} 
else if(change[x] == 122) 
{ 
    change[x]= 97; 
} 

Java中的Char表示任何字符的Unicode值。請參閱this。因此,將'1'加1會給你'b'。但是當你得到'z'時加1就會給你下一個由十進制值123表示的字符'{'。因此,如果其他結構。

+0

來自OP的問題:*我必須編寫一個名爲encodeChars的方法,它接收一組字符並將數組中的每個小寫字母向上移動一個*。這是,只有小寫字母應該受到影響。你現在的'if'適用於除'z''之外的任何'char'。 – 2014-10-27 16:49:57

+0

謝謝你指出。已經更新了我的答案。乾杯! – Chiseled 2014-10-27 16:54:19

相關問題