java - Java中的变量声明和初始化

标签 java variables scope

我应该将此命令放在代码中的什么位置?

Item item = new Item();

我应该将其放入循环中 do-while ,以便它继续创建新的 Item 类,具体取决于用户是否想要输入另一个类多少次产品。

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

我的代码:

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);
        }
    }
}

最佳答案

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

Item item;

然后你应该在循环开始时初始化它:

item = new Item();

这样变量在整个类中都是可见的,因此您不会收到您提到的错误...

此外,这基本上意味着您在每次循环迭代中创建一个新对象,并将这个新对象分配给变量 item您之前声明过,因此您的用户可以根据需要创建任意数量的不同项目...

请注意,尽管您覆盖变量 item在每次迭代中,您都不会丢失先前附加到变量 item 的对象,因为您正在将对该对象的引用添加到 ArrayList<Item> cart 中当你这样做时cart.add(item) ...

您可能想阅读this article关于Java中类和对象的声明、作用域等等...

关于java - Java中的变量声明和初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479289/

相关文章:

Java child 认识 parent ,但 parent 不认识他们的 child

java - Egit : Set gitignore to ignore all eclipse project files

java - 在 HashSet 中传递方法是个好习惯吗?

python - 使用字符串代替 PY_VAR

javascript - 函数范围javascript之间的变量差异

Java 全局变量作用域

java - Android对每个应用程序使用SD卡的存储限制

variables - Powershell 空值表达式

javascript - 有没有办法从函数内定义的变量获取信息?

scope - TypeScript - 在事件监听器中保留范围