我有一种情况,我必须在输入数组上应用一个标准,然后将另一个数组作为输出返回,该输出将根据过滤标准具有更小的大小。
现在的问题是我不知道过滤结果的大小,所以我不能用特定的值初始化数组。而且我不希望它太大,因为我使用的是 array.length;稍后的。
一种方法是首先循环原始输入数组并设置一个计数器,然后使用该计数器长度进行另一个循环并初始化并填充此数组[]。但是有没有办法只在一个循环中完成这项工作?
我有一种情况,我必须在输入数组上应用一个标准,然后将另一个数组作为输出返回,该输出将根据过滤标准具有更小的大小。
现在的问题是我不知道过滤结果的大小,所以我不能用特定的值初始化数组。而且我不希望它太大,因为我使用的是 array.length;稍后的。
一种方法是首先循环原始输入数组并设置一个计数器,然后使用该计数器长度进行另一个循环并初始化并填充此数组[]。但是有没有办法只在一个循环中完成这项工作?
你不能...数组的大小在 Java 中总是固定的。通常,您将使用List<T>
here 的实现而不是使用数组 - 通常ArrayList<T>
,但还有许多其他可用的替代方案。
当然,您可以从列表中创建一个数组作为最后一步 - 或者只是更改方法的签名以返回 aList<T>
开始。
改为使用LinkedList
。比,如果需要,您可以创建一个数组。
只需返回任何类型的列表。ArrayList 会很好,它不是静态的。
ArrayList<yourClass> list = new ArrayList<yourClass>();
for (yourClass item : yourArray)
{
list.add(item);
}
这是您的课程的代码。但这也包含很多重构。请为每个而不是为。干杯:)
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");
}
}
如果您使用的是 Java 8 或更高版本,则可以使用Stream
. 这是一个只提取偶数的例子int[]
。
static int[] evenFilter(int[] input) {
return IntStream.of(input)
.filter(i -> i % 2 == 0)
.toArray();
}
public static void main(String args[]) throws IOException {
int[] input = {3, 4, 22, 36, 49, 51};
int[] output = evenFilter(input);
System.out.println(Arrays.toString(output));
}
输出:
[4, 22, 36]