Вопрос

Я разрабатываю приложение для Android.

Я хочу установить размер на массив Char, как это:

public char[5] language;

Но это не работает. Я должен удалить номер пять, чтобы сделать его работать.

Я хочу ограничить пять символов языковой переменной. Как я могу это сделать?

Спасибо.

Это было полезно?

Решение

Вы не можете сделать это так. В Java тип массива не включает его размер. Увидеть мой ответ на Этот ранний вопрос. Отказ (Игнорируй часть о abstract Методы в этом вопросе ... это не реальная проблема.)

Размер массива определяется выражением, которое создает его; Например, следующее создает массив CHAR, который содержит 5 символов, позже заменяет его другим массивом, который содержит 21 символов.

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

Обратите внимание, что создание выполняется выражением на RHS равных. Длина массива является частью его «ценности», а не «тип».

Другие советы

Чтобы процитировать 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).


Ресурсы :

На той же теме:

Сама переменная - это просто массив типа Char (char[]), так что вы не можете ограничить размер переменной тип. Отказ То, что вы можете ограничить, это размер массива, который вы создаете и сохраняете до этой переменной:

char[] language = new char[4];
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;
}

Может быть, вы хотите попробовать универсальный стиль, используя 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top