2

我正在开发一个 Android 应用程序。

我想将大小设置为这样的 char 数组:

public char[5] language;

但它不起作用。我必须删除第五个才能使其正常工作。

我想将语言变量限制为五个字符。我怎样才能做到这一点?

谢谢。

4

5 回答 5

9

你不能那样做。 在 Java 中,数组的类型不包括它的大小。请参阅我对这个较早问题的回答。(忽略该abstract问题中有关方法的部分……这不是真正的问题。)

数组的大小由创建它的表达式决定;例如,以下创建一个包含 5 个字符的 char 数组,然后将其替换为另一个包含 21 个字符的数组。

public char[] language = new char[5];
...
language = new char[21];

请注意,创建是由等号的 RHS 上的表达式完成的。数组的长度是它的“值”的一部分,而不是它的“类型”。

于 2010-10-16T15:59:05.210 回答
5

引用 JLS :

数组的长度不是其类型的一部分。

要初始化一个数组,你应该这样做:

public char[] language = new char[5];

其他解决方案是

public char[] language = {0, 0, 0, 0, 0};

或者

public char[] language;
language = new char[5];

在Java中,数组声明不能包含数组的大小;我们只知道该变量将包含一个特定类型的数组。要初始化数组(并使用大小),您必须通过使用new或使用允许同时初始化和设置数组值的快捷方式来初始化它。

检查数组是否具有指定大小的最佳方法实际上是自己检查数组的大小,例如if(array.length == 5).


资源 :

在同一主题上:

于 2010-10-16T15:52:51.923 回答
1
public char[] language = new char[5];

您不能将变量本身限制为长度 5;您需要在逻辑中强制执行该不变量。这意味着它也不应该公开:

private char[] language = new char[5];

...

public void setLanguage(final char[] language)
{
   // or maybe language.length != 5, or whatever you really mean
   if (language.length > 5)
     throw new IllegalArgumentException("language must have length <= 5");
   this.language = language;
}
于 2010-10-16T15:53:07.667 回答
1

变量本身只是 char-array ( char[]) 类型,因此您不能限制变量type的大小。您可以限制的是您实例化并保存到该变量的数组的大小:

char[] language = new char[4];
于 2010-10-16T15:53:30.590 回答
1

也许您想通过使用 ArrayList 作为数组的表示来尝试通用样式。因此,您可能会发现使用 ArrayList 方法的灵活性。

private ArrayList<Character> alchar = new ArrayList<Character>(5);

............................................


public void addChar(Character ch){
    if (alchar.size() <= 5)
       alchar.add(ch);
}

public ArrayList<Character> getChars(){
   return alchar;
}
于 2010-10-16T17:46:21.517 回答