新手在这里
这是使用对象(下面的代码)填充ArrayList
的方法吗?在下面的代码中,我设法读取了我选择的文件中的信息并用文字填充它。它以这种格式显示:
应用程序名称:条形码扫描器
开发者名称:WizardTech
功能:扫描条形码。
类型:实用程序
费用:7.0
人气:0
=============================================== =========
我希望能够获取对象的属性并像使用代码中的任何其他变量一样使用它们。是否可以使用我现在的代码执行此操作?
例如,我有一个名为'Cost'的属性属于该对象,我想从ArrayList中的对象获取该属性并将其用于计算。
以下是代码:
public class c {
public static void wholeSystem3() {
boolean choice = true;
int input6 = 0;
Shop customerConfig = new Shop(new ArrayList<Customer>());
while (choice == true) {
System.out.println("Proceed to Customer creation by entering 1");
Scanner myScan1 = new Scanner(System.in);
input6 = myScan1.nextInt();
if (input6 == 1) {
System.out.println("Enter your information:");
Scanner myScan0 = new Scanner(System.in);
Customer myCustomer = new Customer();
System.out.println("Please enter your name:");
myCustomer.setCustomerName(myScan0.nextLine());
System.out.println("Please enter your address:");
myCustomer.setAddress(myScan0.nextLine());
System.out.println("Please enter your profession:");
myCustomer.setProfession(myScan0.nextLine());
System.out.println(myCustomer.getCustomerName() + " " + myCustomer.getAddress());
customerConfig.addCustomers(myCustomer);
File CustomerList = new File("CustomerList");
try {
BufferedWriter out;
out = new BufferedWriter(new FileWriter(CustomerList, true));
out.write("Customer name:" + myCustomer.getCustomerName());
out.newLine();
out.write("Customer Address:" + myCustomer.getAddress());
out.newLine();
out.write("Customer Profession:" + myCustomer.getProfession());
out.newLine();
//Close the output
out.close();
} catch (Exception e) {//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
System.out.println("Would you like to immediately purchase an app?");
input6 = myScan0.nextInt();
if (input6 == 1) {
String appStoreFile = "AppStore"; //"AppStore" Name of file I wish to take objects from to populate ArrayList
String line;
ArrayList testList = new ArrayList();
try {
BufferedReader input = new BufferedReader(new FileReader(appStoreFile));
if (!input.ready()) {
throw new IOException();
}
while ((line = input.readLine()) != null) {
testList.add(line);
}
input.close();
} catch (IOException b) {
System.out.println(b);
}
}
}
}
}
}
答案 0 :(得分:0)
当您逐行读取文件时,您应该解析它。 这意味着把它变成一个数字。 这是一个如何工作的链接: Convert string to float?
将“Cost:”之后的字符传递给该方法。 它应该返回一个你可以用它来计算的数字。
这是一个简单的程序,可以在你的一行上运行:
public class TextParser
{
public static void main(String[] args)
{
String line = "Cost: 7.0";
// this will not work, it tries to parse the whole line
//float number1 = Float.valueOf(line);
// this works and returns 7 as a number
float number2 = Float.valueOf(line.substring(6));
System.out.println("the number is: " + number2);
// you can now do calculations with it:
System.out.println(number2 + 5);
System.out.println(number2 * 12.345);
}
}
在这个例子中,我硬编码了代表数字的行部分。更好的方法是使用正则表达式过滤掉可能是数字的String部分。这是一个更灵活,但也有点复杂,可能有点超过一开始的顶部。但是一定要看看RegEx,它非常有用。
答案 1 :(得分:0)
正如keyser指出的那样,你发布的代码太多了。但是,从尝试辨别您尝试执行的操作,您尝试将对象添加到ArrayList中,然后从ArrayList中的特定对象中检索属性。
要将对象添加到ArrayList中,可以使用ArrayList的add方法添加:
yourArrayListName.add(Object name);
或
yourArrayListName.add(int index, Object name);
请注意,如果您使用后者,则需要跟踪您尝试从中检索的索引是否为空。前者只是从索引0,1,2 ...
开始按顺序添加要检索ArrayList中的对象,可以使用ArrayList的get方法:
yourArrayListName.get(int index).getAttribute(); // getAttribute retrieves the value you want
请注意,我使用get方法获取您想要的值。直接从对象中检索值是一种糟糕的编程习惯。但是,如果您真的想要,可以直接使用属性变量名来代替getAttribute(),假设它被声明为public。
以下是文档:
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
答案 2 :(得分:0)
您尚未发布有关商店类的详细信息,但我认为由于存在customerConfig.addCustomers
方法,因此您可以按照以下方式使用customerConfig.getCustomers
。例如对于第一位客户:
customerConfig.getCustomers().get(0).getCost();