Java中的循环和数组

Java中的循环和数组,java,Java,以下是说明: 实现以下方法,以便打印arr偶数索引行中的所有偶数值元素,以及arr奇数索引行中的所有奇数值元素 同一行的元素应显示在同一行上,并用空格分隔。不同行的元素应显示在不同的行上 例如: int[][] arr = {{1, 2, 3}, {1, 2, 3} {4, 5, 6}}; printOddEvens(arr); 应打印: 2 1 3 4 6 这就是我所拥有的,虽然有点离谱,但方向是正确的: 我知道指纹是错的

以下是说明:

实现以下方法,以便打印arr偶数索引行中的所有偶数值元素,以及arr奇数索引行中的所有奇数值元素

同一行的元素应显示在同一行上,并用空格分隔。不同行的元素应显示在不同的行上

例如:

int[][] arr = {{1, 2, 3},
               {1, 2, 3}
               {4, 5, 6}};

printOddEvens(arr);
应打印:

2

1 3

4 6
这就是我所拥有的,虽然有点离谱,但方向是正确的:

我知道指纹是错的

public static void main(String[] args) {
    int arr[][] = {{1,2,3},{1,2,3},{4,5,6}};

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

你必须仔细考虑眼前的问题。首先,您必须访问每个子数组上的元素,如果不访问每个子数组,这是不可能的。正当现在,对于每个子数组,您必须检查其索引是偶数还是奇数。如果是偶数,则必须打印偶数元素;如果是奇数,则必须打印奇数元素。要访问并检查每个元素,必须遍历整个子数组


我认为现在这个问题很容易解决,或者至少你知道你需要使用多少循环,以及你需要如何处理它们。希望这有帮助:

根据您发布的代码,您已经知道如何在数组上循环。现在调查正在循环的数组,看看它包含哪些元素。例如

int[] array = new int[]{1,2,3}
显然包含int。因此,当我调用数组[0]时,我向数组询问它的第一个元素,并得到一个int

现在调查您的数组,看看它包含哪些元素,以及该行可能有什么问题

int num = arr[i].charAt(i);

这里的其他答案已经解决了子数组问题,所以我暂时不讨论这个问题。相反,我将尝试就偶数/奇数支票提供一些建议

有时,稍微重新表述一个问题会有所帮助。在这种情况下,我认为如果你不考虑打印偶数,如果外循环的索引是偶数,或者打印奇数,如果是奇数,而是如果内循环的索引的均匀度与外循环的索引的均匀度相同,那么打印会很有帮助

这可能有帮助的原因是它减少了ifs的嵌套,这可能会让人在精神上感到困惑。那么,你应该:

if outer is even
    if inner is even
        print
else // outer is odd
    if inner is odd
        print
您可以使用更简单的:

if outer-evenness equals inner-evenness
    print

您可以看到,这有三分之一的ifs,并且没有嵌套。希望这能帮助你集中精力解决问题的其他方面。

鉴于这是家庭作业,你真的需要自己解决这个问题,不过,这里有一些你应该做的事情的建议

首先想一想二维数组,它基本上是一个网格,如果它写的是:

int[][] arr = {
  {1, 2, 3},
  {1, 2, 3}
  {4, 5, 6}
};
所以您需要编写两个循环,一个循环遍历行,另一个循环遍历每行上的值。与大多数网格不同,在二维数组的情况下,坐标是反向的,因此要访问第二行的第三个值,数字3,并且使用一个基于零的索引,您需要写入:

arr[1][2]
其中1表示行,2表示列

鉴于此,您应该能够编写打印数组中所有值所需的循环,从而:

1 2 3
1 2 3
4 5 6
一旦你有了这个循环就完成了


问题的下一点要求您确定一个数字是奇数还是偶数。要在Java中执行此操作,请使用模运算符%,以便i%2==0表示偶数,i%2!=0表示奇数。我会在两个方法中弹出这些操作boolean Isevent I和boolean Isodtint I,然后在循环中的适当点调用这些方法来决定第一个,是否切换到奇数或偶数打印模式,第二个,无论一个数字是奇数还是偶数,都应该按照该模式打印。

对于每个数组,分别进行遍历,因为是二维的,所以需要两个循环。例如:

public static void main(String[] args) {
    int[][] a = {{1,2,3}, {2,5}};

    for (int i = 0; i < a.length; i++){
        for (int j = 0; j < a[i].length; j++){
            System.out.println(a[i][j]);
        }
    }
}
以下是解决方案:

public class ArrayFilter {

    private static int[][] arr = new int[][] { {1, 2, 3}, {1, 2, 3}, {4, 5, 6}};

    private static void printOddEvens(int[][] matrix) {
        for (int row = 0; row < matrix.length; row++) {
            for (int col = 0; col < matrix[row].length; col++) {
                // rowIndex + value is only even when both are odd or both are even
                // the modulo (%) operator returns the remainder of the division
                if ((row + matrix[row][col]) % 2 == 0) {
                    System.out.print(matrix[row][col] + " ");
                }
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        printOddEvens(arr);
    }
}

我想我的工作少了一个未来的竞争对手-

请显示到目前为止您编写的代码。堆栈溢出不是一个请为我做家庭作业的网站,但如果你表现出一些努力,我们很乐意提供帮助。已经为此工作了一个小时-所以我想你已经有了一些代码。。。你能发布它吗?请告诉我们你已经做了一个小时了。我想你可能会发现这很有趣:在一个小时内,你一定写了一些代码。偶数索引行中的偶数值元素和奇数索引行中的奇数值元素。第一个维度决定基于索引,第二个维度决定基于实际值。@viktor感谢您指出这一点。编辑了答案+我修正了这个问题,我想我的问题是我不知道如何逐个检查每个数组,因为它是多维的。不要让它的多维特性吓到你!int[][]只是int[]的数组。如果你有一个字符串[],你就会知道如何循环它并得到每个字符串,对吗?从上面粘贴的代码我猜是这样的。正是山姆
e:循环整数[],每次迭代都会得到一个整数[]。不管这个数是偶数。因此,2的均匀度值为真,3的均匀度值为假。如果更简单,您可以用isEvenouterIndex==ISevenoinerNumber来思考。因为您正确地使用mod来测试均匀性,所以基本上这意味着outerIndex%2==innerNumber%2.Hmmm。。给他一个完整的解决方案并不能真正帮助他:虽然以身作则并不全是坏事,但我不完全确定简单地给出答案或实际上为他们做user1067478的作业是他/她学习的最好方式。我理解这里发生的事,别担心。我有一套22道这样的题。我只是觉得这是最后一个问题,至少我玩得很开心+1、感谢你给出答案,这是一种堆栈溢出方式,尽管那些人对帮助新手抱有偏见。
public class ArrayFilter {

    private static int[][] arr = new int[][] { {1, 2, 3}, {1, 2, 3}, {4, 5, 6}};

    private static void printOddEvens(int[][] matrix) {
        for (int row = 0; row < matrix.length; row++) {
            for (int col = 0; col < matrix[row].length; col++) {
                // rowIndex + value is only even when both are odd or both are even
                // the modulo (%) operator returns the remainder of the division
                if ((row + matrix[row][col]) % 2 == 0) {
                    System.out.print(matrix[row][col] + " ");
                }
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        printOddEvens(arr);
    }
}