java 数组程序运行不正确.如何修复?

yb3bgrhw  于 2023-01-07  发布在  Java
关注(0)|答案(2)|浏览(132)

尝试编写一个程序,要求用户输入10个整数。该程序将偶数放入一个名为evenList的数组中,将奇数放入一个名为oddList的数组中,将负数放入一个名为negativeList的数组中。在输入所有整数后,该程序将显示这三个数组的内容。

    • 这是我的密码:**
import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
    int countNeg = 0;
    int countOdd = 0;
    int countEven = 0;
    int[] list = new int[10];
    System.out.println("Please enter 10 integers:");
    for(int i = 0; i < list.length; i++)
    {
        list[i] = scan.nextInt();
        if(list[i] < 0)
        {
            countNeg++;
        }
        if(list[i] % 2 == 0 && list[i] > 0)
        {
            countEven++;
        }
        if(list[i] % 2 == 1 && list[i] > 0)
        {
            countOdd++;
        }
    }
    int[] oddList = new int[countOdd];
    int[] evenList = new int[countEven];
    int[] negativeList = new int[countNeg];
    for(int i = 0; i < list.length; i++)
    {
        if(list[i] < 0)
        {
            for(int j = 0; j < countNeg; j++)
            {          
                negativeList[j] = list[i];
            }
        }
    }
    for(int i = 0; i < list.length; i++)
    {
        if(list[i] % 2 == 0 && list[i] > 0)
        {
            for(int j = 0; j < countEven; j++)
            {          
                evenList[j] = list[i];
            }
        }
    }
    for(int i = 0; i < list.length; i++)
    {
        if(list[i] % 2 == 1 && list[i] > 0)
        {
            for(int j = 0; j < countOdd; j++)
            {          
                oddList[j] = list[i];
            }
        }
    }

    
    for (int i : negativeList) 
    {
        System.out.print(i + " ");
    }
    
      System.out.println();
    
    for (int i : evenList) 
    {
        System.out.print(i + " ");
    }
    
    System.out.println();
    
    for (int i : oddList) 
    {
        System.out.print(i + " ");
    }
}
}

程序打印数组时,数组中的值数量正确,但数字错误。它只打印最后一个要输入的负数、偶数或奇数。exinput is 1,2,3,4,5,6,-1,-2,-3,-4。对于negativeList,它打印-4 -4 -4 -4。我猜在数组创建后循环中有问题。请帮助!!

um6iljoc

um6iljoc1#

你可以用ArrayList代替数组来简化代码。例如:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int length = 10;
        System.out.println("Please enter 10 integers:");

        List<Integer> oddList = new ArrayList<>();
        List<Integer> evenList = new ArrayList<>();
        List<Integer> negativeList = new ArrayList<>();

        for (int i = 0; i < length; i++) {
            int n = scan.nextInt();
            if (n < 0) {
                negativeList.add(n);
            } else if (n % 2 == 0) {
                evenList.add(n);
            } else {
                oddList.add(n);
            }
        }

        for (int i : negativeList) {
            System.out.print(i + " ");
        }

        System.out.println();

        for (int i : evenList) {
            System.out.print(i + " ");
        }

        System.out.println();

        for (int i : oddList) {
            System.out.print(i + " ");
        }
    }
enxuqcxy

enxuqcxy2#

你提供的代码有一些问题。
首先,在初始化negativeList、evenList和oddList数组的for循环中,你在每次迭代时都会覆盖这些值,这意味着最终的数组只包含最后一个赋值给它们的值。要解决这个问题,你可以使用一个计数器变量来跟踪每个数组中要填充的下一个索引,如下所示:

int negCounter = 0;
int evenCounter = 0;
int oddCounter = 0;

for(int i = 0; i < list.length; i++)
{
    if(list[i] < 0)
    {
        negativeList[negCounter] = list[i];
        negCounter++;
    }
}

for(int i = 0; i < list.length; i++)
{
    if(list[i] % 2 == 0 && list[i] > 0)
    {
        evenList[evenCounter] = list[i];
        evenCounter++;
    }
}

for(int i = 0; i < list.length; i++)
{
    if(list[i] % 2 == 1 && list[i] > 0)
    {
        oddList[oddCounter] = list[i];
        oddCounter++;
    }
}

第二,您没有检查输入值是否为整数。如果用户输入非整数值,程序将抛出异常。您可以添加一个检查以确保输入为整数,如下所示:

if(scan.hasNextInt())
{
    list[i] = scan.nextInt();
    // ... rest of the code
}
else
{
    System.out.println("Please enter an integer.");
    // If the input is not an integer, discard it and move to the next 
input
    scan.next();
}

相关问题