我有一种情况,我必须在输入数组上应用一个标准,并将另一个数组重新作为输出,根据过滤条件,它将具有更小的尺寸。
现在问题是我不知道过滤结果的大小,所以我无法用特定值初始化数组。并且我不希望它是大尺寸将为null值,因为我使用array.length;稍后的。
一种方法是首先循环原始输入数组并设置计数器,然后使用该计数器长度创建另一个循环并初始化并填充此数组[]。但是,无论如何只需要在一个循环中完成这项工作吗?
答案 0 :(得分:38)
你不能......数组的大小总是在Java中修复。通常不使用数组,而是在这里使用List<T>
的实现 - 通常是ArrayList<T>
,但还有很多其他选择。
当然,您可以从列表中创建一个数组作为最后一步 - 或者只是更改方法的签名以返回List<T>
开始。
答案 1 :(得分:3)
请改用LinkedList
。比,你可以在必要时创建一个数组。
答案 2 :(得分:3)
使用ArrayList.数组大小在java中修复
答案 3 :(得分:3)
只需返回任何类型的列表。 ArrayList很好,不是静态的。
ArrayList<yourClass> list = new ArrayList<yourClass>();
for (yourClass item : yourArray)
{
list.add(item);
}
答案 4 :(得分:2)
如果你这样做,你实际上只能声明一个数组,而不是使用任何集合。
ClassName[] arrayname;
...
arrayname = new ClassName[10*15*100*variable+CONSTANT+Math.ciel(Math.Random())];
答案 5 :(得分:0)
这是你的课程代码。但这也包含了很多重构。请为每个添加一个而不是。干杯:)
static int isLeft(ArrayList<String> left, ArrayList<String> right)
{
int f = 0;
for (int i = 0; i < left.size(); i++) {
for (int j = 0; j < right.size(); j++)
{
if (left.get(i).charAt(0) == right.get(j).charAt(0)) {
System.out.println("Grammar is left recursive");
f = 1;
}
}
}
return f;
}
public static void main(String[] args) {
// TODO code application logic here
ArrayList<String> left = new ArrayList<String>();
ArrayList<String> right = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
System.out.println("enter no of prod");
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
System.out.println("enter left prod");
String leftText = sc.next();
left.add(leftText);
System.out.println("enter right prod");
String rightText = sc.next();
right.add(rightText);
}
System.out.println("the productions are");
for (int i = 0; i < n; i++) {
System.out.println(left.get(i) + "->" + right.get(i));
}
int flag;
flag = isLeft(left, right);
if (flag == 1) {
System.out.println("Removing left recursion");
} else {
System.out.println("No left recursion");
}
}