2015-10-19 56 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]; 
相关问题