有人可以帮助我,我试图在声明它的if语句之外使用名为prop的arraylist,并在其中添加一个对象。
这是if语句。代码要求用户输入信息,然后声明属性对象和属性的ArrayList,它将我创建的属性对象添加到ArrayList中。
if(option.equals("one")){
int x = 1;
do{
try{
System.out.println("Enter owner name");
String ownerName = scan.nextLine();
System.out.println("Enter address");
String address = scan.nextLine();
System.out.println("Are you the principle private residant?");
String principlePrivateResidance = scan.nextLine();
System.out.println("Enter property location(city, large town, small town, vilage, countryside) ");
String location = scan.nextLine();
System.out.println("would you like to pay the propery tax now?(yes//no)");
String paid = scan.nextLine();
System.out.println("Enter your filename");
String fn = scan.nextLine();
System.out.println("Enter the estimated property value");
int propertyEstimatedVal = scan.nextInt();
// i make the object here
Property property = new Property(ownerName, address, paid, principlePrivateResidance,location, propertyEstimatedVal);
// Then make the arraylist and add the object to it take this arraylist and put it....
ArrayList<Property> prop = new ArrayList<Property>;
prop.add(property);
CalculateTax tax = new CalculateTax(property.getLocation(),property.getPrinciplePrivateResidance(),property.getPropertyEstimatedVal(), property.getPaid());
System.out.println("owner:" + property.getOwnerName());
System.out.println("address:" +property.getAddress());
System.out.println("propertyEstimatedVal:" +property.getPropertyEstimatedVal());
System.out.println("principlePrivateResidance:" +property.getPrinciplePrivateResidance());
System.out.println("location:" +property.getLocation());
System.out.println("paid:" +property.getPaid());
System.out.println("Your property tax is" + CalculateTax.getSumoftax() );
System.out.println("your details have been taken");
FileWriter fstream = new FileWriter(fn,true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(property.getOwnerName() + " | " + property.getAddress() + " | " + property.getPropertyEstimatedVal() + " | " + property.getPrinciplePrivateResidance() + " | " + property.getLocation() + " | " + property.getPaid() + " | " + CalculateTax.getSumoftax());
out.newLine();
out.close();
x= 2;
}
catch(Exception e){
System.out.println("error has occured");
}
}
while(x == 1);
}
else if(option.equals("two")){
// this just opens a file
System.out.println("Please enter you file name");
String filename = scan.nextLine();
try{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream(filename);
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}
catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
else if(option.equals("three")){
//i need to get that arraylist with the objects i added to it here but
//i just dont know how
System.out.print("Service is currently available ");
}
else{
System.exit(0);
}
答案 0 :(得分:2)
您需要在if
语句之外移动数组列表decalration / insntantiation,如下所示:
List<Property> prop = new ArrayList<Property>;
if(option.equals("one")){
//your if block code
do{
//rest of your code except list declaration/initialization
}while(x==1);
....
}else if(option.equals("two")){
.....
} else if(option.equals("three")){
//your list `prop` is available here
....
}
这有两个原因:
do-while
循环的每次迭代中重新实例化道具列表,并丢失之前添加的数据。if
块的范围内,而您需要在if
之外访问它,即在其他块中。通过将列表初始化移到if
块之外,您将解决这两个问题。
答案 1 :(得分:0)
如果需要访问ArrayList
语句之外的if
,则需要将变量声明移至if
语句之前。例如,删除此处的行...
Property property = new Property(ownerName, address, paid, principlePrivateResidance,location, propertyEstimatedVal);
// Then make the arraylist and add the object to it take this arraylist and put it....
ArrayList<Property> prop = new ArrayList<Property>; // REMOVE THIS LINE
prop.add(property);
并在此处添加...
ArrayList<Property> prop = new ArrayList<Property>; // ADD THIS LINE
if(option.equals("one")){
int x = 1;
do{
现在ArrayList
已在if
语句之前定义,因此您可以在if
语句内外的任何位置使用它。
您可能希望将ArrayList
移到do-while
循环之外,否则每次进行ArrayList
循环时都会创建一个新do-while
。我确定你真正想要的是创建一个ArrayList
并只添加一些项目 - 因此你需要在ArrayList
循环之外移动do-while
的声明,这也是我上面的代码更改实现的。
接下来您需要做的是检测项目是否已添加到ArrayList
。如果您未在if(option.equals("one")){
语句中执行代码,则ArrayList
不会添加任何内容,因此它将为空。因此,如果您想稍后使用ArrayList
,首先应检查其中是否有任何项目,如果存在则使用它们 - 可能是这样的......
if (prop.size() > 0){
// there are items
doSomething();
}
else {
// no items
doSomethingElse();
}