Как передать символы методу / классу в виде строки?

#java #string #class #parameters

#java #строка #класс #параметры

Вопрос:

Я пытаюсь написать классы, которые в конечном итоге станут частью более масштабной программы boggle. Один из моих классов — Tile — хранит отображаемую букву, строку и столбец, в которых она расположена на доске, и флаг, указывающий, была ли плитка выбрана игроком. У меня возникли проблемы с сохранением буквы.

Изначально я сохранил букву в виде символа — так как при создании новых объектов плитки символ передается конструктору. Однако мне также нужно иметь возможность хранить «Qu». Это наводит меня на мысль, что конструктор для Tile должен принимать букву в виде строки; однако, когда я создаю новый объект Tile и передаю ему символ, это не работает.

Например:

 Tile t1 = new Tile ('d', 0, 0);

Tile t2 = new Tile ("Qu", 0, 1);
  

Оба они должны работать. Но я не уверен, как сохранить букву (как символ? строка?)

Ответ №1:

Если вам нужно поддерживать более одного символа, вы правы, что вам нужен String . Однако для String не требуется иметь более одного символа. Это вполне приемлемо:

 Tile t1 = new Tile("d", 0, 0);
  

Я отмечу, что положение плитки на самом деле не является неотъемлемым свойством, и что-то вроде Tile[4][4] может иметь больше смысла в целом для отслеживания положения.

Обновление: Основываясь на дополнительной информации, похоже, что плохо написанное назначение требует обоих. В этом конкретном случае используйте несколько конструкторов, подобных этому:

 public Tile(char value, int x, int y) {
    this(Character.toString(value), x, y);
}
  

Комментарии:

1. Имеет смысл. Меня беспокоит только то, что мне была предоставлена программа-драйвер, в которой некоторые объекты Tile были созданы с использованием символа (например, new Tile (‘d’, 0, 0)), в то время как объекты, созданные с помощью Qu, были созданы со строками (new Tile(«qu», 0, 1)). Может быть, ошибка в программе драйвера? Или я должен иметь возможность принимать оба символа или строки? Например, в программе драйвера объекты Tile представляют собой ArrayList и присутствует следующий код : tiles.add(новая плитка(«qu»,0,0)); tiles.add(новая плитка(‘i’,0,1)); tiles.add(новая плитка(‘e’,0,2)); tiles.add(новая плитка(‘t’,0,3));