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

Java 如何在方法中添加静态变量号?,java,arrays,methods,static,main,Java,Arrays,Methods,Static,Main,我创建了一个ProductMenu类来执行添加、搜索、删除和更新产品任务,它只使用数组。我面临的问题是如何在方法中添加静态变量,因为在将产品添加到数组中后,我未能添加最大数量的数组。希望能帮到你,谢谢你 public static void addProduct(){ Product product = new Product(); System.out.println("================================"); Syste

我创建了一个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)

我想知道您是否可以在代码中用arraylist替换array。arraylist由后台的数组支持,在处理数据时不必担心arrayindexoutofbound异常

我想知道您是否可以在代码中用arraylist替换arraylist。ArrayList由后台的数组支持,在处理数据时不必担心arrayindexoutofbound异常。我会使用ArrayList或LinkedList,因为它具有动态大小。数组的大小在初始化后无法更改,并且您的设置为1。那会引起问题


添加:不需要调用
ProductMenu.main(空)//返回main
,因为您的
addProduct
函数是在main方法中调用的,执行函数后,程序将继续在main函数中运行

解决您的问题:我会使用ArrayList或LinkedList,因为它具有动态大小。数组的大小在初始化后无法更改,并且您的设置为1。那会引起问题


添加:不需要调用
ProductMenu.main(空)//返回main
,因为您的
addProduct
函数是在main方法中调用的,执行函数后,程序将继续在main函数中运行

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

因为您只需要使用数组,然后创建一个函数add(),该函数将首先检查数组的大小,如果还有空间,则添加元素,否则创建一个新的双大小数组,复制所有以前的图元,并在末尾添加新图元。

另外,由于大小是静态变量,所以不必传递给方法。您的方法也是静态的,并且方法和变量都在同一个类中,所以您可以直接在方法中使用变量。

感谢回复的可能重复,我知道数组索引从0开始。在我的代码中,numorary表示该数组的数组索引数,默认值为1,索引为0。在我的addProduct()函数中,在我将产品添加到数组中之后,当我添加另一个新的数组时,numOfArrayUse++将变成2,但我弄错了,这不是增加numOfArrayUse
java.util.ArrayList
,而是使用
Array
动态大小。数组真的不能用代码动态更改大小吗?数组一旦创建就不能更改大小。可能是重复的我知道数组索引是从0开始的。在我的代码中,numorary表示该数组的数组索引数,默认值为1,索引为0。在我的addProduct()函数中,在我将产品添加到数组中之后,当我添加另一个新的数组时,numOfArrayUse++将变成2,但我弄错了,这不是增加numOfArrayUse
java.util.ArrayList
,而是使用
Array
动态大小。数组真的不能用代码动态更改大小吗?数组一旦创建就不能更改大小。感谢回复,但我仍然无法更改大小要使用数组以及如何解决此问题?您需要创建一个新数组,即长度=product.length+1的new prodArr,创建一个for循环,将product[]的所有内容添加到该数组中,并将新产品添加到prodArr[prodArr.length-1]。然后使产品=产品。这需要在每次添加新产品时完成。我想说那太过分了,太过分了。。这非常麻烦,因此最好使用java.util.Arraylist。毕竟,为什么要重新发明轮子呢?:)感谢您的回复,但我仍然想使用数组以及如何解决此问题?您需要创建一个新数组,比如长度为product.length+1的new prodArr,创建一个for循环,并将product[]的所有内容添加到该数组中,然后将新产品添加到prodArr[prodArr.length-1]。然后使产品=产品。这需要在每次添加新产品时完成。我想说那太过分了,太过分了。。这非常麻烦,因此最好使用java.util.Arraylist。毕竟,为什么要重新发明轮子呢?:)谢谢你的回复。但是如果我不调用ProductMenu.main(null),它没有在主功能中继续,只是输出过程完成并完成。数组不能使用代码进行动态更改?数组具有固定大小,因此如果您希望产品列表中的产品数量达到最大值,请将数组大小设置为10:
static product[]products=新产品[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);当我输入另一个num(如9)时,它不会重新启动到主函数,而只是处理finisheds。您想一直运行吗?然后尝试以下操作:while(menuOption!=-1);这将继续循环,直到键入-1退出循环