从键盘输入8个整数存放在一个数组中,然后将奇数和偶数分别存入到两个不同的数组中,并按奇数、偶数交替的顺序输出这两个数组中的所有数据(先交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数)。(提示与要求:(1)定义一个数组存储从键盘输入的8个整数,先判断这8个整数中奇数和偶数的个数,才能定义存储奇数和偶数的数组的长度;(2)把一个大的数组分别存放在奇数和偶数数组中并交替输出的过程定义为方法)
分析:
1.首先需要定义一个数组存储输入的八个数,并判断输入的数中奇数和偶数的个数,所以需要使用循环遍历并判断这八个数值,定义两个计数器放入判断语句中计算个数
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入8个整数:");
int b[]=new int[8];//定义数组存储输入的八个整数
int c=0,d=0;//计数器计算奇数偶数的个数
for (int i = 0; i <8; i++) {
int s=scanner.nextInt();
b[i]=s;
if(b[i]%2==0){
c++;
}
else{
d++;
}
}
System.out.println("偶数的个数"+c);
System.out.println("奇数的个数"+d);
2.定义两个数组存放奇数和偶数,并通过循环遍历将奇数和偶数的值存入两个数组中
int O[]=new int[c];//定义偶数的数组
int J[]=new int[d];//定义奇数的数组
int j=0;
int k=0;
for (int i = 0; i <8; i++) {
if(b[i]%2==0){
for (; j <8; ) {
O[j]=b[i];
j++;
break;
}
}
}
for (int i = 0; i <8; i++) {
if(b[i]%2!=0){
for (; k <8 ; ) {
J[k]=b[i];
k++;
break;
}
}
}
1.在这里,我们为什么没有把i的值定义在for循环内而是定义在for循环内呢?
2.j的值为什么也没有放在for循环的条件变化语句位置呢?
我们的需求是在第一个循环遍历的时候通过判断让符合条件的进入第二个循环,并将值赋给存储偶数的数组,正常情况下之这样的
输入b数组值{1,2,3,4,5,6,7,8}
结果输出:
这是为什么?
通过对第二个for循环的断点调试我发现循环将b的值一直赋值给O[0],因为j的初始值定义在for循环内导致每次进行到第二次循环的时候j都初始为0,所以一直被重复赋值,将j的初始值放在循环外就能解决这个问题,j自增的位置也是一样的道理,放在下面才被计算不会被初始掉
3.定义方法将这两个方法交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数
private static void panduan(int c,int d,int[] b,int O[],int J[]) {
if(c>d) {//偶数比奇数多
for (int m = 0; m <d; m++) {
System.out.println(O[m]);
System.out.println(J[m]);
}
for(int n=d;n<c;n++) {//将多的部分输出
System.out.println(O[n]);
}
}
else if(c==d) {//偶数等于奇数
for (int m = 0; m < d; m++) {
System.out.println(J[m]);
System.out.println(O[m]);
}
}
else{//偶数比奇数少
for (int m = 0; m <c; m++) {
System.out.println(O[m]);
System.out.println(J[m]);
}
for(int n=c;n<d;n++) {
System.out.println(J[n]);
}
}
}
完整代码:
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入8个整数:");
int b[]=new int[8];//定义数组存储输入的八个整数
//int b[]={1,2,3,4,5,6,7,8};
int c=0,d=0;//计数器计算奇数偶数的个数
for (int i = 0; i <8; i++) {
int s=scanner.nextInt();
b[i]=s;
if(b[i]%2==0){
c++;
}
else{
d++;
}
}
System.out.println("偶数的个数"+c);
System.out.println("奇数的个数"+d);
int O[]=new int[c];//定义偶数的数组
int J[]=new int[d];//定义奇数的数组
int j=0;
int k=0;
for (int i = 0; i <8; i++) {
if(b[i]%2==0){
for (; j <8; ) {
O[j]=b[i];
j++;
break;
}
}
}
for (int i = 0; i <8; i++) {
if(b[i]%2!=0){
for (; k <8 ; ) {
J[k]=b[i];
k++;
break;
}
}
}
// for (int a:O
// ) {
// System.out.println(a);
// }
panduan(c,d,b,O,J);
}
private static void panduan(int c,int d,int[] b,int O[],int J[]) {
if(c>d) {//偶数比奇数多
for (int m = 0; m <d; m++) {
System.out.println("偶数"+O[m]);
System.out.println("奇数"+J[m]);
}
for(int n=d;n<c;n++) {
System.out.println("偶数"+O[n]);
}
}
else if(c==d) {//偶数等于奇数
for (int m = 0; m < d; m++) {
System.out.println("奇数"+J[m]);
System.out.println("偶数"+O[m]);
}
}
else{//偶数比奇数少
for (int m = 0; m <c; m++) {
System.out.println("偶数"+O[m]);
System.out.println("奇数"+J[m]);
}
for(int n=c;n<d;n++) {
System.out.println("奇数"+J[n]);
}
}
}
}
测试: