java - 将第一个数组中的偶数复制到另一个数组中
问题描述
我有一个问题,当我尝试从第一个数组中显示充满偶数的新数组时,它似乎只输出最后一个值?我看不出问题出在 GetEven 方法内的嵌套 for 循环中吗?
package allevenproj;
import java.util.*;
public class AllEvenProj {
static int Read(int[] arr) {
Scanner scan = new Scanner(System.in);
int count = 0;
for (int i = 0; i < arr.length; i++) {
System.out.printf("Enter arr[%d]: ", i);
arr[i] = scan.nextInt();
if (arr[i] % 2 == 0) {
count++;
}
}
System.out.printf("There are %d even numbers\n", count);
return count;
}
static int[] GetEven(int[] arr, int count) {
int[] evenArr = new int[count];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < count; j++) {
if (arr[i] % 2 == 0) {
evenArr[j] = arr[i];
}
}
}
return evenArr;
}
static void Print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter size of array: ");
int n = scan.nextInt();
int[] arr = new int[n];
int a = Read(arr);
Print(GetEven(arr, a));
}
}
解决方案
你只得到最后一个值,因为由于方法中的内部 for 循环GetEven
:每次你做一个完整的内部循环(你为每个数字做它arr
)你重写整个evenArr
.
所以修复是删除内部循环:
static int[] getEven(int[] arr, int count) {
int[] evenArr = new int[count];
int j = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
evenArr[j++] = arr[i];
}
}
return evenArr;
}
顺便说一句,方法名称应该是小写的。命名约定
推荐阅读
- javascript - 如何使用 Winston 库在 Node.js 中每天将日志分隔到单独的文件中
- c# - 实体框架中的连接表C#高效方法
- raspberry-pi3 - 发现错误:错误:找不到模块“node_helper”
- javascript - 电子邮件的表单验证在 Vuejs 中不起作用
- ios - 编译器无法在 SWIFTUI 合理的时间内对该表达式进行类型检查?
- javascript - JSON 响应的 JavaScript 百分比计算
- html - DIV 文本格式不一致
- sql - 使用 sql 查找每个用户给出的平均评分
- oracle - 将 LISTAGG 转换为 XMLAGG
- c# - Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?