Я придерживался логики и нуждался в помощи для моего проекта.
У меня есть текстовый файл с 5 названиями автомобилей.
Тогда я должен читать их в ArrayList
, который я с помощью:Объекты ArrayList (java)
public static void main(String[] args) throws IOException
{
BufferedReader bTextFileVehicleNames = new BufferedReader(new FileReader("vehicles.txt"));
ArrayList<String> vechicleNamesArray = new ArrayList<String>();
while((textFileLine = bTextFileVehicleNames.readLine()) != null)
{
vehicleNamesArray.add(textFileLine);
}
Теперь мне нужно создать объект для каждого элемента (имя транспортного средства) в ArrayList
, который я с помощью:
for(String s : vehicleNamesArray)
{
newVehicle = new Vehicle(s);
//I defined this Vehicle newVehicle = null; in the main class. My main is also in the same Vehicle.java file.
}
Каждый из этих объектов имеет следующие атрибуты: power
, angle
, speed
; и поведений: powerOn()
, powerOff()
, SpeedUp()
, SlowDown()
и т. Д., Которые я определил в Vehicle
класс.
Теперь пользователь должен ввести команду Vehicle name. Затем я разделил их и взял [0]
, который является именем транспортного средства, и должен сначала проверить, является ли это одним из тех названий транспортных средств в ArrayList
(полученный из txt-файла), и если он затем должен отнести его к этому конкретному объекту Я создал выше. И тогда придется взять в [1]
, что команда, которая соответствует конкретному поведению объекта, который может быть powerOn
, speedUp
, и т.д. и т.п ..
for (int i=0; i< vehicleNamesArray.size(); i++)
{
if (vehicleNamesArray.get(i).matches(userVehicleName))
//userVehicleName is the [0] vehicle name entered by user
//userVehicleCommand is the [1] command entered by user
{
switch (userVehicleCommand.toLowerCase())
{
case "power on":
newVehicle.powerOn(); //calling that particular bahaviour of the object defined in Vehicle class.
System.out.println(newVehicle.getName()+" is powered ON.");
break;
...
...
Например, давайте рассмотрим есть 5 транспортных средств в txt (таким образом, в ArrayList
), названный: Audi, Bmw, Mercedez, Volkswagen, Porsche. Проблема в том, что независимо от того, что я вхожу в команду имени транспортного средства, программа по умолчанию принимает последний элемент, в данном случае Porsche в ArrayList
. I.e., когда я говорю «Audi, powerON», он все еще печатает «Porsche включен».
Я думаю, что я испортил ссылку на введенное имя для проверки с помощью ArrayList
, а затем ссылался на этот конкретный объект.
Да, у вас есть ** один ** 'новый объект Vehicle', и вы назначаете ему каждый элемент. В конце концов последнее задание - это то, что осталось. Кроме того, вы должны использовать блок «try-with-resources», чтобы закрыть «BufferedReader». –
Использует ли ваш пользователь регулярное выражение? если нет в первом выражении «если».equals(), и в моей функции переключения срока действия работает с ошибкой со строками, рассмотрите также и операторы – itwasntme
. Ваша переменная 'newVehicle' - * одна * переменная, удерживающая * один * экземпляр транспортного средства, поэтому, если вы присвоите ему значение в цикл, он сохранит последний. Если вы хотите иметь * список * транспортных средств, вам нужно создать и заполнить список. – Holger