如何访问在'if'语句中创建的ArrayList?

时间:2012-11-26 01:08:59

标签: java if-statement arraylist scope

有人可以帮助我,我试图在声明它的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);
}

2 个答案:

答案 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
           ....
        }

这有两个原因:

  1. 目前,您正在do-while循环的每次迭代中重新实例化道具列表,并丢失之前添加的数据。
  2. 您的列表仅在if块的范围内,而您需要在if之外访问它,即在其他块中。
  3. 通过将列表初始化移到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();
}