Попробуйте это. Я знаю, что вопрос несколько старый, но это другой подход к проблеме.
Я также заметил, что проблема возникает чуть выше поля password
.
Я попробовал как методы, подобные
<form autocomplete="off">
и <input autocomplete="off">
, но ни один из них не работал для меня.
Поэтому я исправил его с помощью нижеприведенного фрагмента - просто добавил другое текстовое поле чуть выше типа пароля (f5).
Что-то вроде этого:
<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />
Надеюсь, что это поможет кому-то.
Я считаю, что проблема заключается в том, что списки не инициализированы. Кроме того, обычно лучше кодировать интерфейс, чем реализацию, поэтому могут помочь следующие изменения:
class Store{
private String name;
// use interface and initialize;
private final List<Account> arracc = new ArrayList<>();
//same here
private final List<Products> arrprod = new ArrayList<>();
public Store(){
}
// return; note this exposes the internal storage, so may be incorrect
public List<Account> getArracc() {
return arracc;
}
// return the products; again, exposing internals and allows
// for anyone who calls getArrprod() to modify the list or the elements,
// which breaks encapsulation
public List<Products> getArrprod() {
return arrprod;
}
...
Я думаю, что вторую проблему можно решить с помощью некоторого рефакторинга.
private static loadProducts(Store store) {
ArrayList<String>productsList=new ArrayList<String>();
// Read all products from the products file
File products = new File("Products.txt");
try(Scanner input = new Scanner(products);)
{
input.useDelimiter(",");
while(input.hasNextLine()){
productsList.add(input.nextLine());
}
input.close();
}catch(Exception ex){
System.out.println("Error in Products");
}
for(int i = 0; i< productsList.size(); i++) {
String account=productsList.get(i);
splittedInfoProd= account.split(",");
String id = splittedInfoProd[0];
String name = splittedInfoProd[1];
String supplier = splittedInfoProd[2];
double price = Double.valueOf(splittedInfoProd[3]));
Products productObject = new Products (id, name, supplier, price);
store.setArrProd(productObject);
}
}
store
будет иметь все входы.
Для вашего второго выпуска:
for(int i = 0; i< productsList.size(); i++) {
String account=productsList.get(i);
splittedInfoProd= account.split(",");
productObject.setProductID(splittedInfoProd[0]);
productObject.setName(splittedInfoProd[1]);
productObject.setSupplier(splittedInfoProd[2]);
productObject.setPrice(Double.valueOf(splittedInfoProd[3]));
productObject=new Products(productObject.getID(),productObject.getNAme(),productObject.getSupplier(),productObject.getPrice());
store.setArrProd(productObject);
} System.out.println(productObject.getPrice());
Ваш productObject имеет глобальное отклонение в классе OrderedItem
. Так что в конце цикла for ваш объект будет хранить последние значения, а когда распечатайте его, он напечатает последнее значение. Чтобы получить все цены, вы должны выполнить итерацию массива.
ArrayList<Products> list = store.getArrprod();
for(Products p : list){
System.out.println(p.getPrice());
}