2016-12-01 3 views
1

, когда искомое значение существует в массиве, я выбираю столбец и сохраняю его. , напримерКак получить конкретный столбец в 2D-массиве с помощью java

1 2 3 4 5 6 
A B C D E F 
G H I J K L 

Я хочу сделать столбец, включая x==1||x==4 ниже колонки будет результатом того, что я хочу

1 4 
A D 
G J 

ниже кода мой код 2D массив. Я делаю 1D-массив из csv-файла и 2D-массива. при поиске значение существует, я выбираю столбец и сохраняю его.

String str = readCSV(new File("D:/sample_folder/sample1.csv")); 
    String[] strArr = parse(str); // It comes out in a row in an String array. 
    int varNumber = 45; 
    int rowNumber = strArr.length/varNumber; 

    String[][] Array2D = new String[varNumber][rowNumber]; 

    for(int j=0;j<varNumber;j++) 
    { 
     for(int i=0; i<rowNumber;i++) 
      { 
       String k = strArr[i*varNumber+j]; 
         Array2D[j][i]= k; 
     } 
    }      //make 2D array   
+0

Вы пытались подойти к решению проблемы на твой собственный? Если так вставьте свой код здесь :) Если не попробовать себя и задать более конкретный вопрос, когда ошибки и исследования не помогут. – geisterfurz007

+0

Каков формат вашего csv? Было бы интересно повернуть ваш массив. Таким образом, вы сможете получить столбец, скопировав Array2d [i] в ​​одну строку. Пожалуйста, дайте пример для запуска этого – AxelH

ответ

1

Вы можете через строки 2D-массива выбрать нужный столбец.

for(int j=0;j<rowNumber;j++) 
{ 
    // index starts from 0 
    yourArray[j][0] = array2D[j][0]; 
    yourArray[j][1] = array2D[j][3]; 
} 

Или динамичнее вы могли бы написать:

int[] columnsYouWant = {0, 3}; 
for(int j=0;j<rowNumber;j++) 
{ 
    for(int c=0;c<columnsYouWant.length;c++) 
    { 
     yourArray[j][c] = array2D[j][columnsYouWant[c]]; 
    } 
} 

Если вы хотите использовать, если (х == 1 || х == 4):

for(int j=0;j<rowNumber;j++) 
{ 
    column = 0; 
    for(int c=0;c<columnNumber;c++) 
    { 
     x = c + 1; 
     if (x == 1 || x == 4) 
     yourArray[j][column++] = array2D[j][c]; 
    } 
} 

я мог бы получить это неправильно. Также кажется, что вы можете захотеть иметь столбцы, начинающиеся с 1 или 4. В этом случае, если ваша первая строка имеет номера и остальные по алфавиту. Вы должны найти столбец, начиная с 1 или 4.

for(int j=0;j<colNumber;j++) 
{ 
    x = array2d[0][j]; 
    if (x == 1 || x == 4) { 
     // add you j to an array 
    } 
} 

В случае, если вы будете знать, какие столбцы вы хотите, и вы можете использовать второй кусок кода в моем ответе, чтобы создать 2D массив с колонками, которые вы хотите ,

+0

Я хочу использовать 'if (x == 1 || x == 4)' – kimHS

0

Попробуйте это моделирование, я заполнить это в 2DArray:

1 2 3 4 5 6 
A B C D E F 
G H I J K L 

после этого, я сделал код для печати только столбцы 1 и 4.

public static void main(String[] args) { 
    String[][] twoDArray = populateArray(); 
    int x = 0; 
    for (int i = 0; i < twoDArray.length; i++) { 
     for (int j = 0; j < twoDArray[0].length; j++) { 
      x = j + 1; 
      if(x == 1 || x == 4) { 
       System.out.print(twoDArray[i][j]); 
      } 
     } 
     System.out.println(); 
    } 

} 

public static String[][] populateArray() { 
    String[][] twoDArray = new String[3][6]; 
    for (int i = 0; i < twoDArray[0].length; i++) { 
     twoDArray[0][i] = (i + 1) + ""; 
    } 
    char alphaChar = 'A'; 
    for (int i = 1; i < twoDArray.length; i++) { 
     for (int j = 0; j < twoDArray[0].length; j++) { 
      twoDArray[i][j] = String.valueOf(alphaChar); 
      alphaChar++; 
     } 
    } 
    return twoDArray; 
} 

выход код:

14 
AD 
GJ 

если вы Закомментируйте if(x == 1 || x == 4) {, что я использовал, он будет печатать, как это:

123456 
ABCDEF 
GHIJKL 
Смежные вопросы