有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组和输出

我刚开始用java编程,所以请原谅我愚蠢的错误。我的问题是,我的代码没有给出我想要的输出,即显示数组中的所有偶数值,然后显示数组中的所有不均匀值。这是我的代码:

//main class
public class Even_number_array
{

  public static void main(String[] args)
  {

    array_class obj = new array_class();
    obj.set_numbers();
  }
}

//another class
public class array_class
{

  private int arr[] =
  {
    10, 20, 7, 8, 3, 6, 11, 9, 7, 45
  };

  public void set_numbers()
  {

    for (int i = 0; i <= arr.length; i++)
    {

      if (arr[i] % 2 == 0)
      {
        System.out.println("These even numbers were found in the array:");
        do
        {
          System.out.println(arr[i]);
          i++;
        }
        while (arr[i] % 2 == 0);
      }
      else if (arr[i] % 2 != 0)
      {
        System.out.println("uneven numbers found in array:");
        do
        {
          System.out.println(arr[i]);
          i++;
        }
        while (arr[i] % 2 != 0);
      }

    }

  }
}

这是我的输出(使用Netbeans IDE,它显示了我的错误,我之所以包括这些错误,是因为我不太明白它的意思。):

These even numbers were found in the array:

10

20

These even numbers were found in the array:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10

8

These even numbers were found in the array:

6

uneven numbers found in array:

9

7

45

at even_number_array.array_class.set_numbers(array_class.java:35)

at even_number_array.Even_number_array.main(Even_number_array.java:12)

Java Result: 1

我有几个问题,为什么我的数组中的数字8不是用10和20打印,而6像8一样单独打印?还有,有没有一种方法可以让我使用Scanner类为数组获取用户输入,我该如何做呢

欢迎任何帮助!提前感谢:)


共 (3) 个答案

  1. # 1 楼答案

    For loop应该是<;不是<;=

    System.out.println("Even Numbers");
    for (int i=0; i < arr.length;i++){
       if((arr[i] % 2) == 0)
       {
          System.out.println(arr[i]);
       }
    }
    System.out.println("Odd Numbers");
    for (int i=0; i < arr.length;i++){
       if((arr[i] % 2) != 0)
       {
          System.out.println(arr[i]);
       }
    }
    

    ArrayList<Integer> array = new ArrayList<Integer>();
            int[] intArray;
            Scanner scanner = new Scanner(System.in);
            int a = 0;
            while(a != -1)
            {
                System.out.println("Please enter an integer -1 to quit: ");
                a = scanner.nextInt();
                if(a != -1)
                {
                    array.add(a);
                }
            }
            intArray = new int[array.size()];
            for(int i = 0; i < array.size(); i++)
            {
                intArray[i] = array.get(i);
            }
            for(int b = 0; b < intArray.length; b++)
            {
                System.out.println("Integer" + b + ": " + intArray[b]);
            }
    

    将这段代码放入主方法并执行。我希望这能帮助你解决问题

  2. # 2 楼答案

    回答你的问题: “为什么我的数组中的数字8不能用10和20打印,而6像8一样单独打印?”

    这是因为你的两个循环系统(对于+do-while)。例如,当你用i=1打印“20”时,你会做一个i++,给出i=2和arr[i]=7。此时,您的while arr[i]%2==0,当然还有7%2!=0所以退出do while循环,返回for,再执行一次i++操作,给出i=3,然后再次转到if:在本例中,您从未打印过值arr[2]=7,然后再次打印“这些偶数在数组中找到:”值arr[3]=8

    我希望解释清楚。没有白板,很难解释算法;)

    PS:+1表示“for循环在本例中应为<;而非<;=”

  3. # 3 楼答案

    如果我理解你的问题——以及你想要什么。最简单的解决方案(我明白了)是循环两次

    // Print the even numbers first.
    for (int i=0; i < arr.length;i++){
      if (arr[i] % 2 == 0) { // % 2 == 0 is even
        System.out.printf("arr[%d] = %d%n (even)", i, arr[i]);
      }
    }
    // Then the odd numbers.
    for (int i=0; i < arr.length;i++){
      if (arr[i] % 2 != 0) { // % 2 != 0 is odd (or "uneven")
        System.out.printf("arr[%d] = %d%n (odd)", i, arr[i]);
      }
    }