2013-07-10 2 views
0

Backstory: Я веб-парень с очень небольшим преподаванием ООП в колледже. Теперь меня бросают в тренировочную сессию «Java в неделю», пытаясь плавать.Как я могу обновить часть элемента ArrayList?

Мне нужно взять ArrayList с каждым элементом, имеющим эти четыре «атрибута (?)»: Name, ProductID, Price, Duration Date. Я хочу разрешить пользователю выбирать, какой элемент они хотели бы обновить, а затем какой атрибут этого элемента они хотели бы обновить. Я подумал, что ArrayList.set (index, element) будет работать, но теперь я думаю, что будет обновлять весь элемент, а не только цену или просто имя, если это необходимо.

Некоторые из моего кода:

ArrayList <Prod> pList = new ArrayList <Prod>(); 
pList.add(new Prod("Tomato", "P101", 10, "4 days")); 
//etc etc 

int index = 0; 
for (Prod p: pList) 
{ 
    System.out.println(""); 
    System.out.println("Index : " + String.valueOf(index++)); 
    System.out.println("Name : " + p.getName()); 
    System.out.println("ID : " + p.getId()); 
    System.out.println("Price : " + p.getPrice()); 
    System.out.println("Expiration Date : " + p.getExpDate()); 
} 

Scanner input = new Scanner(System. in); 
System.out.println("Which Index would you like to adjust?"); 
int change = input.nextInt(); 

System.out.println("What would you like to change about Index " + change + "?"); 
System.out.println("Enter 1 for the Name."); 
System.out.println("Enter 2 for the Product ID."); 
System.out.println("Enter 3 for the Price."); 
System.out.println("Enter 4 for the Expiration Date."); 
int type = input.nextInt(); 

if (type == 1) 
{ 
    System.out.println("What would you like to change the name to?"); 
    String newName = input.nextLine(); 
    pList.set(change, newName); 
} 

У меня есть сеттеров и добытчиками и работает все правильно настроить и может скомпилировать; проблема заключается в том, как настроить имя, или PID и т. д. Я считаю, что это очень специфично и не является общим, как введение в задаваемые здесь вопросы, но я не знаю, как еще это решить; Я работаю над этим часами.

+0

1. Получить нужный элемент для обновления, вы получите ссылку на объект. 2. Обновите содержимое этой ссылки объекта, изменения будут * отражены * на объекте внутри ArrayList. –

+0

, если вы хотите обновить объект в списке, вы должны сначала получить этот объект и внести изменения в объект. Прочитать базовый принцип Java: Скопировать по ссылке в google – Reddy

ответ

1
Scanner input = new Scanner(System.in); 
System.out.println("Which Index would you like to adjust?"); 
int change = input.nextInt(); 

System.out.println("What would you like to change about Index " + change + "?"); 
System.out.println("Enter 1 for the Name."); 
System.out.println("Enter 2 for the Product ID."); 
System.out.println("Enter 3 for the Price."); 
System.out.println("Enter 4 for the Expiration Date."); 
int type = input.nextInt(); 
Prod p = pList.get(change); 

if(type==1){ 
    p.setName(input.nextLine()); 
} 
else if(type==2){ 
    p.setId(input.nextLine()); 
} 
///and so on 
+0

В момент моего комментария есть 5 ответов. Я только попытался это сделать, и я считаю, что он решил мою проблему. У меня был .set (index, element), застрявший у меня в голове, он даже не передумал использовать сеттера. Я постараюсь в полной мере реализовать это решение завтра. Спасибо за быстрые ответы! – user2547757

+0

Работал для меня спасибо! – user2547757

0

Если вы извлекаете объект из индекса и пытаетесь обновить его, он должен работать. Что-то вроде этого:

//Fetch the prod need to be updated 
Prod prodToUpdate = pList.get(index); 
//update the attributes of the fetched prod like this 
prodToUpdate.setName("updatedName"); 
+2

Я не думаю, что вам нужна эта часть pList.set (index, prodToUpdate); Если вы обновите объект, он будет автоматически отражен в списке, поскольку Java использует ссылки – Reddy

+0

@Reddy согласился, исправлен! –

1
System.out.println("Which Index would you like to adjust?"); 
int change = input.nextInt(); 

Prod product = pList.get(change); 

if(type==1){ 
    System.out.println("What would you like to change the name to?"); 
    String newName = input.nextLine(); 
    product.setName(newName); 
} 
0

Вы можете использовать что-то вроде pList.get(change).setName() обновить конкретное поле объекта Prod.

1

Просто получить элемент по индексу change и вызывать соответствующий сеттер, например:

Prod p = pList.get(change); 
switch (type) 
{ 
    case 1: 
     p.setName(newName); 
     break; 
    case 2: 
     p.setProductId(newName); 
     break; 
    // etc 
} 
Смежные вопросы