Java中的变量声明和初始化

Java中的变量声明和初始化,java,variables,scope,Java,Variables,Scope,我应该将此命令放在代码中的何处 Item item = new Item(); 我应该把它放在我的循环do while中,这样它就可以继续创建一个新的项目类,这取决于用户想要输入另一个产品的次数 问题是,每当我将该命令放入我的do while,它都无法根据程序底部的代码找到符号项。那么我应该把它放在哪里呢 我的代码: public static void main(String[] args) { Scanner scan = new Scanner(System. in );

我应该将此命令放在代码中的何处

Item item = new Item();
我应该把它放在我的循环
do while
中,这样它就可以继续创建一个新的
项目
类,这取决于用户想要输入另一个产品的次数

问题是,每当我将该命令放入我的
do while
,它都无法根据程序底部的代码找到符号
项。那么我应该把它放在哪里呢

我的代码:

public static void main(String[] args) {

    Scanner scan = new Scanner(System. in );
    String prompt, id;
    int z = 0, choice, x = 999;
    int iprice;
    String icode;
    String iname;

    class Item {
        public int price;
        public String code;
        public String name;
    }

    ArrayList<Item> cart = new ArrayList<Item>(0);

    do {
        System.out.print("\nItem Code: ");
        icode = scan.next();
        System.out.print("Item Name: ");
        iname = scan.next();
        System.out.print("Item Price: ");
        iprice = scan.nextInt();

        item.code = icode;
        item.name = iname;
        item.price = iprice;

        cart.add(item);

        System.out.print("\tInput another? Y/N? ");
        prompt = scan.next();

    } while (prompt.equals("y"));

    System.out.println("\nWhat do you want to do?");
    System.out.println("\n1. Purchase Item ");
    System.out.println("2. List of Products ");
    System.out.println("3. Exit Program ");

    System.out.print("\n\tChoice: ");
    choice = scan.nextInt();
    if (choice == 1) {
        System.out.println("\nItem Code: ");
        id = scan.next();
        if (item.code.equals(id)) {
            System.out.println("Item Name: " + item.name);
            System.out.println("Item Price: " + item.price);
        }
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串提示符,id;
intz=0,选择,x=999;
国际大米;
字符串icode;
弦在南;
类项目{
公共价格;
公共字符串代码;
公共字符串名称;
}
ArrayList购物车=新的ArrayList(0);
做{
系统输出打印(“\n项目代码:”);
icode=scan.next();
系统输出打印(“项目名称:”);
iname=scan.next();
系统输出打印(“项目价格:”);
iprice=scan.nextInt();
item.code=icode;
item.name=iname;
项目价格=iprice;
购物车。添加(项目);
系统输出打印(“\t是否输入其他?是/否?”);
prompt=scan.next();
}while(prompt.equals(“y”));
System.out.println(“\n您想做什么?”);
System.out.println(“\n1.采购项目”);
System.out.println(“2.产品清单”);
System.out.println(“3.退出程序”);
系统输出打印(“\n\t选择:”);
choice=scan.nextInt();
如果(选项==1){
System.out.println(“\n项目代码:”);
id=scan.next();
if(项目代码等于(id)){
System.out.println(“项目名称:”+项目名称);
系统输出打印项次(“项目价格:+项目价格”);
}
}
}

视情况而定。您可以将其放置在循环外部或类定义中,这样您就可以一次又一次地重用该变量,从而避免为每个过程创建局部变量。
类似于:

Item myItem;

do{
    myItem = new Item();
    // add perfumes and shoes
    // maybe GTA 5
}while(condition)  

你需要学习什么叫做变量范围。也就是说,您可以访问变量,也不能访问变量。这里:

视情况而定。您可以将其放置在循环外部或类定义中,这样您就可以一次又一次地重用该变量,从而避免为每个过程创建局部变量。
类似于:

Item myItem;

do{
    myItem = new Item();
    // add perfumes and shoes
    // maybe GTA 5
}while(condition)  

你需要学习什么叫做变量范围。也就是说,您可以访问变量,也不能访问变量。此处:

您可能应该在循环外声明变量:

Item item;
然后,您应该在循环的最开始处对其进行初始化:

item = new Item();
这样,变量在类中是可见的,所以您不会得到您遇到的错误

此外,这基本上意味着在每个循环迭代中创建一个新对象,并将此新对象分配给先前声明的变量
item
,以便用户可以创建任意多个不同的项

请注意,尽管在每次迭代中覆盖变量
,但不会丢失先前附加到变量
的对象,因为在执行
cart.add(item)
时,您正在将对该对象的引用添加到
ArrayList cart


您可能想了解Java中类和对象的声明、作用域等…

您可能应该声明循环外的变量,包括:

Item item;
然后,您应该在循环的最开始处对其进行初始化:

item = new Item();
这样,变量在类中是可见的,所以您不会得到您遇到的错误

此外,这基本上意味着在每个循环迭代中创建一个新对象,并将此新对象分配给先前声明的变量
item
,以便用户可以创建任意多个不同的项

请注意,尽管在每次迭代中覆盖变量
,但不会丢失先前附加到变量
的对象,因为在执行
cart.add(item)
时,您正在将对该对象的引用添加到
ArrayList cart


您可能想了解Java中类和对象的声明、作用域等…

在do while循环中创建新对象
Item=newitem()我在下面做了更改

public static void main(String[] args) {
            // TODO, add your application code
            Scanner scan = new Scanner (System.in);
            String prompt, id; 
            int z=0, choice, x=999;
            int iprice;
            String icode;
            String iname;


            class Item {
                public int price;
                public String code;
                public String name;

            }   

            ArrayList<Item> cart = new ArrayList<Item>(0);
             Item item; // type this
                do {

            System.out.print("\nItem Code: ");
            icode=scan.next();
            System.out.print("Item Name: ");
            iname=scan.next();
            System.out.print("Item Price: ");
            iprice=scan.nextInt();


            item = new Item();  //also create new Item(); here
            item.code=icode;
            item.name=iname;
            item.price=iprice;

            cart.add(item);

            System.out.print("\tInput another? Y/N? ");
            prompt=scan.next();
            }while (prompt.equals("y"));

            System.out.println("\nWhat do you want to do?");
            System.out.println("\n1. Purchase Item ");
            System.out.println("2. List of Products ");
            System.out.println("3. Exit Program ");
            System.out.print("\n\tChoice: ");
            choice=scan.nextInt();
             if (choice==1) {

            System.out.println("\nItem Code: ");
            id=scan.next();
                    if (item.code.equals(id)) {         
            System.out.println("Item Name: "+item.name);
            System.out.println("Item Price: "+item.price);

                    }       
             }






        }
        }
publicstaticvoidmain(字符串[]args){
//TODO,添加应用程序代码
扫描仪扫描=新扫描仪(System.in);
字符串提示符,id;
intz=0,选择,x=999;
国际大米;
字符串icode;
弦在南;
类项目{
公共价格;
公共字符串代码;
公共字符串名称;
}   
ArrayList购物车=新的ArrayList(0);
Item;//键入此
做{
系统输出打印(“\n项目代码:”);
icode=scan.next();
系统输出打印(“项目名称:”);
iname=scan.next();
系统输出打印(“项目价格:”);
iprice=scan.nextInt();
item=new item();//也创建新项();此处
项目代码=icode;
item.name=iname;
项目价格=iprice;
购物车。添加(项目);
系统输出打印(“\t是否输入其他?是/否?”);
prompt=scan.next();
}while(prompt.equals(“y”));
System.out.println(“\n您想做什么?”);
System.out.println(“\n1.采购项目”);
System.out.println(“2.产品清单”);
System.out.println(“3.退出程序”);
系统输出打印(“\n\t选择:”);
choice=scan.nextInt();
如果(选项==1){
System.out.println(“\n项C