所以我有一个显示来自我的数组的信息的方法。我想有另一种方法,我可以向这些数组添加信息。你可以在代码中看到我是如何尝试这样做的。我正在尝试使用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] + ".");
}
}
}
答案 0 :(得分:4)
Array
具有固定大小。如果不将它们复制到另一个更大的数组中,那么将其他项添加到数组中并不容易。
您可以使用Java List来解决此问题。
ArrayList<String>
可以存储任意数量的字符串(取决于可用内存 - 但这不应该打扰你)
解决问题的最简单方法是使用您班级的变量(modelNo
,location
,quantity
和price
)静态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)
由于两个原因,您无法从其他方法向这些数组添加任何内容。
为了进一步解释我的第二点,你的数组的问题是你已经设置了它们的大小,并且当你在创建时将值放入其中时它们会进入它们。如果你想增加更多,你就不能。
要回答您的问题,请使用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) + ".");
}
}
}