-4

有人可以帮助我吗,我试图在声明它的 if 语句之外使用名为 prop 的数组列表,并在其中添加了一个对象。

这是 if 语句。代码要求用户输入信息,然后声明一个 Property 对象和一个 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);
}
4

2 回答 2

2

您需要将数组列表 decalration/insntantiation 移到if语句之外,如下所示:

        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在 else 块之外访问它时,您的列表才在块的范围内。

通过将列表初始化移到if块之外,您将解决这两个问题。

于 2012-11-26T01:29:00.330 回答
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

无论如何,您可能都希望将您ArrayListdo-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();
}
于 2012-11-26T01:28:29.123 回答