Java中的二维数组到一维数组

时间:2017-11-01 15:48:07

标签: java arrays

我有一个二维数组,我用扫描仪填充它。我想在不使用ArrayList的情况下将以字母'a'开头的元素复制到新的一维数组。请告知我可以做些什么来使这段代码正常运行。问题是如何知道新的数组大小,而我不知道有多少单词以字母a开头

这是我到目前为止所做的:

import java.util.Scanner;

class Untitled {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        String[][] name = new String[2][2];

        for (int i = 0; i < name.length; i++) {
            for (int j = 0; j < name[i].length; j++) {

                name[i][j] = input.next();

            }

        }
        student(name);

    }

    public static void student(String[][] arr) {
        int count = 0;
        int c2 = -1;
        String[] name2 = new String[count];
        String temp = "";

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

                if (arr[i][j].charAt(0) == 'a') {
                    c2++;
                    temp = arr[i][j];
                    name2[c2] = temp;
                    count++;
                    temp = "";
                }

            }//inner

        }//outer

        for (int i = 0; i < name2.length; i++) {
            System.out.println(name2[i]);
        }

    }

}

2 个答案:

答案 0 :(得分:1)

尺寸 [n] [n] 的二维阵列等于大小 n 的一维阵列。如果你想在适当的地方复制它们,那么你可以使用这个公式,如果你以后想要在适当的地方将这些元素复制回二维数组,这是很有用的:

int v = i * n + j; // i and j your loops and n is length of rows or colums.


array[v] = array[i][j];

代码中的代码就像:

int v = 0;

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

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

        if (arr[i][j].charAt(0) == 'a') {
             v = i * arra.length +j;
             name2[v] = arr[i][j]; 
                count++;

好的,这是一个有效的代码:

public static void main(String [] args) {
     Scanner input = new Scanner(System.in);
        String[][] name = new String[2][2];
        System.out.println("Enter the name: ");
        for (int i = 0; i < name.length; i++) {
            for (int j = 0; j < name[i].length; j++) {

                name[i][j] = input.next();

            }

        }
        student(name);
    }



public static void student(String[][] arr) {
        int count = 0;
        int v = 0;  
        String[] name2 = new String[arr.length*arr[0].length];
        String temp = "";

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

                if (arr[i][j].charAt(0) == 'a') {
                    v = i *+arr[0].length + j;
                    name2[v] = arr[i][j];
                    count++;
                }

            }//inner

        }//outer

        for (int i = 0; i < name2.length; i++) {
            System.out.println(name2[i]);
        }

        System.out.println("printing without nulls");
        //if you don't want null to be printed then do this:
        for (int i = 0; i < name2.length; i++) {
            if(name2[i] != null)
            System.out.println(name2[i]);
        }
    }

答案 1 :(得分:0)

我用两个嵌套的for循环1来表示数组大小,另一个用于将元素填充到数组中,它完成了工作,但有没有办法更好地做到这一点

public static void student(String[][] arr) {
    int size = 0;

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


            if (arr[i][j].charAt(0) == 'a') {
                size++;
            }

        }//inner

    }//outer
    String[] name2 = new String[size];


    int count = 0;

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


            if (arr[i][j].charAt(0) == 'a') {
                name2[count] = arr[i][j];
                count++;
            }

        }//inner

    }//outer

    for (int i = 0; i < name2.length; i++) {
        System.out.println(name2[i]);
    }