2015-10-19 51 views
0

我有以下代碼將小寫字母更改爲私有實例數組字母的大寫字母並返回一個字符串。在不改變原始數組的情況下將字符轉換爲上部

public String toUpperCase() 
{ 
    char[] duplicate = new char [letters.length]; 
    duplicate = letters; 
    String upperCase = ""; 
    int a = 0; 
    int b = 0; 
    for (int i =0; i < duplicate.length; i++) 
    { 
     a = duplicate[i]; 
     if (a >= 97 && a <= 122) 
      { 
       b = a - 32; 
       duplicate[i] = (char) b; 
      } 
     upperCase = upperCase + duplicate[i]; 
    } 
    return upperCase; 
} 

問題是在調用這個方法後,數組字母的原始內容已經改爲大寫。我創建了一個新的數組,重複,並將其設置爲等於字母,希望我可以將數組中的小寫字母更改爲大寫而不更改原始數組。但是,這並沒有奏效。如何在不更改原始數組的情況下將數組字母的小寫字母更改爲大寫字母?

+0

你什麼作爲參數傳遞給該溫控功能? – MohitC

+1

'duplicate = letters;'...你正在分配原始值給重複項,這兩個數組現在指向相同的位置 – MadProgrammer

+0

我有我的代碼中的實例數組我只是沒有包含它 – Diehardwalnut

回答

1

duplicate = letters; ......您正在將原始值分配給重複項,現在這兩個數組指向相同的位置。因此,對duplicate的任何修改都將自動被letters鏡像(它們都指向內存中的相同位置)。

相反,你需要使用letters獲取原始值,並存儲修改內duplicate

public String toUpperCase() { 
    char[] duplicate = new char[letters.length]; 
    String upperCase = ""; 
    int a = 0; 
    int b = 0; 
    for (int i = 0; i < letters.length; i++) { 
     a = letters[i]; 
     if (a >= 97 && a <= 122) { 
      b = a - 32; 
      duplicate[i] = (char) b; 
     } 
     upperCase = upperCase + duplicate[i]; 
    } 
    return upperCase; 
} 

除非你有一些理由不,你也可以使用Character類來幫助您檢測小寫字符,並將其轉換爲大寫,例如...

if (Character.isLowerCase(a)) { 
    letters[i] = Character.toUpperCase(a); 
} 

,或者你可以只使用letters[i] = Character.toUpperCase(a);,因爲它不會增加一倍轉換大寫字符

這一切都使我想知道爲什麼你需要duplicate陣列開始,到最後,你可以只逃脫類似...

public String toUpperCase() { 
    StringBuilder upperCase = new StringBuilder(letters.length); 
    for (char c : letters) { 
     upperCase.append(Character.toUpperCase(c)); 
    } 
    return upperCase.toString(); 
} 

或只是

public String toUpperCase() { 
    return new String(letters).toUpperCase() 
} 
+0

我明白了,所以我可以將小寫更改爲大寫,不是因爲我創建了重複項,而是因爲我一直指的是原始數組。 – Diehardwalnut

+0

嗯,這就是改變你的''''數組,但是,我不確定你實際上是否需要'duplicate'數組。 – MadProgrammer

+0

這個程序的原因是想知道如何使用UpperCase()。即使我的代碼不完全如何編程。使用相同的字符數組我創建了一個子字符串方法,根據傳遞給substring的int參數打印一個子字符串。所以我只是像toUpperCase,toLowerCase,substring,charAt和indexOf這樣的編程方法來了解這些如何工作。 – Diehardwalnut

4

試試這個:

char[] duplicate = letters.clone(); 

這樣原始數組不改變

2

我怎樣才能改變陣列字母的小寫字母不改變原來的數組是大寫嗎?

不要將letter數組實例分配給變量duplicate。請使用System.arraycopy(letters, 0, duplicate, 0, letters.length),它將letters的內容複製到duplicate

1

這不符合你的想法:

char[] duplicate = new char [letters.length]; 
duplicate = letters; 

第一行分配一個新的數組。第二行不是填入新數組。離得很遠。第二行指向duplicateletters。也就是說,重複和字母都指向相同的數據。操縱重複也操縱字母。

要複製真正的複製品,您需要複製內容。一個簡單的方法來做到這一點:

char[] duplicate = letters.clone(); 

另一種方式來複制內容:

char[] duplicate = new char [letters.length]; 
System.arraycopy(letters, 0, duplicate, 0, letters.length); 
1

雖然其他答案工作太,你實際上並沒有到陣列複製...

只要做,

if (a >= 97 && a <= 122) 
     { 
      b = a - 32; 
      upperCase = upperCase + (char) b; 
     } 
    else 
     upperCase = upperCase + duplicate[i]; 
相關問題