在Java中,为什么我不能多次插入一个整数,插入一个整数后不能打印出来,导入库不能清空数组?
In Java, Why cannot I insert an integer more than once, cannot print out after inserting one integer and cannot empty array with imported libraries?
在我之前关于 switch 语句的问题之后,switch 语句工作得很好,但它导致了我遇到的几个问题。
1.) 当我尝试将整数插入我的数组时,当我键入一个整数的第一个输入时它起作用,它似乎在 Eclipse 上起作用,但是在键入第二个输入或输入 2 之后不同的整数。经过我的解释,错误如下所示。
2.) 当我试图在插入第一个整数后打印出我的数组以测试它是否有效时,这也不好。也许我的 ListArray class 有问题?经过我的解释,错误如下所示,与我的第一个问题相同。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at <my personal infomation>.ListArray.add(ListArray.java:24)
at <my personal information>.main.main(main.java:32)
3.) 我知道 .clear() 是清除数组的通用函数,但它是 Eclipse 上的错误,即使我导入了 3 个库:
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
主要代码:
public abstract class main
{
public static void main(String[] args)
{
ListArray list = new ListArray();
algorithms Alg;
Scanner s = new Scanner(System.in);
printCommands();
while(s.hasNext())
{
String command = s.next();
char ch = s.next().charAt(0);
switch(command)
{
case "c":
list.clear(); //I have found other resources that used clear() as a built in function, but Eclipse asks me to create a method?
return;
case "a":
ch = s.next().charAt(0);
list.add(ch);
break;
case "d":
System.out.println(list.toString());
break;
case "q":
s.close();
break;
default:
System.out.println("Invalid Command. Use one of the given commands.");
printCommands();
break;
}
}
}
我的列表数组class
import java.util.Arrays;
public class ListArray
{
private static final int MAX_VALUE = 0;
private Object[] myStore;
private int actSize = 0;
public ListArray()
{
myStore = new Object[MAX_VALUE];
}
public void add(Object obj)
{
int x = MAX_VALUE;
if(myStore.length-actSize <= x)
{
increaseListSize();
}
myStore[actSize++] = obj;
}
public int size()
{
return actSize;
}
private void increaseListSize()
{
myStore = Arrays.copyOf(myStore, myStore.length*2);
//System.out.println("\nNew length: "+myStore.length);
}
}
这一行
ListArray list = new ListArray();
表示您声明的变量名称为 list,类型为 ListArray,并且您通过调用不带参数的构造函数来创建实例。
问题是 - TYPE 是 ListArray。不多也不少。它是您的 class,因此它确实只有从 Object 继承的方法(如 equals、toString),然后只有您创建的方法。
如果你不明确创建方法,它就没有。
如果你想使用标准的Java classes,你必须声明一个类型的变量。
喜欢List<Character> x = new ArrayList<Character>();
您收到 ArrayIndexOutOfBoundsException,因为数组的大小为零。
您的代码(在 ListArray
中的 add
方法中)注意到数组太小,因此它调用 increaseListSize
将大小加倍...但是双零是仍然为零。
然后它尝试分配这个零长度数组中的第一个元素。
在我之前关于 switch 语句的问题之后,switch 语句工作得很好,但它导致了我遇到的几个问题。
1.) 当我尝试将整数插入我的数组时,当我键入一个整数的第一个输入时它起作用,它似乎在 Eclipse 上起作用,但是在键入第二个输入或输入 2 之后不同的整数。经过我的解释,错误如下所示。
2.) 当我试图在插入第一个整数后打印出我的数组以测试它是否有效时,这也不好。也许我的 ListArray class 有问题?经过我的解释,错误如下所示,与我的第一个问题相同。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at <my personal infomation>.ListArray.add(ListArray.java:24)
at <my personal information>.main.main(main.java:32)
3.) 我知道 .clear() 是清除数组的通用函数,但它是 Eclipse 上的错误,即使我导入了 3 个库:
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
主要代码:
public abstract class main
{
public static void main(String[] args)
{
ListArray list = new ListArray();
algorithms Alg;
Scanner s = new Scanner(System.in);
printCommands();
while(s.hasNext())
{
String command = s.next();
char ch = s.next().charAt(0);
switch(command)
{
case "c":
list.clear(); //I have found other resources that used clear() as a built in function, but Eclipse asks me to create a method?
return;
case "a":
ch = s.next().charAt(0);
list.add(ch);
break;
case "d":
System.out.println(list.toString());
break;
case "q":
s.close();
break;
default:
System.out.println("Invalid Command. Use one of the given commands.");
printCommands();
break;
}
}
}
我的列表数组class
import java.util.Arrays;
public class ListArray
{
private static final int MAX_VALUE = 0;
private Object[] myStore;
private int actSize = 0;
public ListArray()
{
myStore = new Object[MAX_VALUE];
}
public void add(Object obj)
{
int x = MAX_VALUE;
if(myStore.length-actSize <= x)
{
increaseListSize();
}
myStore[actSize++] = obj;
}
public int size()
{
return actSize;
}
private void increaseListSize()
{
myStore = Arrays.copyOf(myStore, myStore.length*2);
//System.out.println("\nNew length: "+myStore.length);
}
}
这一行
ListArray list = new ListArray();
表示您声明的变量名称为 list,类型为 ListArray,并且您通过调用不带参数的构造函数来创建实例。
问题是 - TYPE 是 ListArray。不多也不少。它是您的 class,因此它确实只有从 Object 继承的方法(如 equals、toString),然后只有您创建的方法。
如果你不明确创建方法,它就没有。
如果你想使用标准的Java classes,你必须声明一个类型的变量。
喜欢List<Character> x = new ArrayList<Character>();
您收到 ArrayIndexOutOfBoundsException,因为数组的大小为零。
您的代码(在 ListArray
中的 add
方法中)注意到数组太小,因此它调用 increaseListSize
将大小加倍...但是双零是仍然为零。
然后它尝试分配这个零长度数组中的第一个元素。