从另一种方法与数组交互?

时间:2017-06-12 20:09:38

标签: java arrays

所以我有一个显示来自我的数组的信息的方法。我想有另一种方法,我可以向这些数组添加信息。你可以在代码中看到我是如何尝试这样做的。我正在尝试使用addTV()方法创建一个电视并将其放入displayTVs()中的数组中。

package harveynorman;

import java.util.Scanner;

/**
 * Created by tiern on 11/06/2017.
 */
public class HarveyNorman
{
    public static void main(String args[])
    {
        displayTVs();
    }

    public static void addTV()
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter the product code: ");
        String productCode = scanner.nextLine();

       if (productCode.startsWith("UE")) {
            modelNo.add(productCode);
       }

    }

    public static void displayTVs()
    {
        String[] modelNo = new String[]{"UE43MU5500", "UE49MU6200", "UE50MU6100", "UE55MU6100", "UE55MU6200", "UE55MU6500", "UE55MU7000", "UE55MU9000", "UE65MU6100", "UE65MU6100"};
        int[] quantity = new int[] {1, 2, 1, 1, 1, 2, 1, 2, 2, 2};
        int[] price = new int[] {729, 949, 929, 1079, 1199, 1299, 1739, 2394, 2399, 2759};
        String[] location = new String[] {"Opposite Samsung Stand", "Samsung Stand", "6th from Left, Bottom Row", "Top Row, 2nd from Right", "Top Row, Second from Left", "N/A", "Samsung Stand", "Samsung Stand", "N/A", "N/A"};


        System.out.print("SAMSUNG TVS");
        System.out.println("--------------------");

        for (int i = 0; i<modelNo.length; i++)
        {
            System.out.println(i+1 + ":\t" + "Model No:\t" + modelNo[i] + ".\tIn stock: " + quantity[i] + ".\t€ " + price[i] + "\tLocation:\t" + location[i] + ".");
        }
    }
}

2 个答案:

答案 0 :(得分:4)

Java中的

Array具有固定大小。如果不将它们复制到另一个更大的数组中,那么将其他项添加到数组中并不容易。

您可以使用Java List来解决此问题。

ArrayList<String>可以存储任意数量的字符串(取决于可用内存 - 但这不应该打扰你)

解决问题的最简单方法是使用您班级的变量(modelNolocationquantityprice)静态class variables¹ 。

并将其类型从数组更改为列表类型(String[] - &gt; ArrayList<String>

这将导致代码不太清晰。

一个更好的解决方案是从你的方法中删除static关键字,除了main方法。

在你的main中,创建一个类的实例并在这个实例上调用方法。像:

HarveyNorman myClassInstance = new HarveyNorman();
myClassInstance.displayTVs();

然后将变量移出方法member variables¹。

另一种方法,使您的代码更有条理,更易读:

为您的电视股创建一个新类,其中包含modelNo,数量,价格,位置的成员变量。 (或者对于电视一般来说,取决于你)

然后使用此类的List而不是4个单独的Arrays作为数据。

¹:

class MyClass{
    static int a;       // class variable
    int b;              // member variable

    static void foo(){} // class method        
    void foo(){}        // member method
}

答案 1 :(得分:0)

由于两个原因,您无法从其他方法向这些数组添加任何内容。

  1. 它们是方法displaysTv的本地(意味着它们只能通过那里访问)
  2. 无法调整阵列大小。如果要动态添加到数组,则需要使用ArrayList或至少为数组设置大小。
  3. 为了进一步解释我的第二点,你的数组的问题是你已经设置了它们的大小,并且当你在创建时将值放入其中时它们会进入它们。如果你想增加更多,你就不能。

    要回答您的问题,请使用ArrayList,这样您就可以根据需要添加任意数量的记录。但是,不要在方法中声明那些ArrayList,将它们声明为外部,将它们作为实例变量,可以被类中的所有方法访问。

    我已经重新编写了你的​​代码,这样如果你遇到任何让我知道的话,你会做你想做的事。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    /**
     * Created by tiern on 11/06/2017.
     */
    public class HarveyNorman {
    
        private static ArrayList<String> modelNo = new ArrayList<>();
        private static ArrayList<Integer> quantity = new ArrayList<>();
        private static ArrayList<Integer> price = new ArrayList<>();
        private static ArrayList<String> location = new ArrayList<>();
    
        public static void main(String args[])
        {
            displayTVs();
        }
    
        public static void addTV()
        {
            Scanner scanner = new Scanner(System.in);
            System.out.println("Please enter the product code: ");
            String productCode = scanner.nextLine();
    
           if (productCode.startsWith("UE")) {
                modelNo.add(productCode);
           }
    
        }
    
        public static void displayTVs() {
    
    
            String[] modelNoRecords = new String[]{"UE43MU5500", "UE49MU6200", "UE50MU6100", "UE55MU6100", "UE55MU6200", "UE55MU6500", "UE55MU7000", "UE55MU9000", "UE65MU6100", "UE65MU6100"};
            modelNo.addAll(Arrays.asList(modelNoRecords));
            Integer[] quantityRecords = new Integer[] {1, 2, 1, 1, 1, 2, 1, 2, 2, 2};
            quantity.addAll(Arrays.asList(quantityRecords));
            Integer[] priceRecords   = new Integer[] {729, 949, 929, 1079, 1199, 1299, 1739, 2394, 2399, 2759};
            price.addAll(Arrays.asList(priceRecords));
            String[] locationRecords = new String[] {"Opposite Samsung Stand", "Samsung Stand", "6th from Left, Bottom Row", "Top Row, 2nd from Right", "Top Row, Second from Left", "N/A", "Samsung Stand", "Samsung Stand", "N/A", "N/A"};
            location.addAll(Arrays.asList(locationRecords));
    
            System.out.print("SAMSUNG TVS");
            System.out.println("--------------------");
    
            for (int i = 0; i<modelNo.size(); i++) {
                System.out.println(i+1 + ":\t" + "Model No:\t" + modelNo.get(i) + ".\tIn stock: " + quantity.get(i) + ".\t€ " + price.get(i) + "\tLocation:\t" + location.get(i) + ".");
            }
        }
    }