我有以下输入序列4, 2, 3, 5, 6, 8, 19
。我想只打印偶数值。
我正在使用此代码:
class EvenArray {
public static void main(String args[]) {
int arr[] = { 4, 2, 3, 5, 6, 8, 19 };
int a = arr.length;
int eve[] = new int[a];
for (int i = 0; i <= a; i++) {
if (arr[i] % 2 == 0) {
for (int j = 0; j <= i; j++) {
eve[j] = arr[i];
}
}
System.out.println(eve[i]);
}
}
}
我得到了结果4, 2, 6, 8, 0, 0, 0
,但我希望4, 2, 6, 8
。零不是必需的。出了什么问题?
答案 0 :(得分:1)
这是因为您的eve
数组与原始arr
的长度相同,因此其余值为0 [默认情况下ìnt
数组初始化]。
答案 1 :(得分:0)
您正在迭代循环等于数组的大小,因此要排除0,您需要添加条件,如下所示:
for(int i=0;i<a;i++)
{
if(arr[i]%2==0)
{
for(int j=0;j<=i;j++)
{
eve[j] = arr[i];
}
}
if(eve[i]==0)
continue;
System.out.println(eve[i]);
}
答案 2 :(得分:0)
如果您只关注零以外的偶数并且不想要任何其他元素,我建议您使用ArrayList
,而您最初不需要知道总大小。
ArrayList<Integer> even=new ArrayList<Integer>();
for(int i=0;i<a;i++)
{
if(arr[i]%2==0 && arr[i]!=0)
even.add(arr[i]);
}
打印值
for(Integer i:even)
{
System.out.println(i);
}
答案 3 :(得分:0)
试试这个: -
class evenArray
{
public Static void main(String args[])
{
int arr[]={4,2,3,5,6,8,19};
int a = arr.length;
int eve[]= new int[a];
for(int i=0,j=0;i<a;i++)
{
if(arr[i]!=0 && arr[i]%2==0)
{
eve[j] = arr[i];
j++;
}
}
//Printing elements
for(int k=0;k<eve.length;k++){
System.out.println(eve[k]);
}
}
}
答案 4 :(得分:0)
你有那些0,因为你打印的是你最初拥有的元素数量,即使你的偶数可能较少,默认情况下int数组的初始化为0。
假设您想要一个适用于每个输入的方法,它应该如下所示:
import java.util.ArrayList;
class EvenArray {
public static void main(String args[]) {
int arr[] = { 4, 2, 3, 5, 6, 8, 19 };
int a = arr.length;
ArrayList<Integer> eve = new ArrayList<Integer>();
for (int i = 0; i < a; i++) {
if (arr[i] % 2 == 0) {
eve.add(arr[i]);
}
}
System.out.println(eve);
}
}
备注:强> 这里我使用ArrayList,因为初始化时不需要指定它的大小(使用它需要在第一行代码上导入)
在第一个上你也有i&lt; = a,条件是,它会尝试访问一个不存在的位置并给出一个indexOutOfBoundsException。
答案 5 :(得分:0)
对于真正的OTT解决方案:
interface Filter<T> {
public boolean accept(T f);
}
static class FilteredNumbers implements Iterable<Number> {
private final List<Number> numbers = new ArrayList<>();
private final Filter filter;
public FilteredNumbers(List<Number> numbers, Filter filter) {
this.numbers.addAll(numbers);
this.filter = filter;
}
public FilteredNumbers(Number[] numbers, Filter filter) {
this(Arrays.asList(numbers), filter);
}
@Override
public Iterator<Number> iterator() {
return new Iterator<Number>() {
int i = 0;
Number next = null;
@Override
public boolean hasNext() {
if (next == null) {
for (; i < numbers.size() && next == null; i++) {
Number n = numbers.get(i);
if (filter.accept(n)) {
next = n;
}
}
}
return next != null;
}
@Override
public Number next() {
Number n = hasNext() ? next : null;
next = null;
return n;
}
};
}
}
static class EvenNumbers extends FilteredNumbers {
public EvenNumbers (Number[] numbers) {
super(numbers, new Filter<Number>() {
@Override
public boolean accept(Number f) {
return f != null && (f.intValue() & 1) == 0;
}
});
}
}