如何在方法中添加静态变量编号?

Posted

技术标签:

【中文标题】如何在方法中添加静态变量编号?【英文标题】:How can i add the static variable number in a method? 【发布时间】:2019-12-05 22:22:22 【问题描述】:

我创建了一个 ProductMenu 类来执行添加、搜索、删除和更新产品任务,它只使用数组。我面临的问题是如何在方法中添加静态变量,因为在将产品添加到数组后我未能添加数组的最大数量。希望能帮到你,谢谢。

public static void addProduct()

    Product product = new Product();
        System.out.println("================================");
        System.out.println("           Add Product          ");
    System.out.println("================================");
    System.out.println("Product ID :- " + Product.getProdId());
    System.out.print("Enter product name: ");
    String prodName = input.next();
    System.out.print("Enter product price: ");
    double prodPrice = input.nextDouble();
    product.setProductId(Product.getProdId());
    product.setProductName(prodName);
    product.setProductPrice((double)prodPrice);

    products[productIndex] = product;
    numOfArray++; // should be add ?
    productIndex++; // should be add also?

    ProductMenu.main(null); //back to main



我的班级

 public class ProductMenu 

  static Scanner input = new Scanner(System.in);
   static int productIndex; //should be add after addProduct()
    static int numOfArray = 1; //should be add after addProduct()
static Product[] products = new Product[numOfArray];

public static void main(String[] args) 

    int menuOption;

    do

    menu();
    System.out.print("Enter your choice: ");
    menuOption = input.nextInt();

    switch(menuOption)
        case 1:
            addProduct();
            break;
        case 2:
            System.out.print("halo" + products[0].toString());
            break;
        case 3:

            break;
        case 4:

            break;
        default:

            System.out.print("Invalid option. Please try 
                    again.\n");
            break;
    

    while(menuOption!=1 && menuOption!=2 && menuOption!=3 && 
      menuOption!=4 );



    public static void menu()
        System.out.println("================================");
        System.out.println("          Product Menu         ");
    System.out.println("================================");
    System.out.println("1. Insert Product\n2. Update Product\n3. 
        Search Product\n4. Delete Product\n");

这是错误消息,表示数组数量已经超过限制,为什么我问我是否错了。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at ProductMenu.addProduct(ProductMenu.java:64)
at ProductMenu.main(ProductMenu.java:21)
at ProductMenu.addProduct(ProductMenu.java:68)
at ProductMenu.main(ProductMenu.java:21)

【问题讨论】:

What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?的可能重复 感谢您的回复,我知道数组索引是从 0 开始的。在我的代码中,numOfArray 是指该数组有多少个数组索引,默认值为 1,其中索引为 0。在我的 addProduct() 函数之后我将产品添加到数组中,那 numOfArray 将 ++ 这意味着当我添加另一个新的时将变为 2 但我错了,这不是增加 numOfArray 使用java.util.ArrayList 而不是使用Array 作为动态大小。 Array真的不能用代码动态改变大小吗? 数组一旦创建就不能改变大小。 【参考方案1】:

因为您只需要使用 Array 然后创建一个函数 add() 它将首先检查数组的大小,如果有剩余空间则添加元素,否则创建双倍大小的新数组,复制所有以前的元素并添加新的结尾。 此外,由于 size 是静态变量,因此您不必传递给您的方法。您的方法也是静态的,并且方法和变量都在同一个类中,因此您可以直接在方法中使用变量。

【讨论】:

如果你想让我创建比函数,请告诉我。乐于助人 感谢您的回复。你的意思是我必须创建一个新函数来检查数组大小是否不足以保留该值,而不是添加数组大小并将另一个保留之前值的数组复制到一个新数组然后替换保留的数组之前的值? 抱歉,我没听懂您的回复。让我举例说明。例如我们有一个初始大小为 10 的数组“first”。如果我们想添加任何元素,add() 函数将检查数组的大小。如果小于 10 ,它将在其中添加元素并返回数组。考虑场景,如果我们尝试在数组中添加第 11 个元素,那么 add() 函数将首先检查并意识到“第一个”数组已达到其极限,因此它将创建新数组“第二个”,其大小是当前数组的两倍,并且在其中添加第 11 个元素。然后返回这个“第二个”数组。你可以这样写 first = add(first)。【参考方案2】:

对于您的问题:我会使用 ArrayList 或 LinkedList,因为它具有动态大小。初始化后数组的大小无法更改,而你的设置为1。这会导致问题。

补充:您不需要调用ProductMenu.main(null); //back to main,因为您的addProduct 函数在main 方法中被调用,并且在执行您的函数后,您的程序将在main 函数中继续。

【讨论】:

感谢您的回复。但如果我不调用 ProductMenu.main(null); ,它不会在主函数中继续,只是输出过程完成并完成。并且数组不能使用代码进行动态变化? 一个数组有一个固定的大小,所以如果你希望你的产品列表有最大数量的产品,你可以设置你的数组大小,例如to 10: static Product[] products = new Product[10]; 但是如果你添加超过 10 个元素,你的程序就会崩溃。如果你想要没有限制的元素,你必须使用某种列表,比如java.util.ArrayList 在 addProduct 函数中调用 main 函数是不好的做法,因为它会导致递归。添加产品后程序结束的原因是您的 while 循环条件。将其替换为:while(menuOption==1 || menuOption==2 || menuOption==3 || menuOption==4); 但如果我替换为 while(menuOption==1 || menuOption==2 || menuOption==3 || menuOption==4);当我输入另一个像 9 这样的数字时,它不会重新循环到主函数,只是处理完成 所以你想一直跑?然后尝试这样的事情: while(menuOption != -1);这将继续循环,直到您键入 -1 退出程序。【参考方案3】:

我想知道您是否可以在代码中将数组替换为数组列表。 Arraylists 在后台由数组支持,您在处理数据时无需担心 arrayindexoutofbound 异常

【讨论】:

感谢回复,但我仍然想使用数组,我该如何解决这个问题? 您需要创建一个新数组,比如 new prodArr,长度 = product.length+1,创建一个 for 循环并将 product[] 的所有内容添加到其中,并将新产品添加到 prodArr[prodArr.长度-1]。然后使 product=prodArr。每次添加新产品时都需要这样做。我会说这太过分了。 哎呀..这太麻烦了 因此最好使用 java.util.Arraylist。毕竟,为什么要重新发明***? :)

以上是关于如何在方法中添加静态变量编号?的主要内容,如果未能解决你的问题,请参考以下文章

php静态变量理解----(变量前面添加static关键字)

PHP 静态变量和静态方法

如何使用静态方法初始化静态变量? [复制]

如何在静态方法中获取会话变量的值?

如何在我的所有 HTML 模板中引用静态变量?

如何在Python中定义静态变量