예시로 든 multiArray[0], multiArray[1], multiArray[3]은 int[4]의 자료형을 갖는다.
그렇기 때문에 일반적인 배열 탐색법으로 탐색할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
for (int i = 0; i < multiArray[0].length; i++) { multiarray[0][i] = 1 + i; }
for (int i = 0; i < multiArray[1].length; i++) { multiarray[1][i] = 5 + i; }
for (int i = 0; i < multiArray[2].length; i++) { multiarray[2][i] = 9 + i; }
중첩 반복문
중첩 반복문을 사용하면 보다 깔끔하게 사용할 수 있다.
여기서 multiArray[i][j].length는 전체 자리 수(12)가 아닌 행(줄)의 수(3)이다.
1 2 3 4 5
for (int i = 0; i < multiArray.length; i++) { for (int j = 0; j < multiArray[i].length; j++) { multiArray[i][j] = (i * 4 + 1) + j; } }
연습문제
배열연습
(1) 크기가 30인 정수형 배열 intArray를 만들어 주세요. (2) 배열의 첫 번째(0번 인덱스) 칸부터 1001, 1002, 1003, …, 1029, 1030을 순서대로 넣어주세요. (3) 크기가 4인 문자열형 배열 remainders를 만들어 “Zero”, “One”, “Two”, “Three”를 순서대로 넣어주세요. (4) intArray 배열에 담긴 각 값을 4로 나눈 나머지를 인덱스로 생각하고, remainders 배열에서 그 인덱스에 위치한 단어를 출력해주세요. 이 때 반드시 ‘배열 정리’ 노트에 있는, for- each문을 활용해주세요!!
publicclassMain{ publicstaticvoidmain(String[] args){ String dna = "GATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCA" + "CCACGCCCGGCTAATTTTTATTTATTTATTTAAAGACAGAGTCTCACTCT" + "GTCACTCAGGCTAGAGTGCAGTGGCACCATCTCAGCTCACTGCAGCCTTG" + "ACCTCCCTGGGCTCCGGTGATTTCACCCTCCCAAGTAGCTAGGACTACAG" + "GCACATGCCACGACACCCAGCTAATTTTTTATTTTCTGTGAAGTCAAGGT" + "CTTGCTACGTTGCCCATGCTGGTATCAAACCCCTGGGCTCAATCAATCCT" + "TCCACCTCAGCCTCCCCAAGTATTGGGGTTACAGGCATGAGCTACCACAC" + "TCAGCCCTAGCCTACTTGAAACGTGTTCAGAGCATTTAAGTTACCCTACA" + "GTTGGGCAAAGTCATCTAACACAAAGCCCTTTTTATAGTAATAAAATGTT" + "GTATATCTCATGTGATTTATTGAATATTGTTACTGAAAGTGAGAAACAGC" + "ATGGTTGCATGAAAGGAGGCACAGTCGAGCCAGGCACAGCCTGGGCGCAG" + "AGCGAGACTCAAAAAAAGAAAAGGCCAGGCGCACTGGCTCACGCCTGTAA" + "TCCCAGCATTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCAGGAGT" + "TCAAGACCAGCCTAGCCAACATGGTGAAACCCCGTCTCTACTAAAATACA" + "AAAATTAACCGGGCGTGATGGCAGGTGCCTGTAATCCCAGCTACTTGGGA" + "GGCTGAGGCAGGAGAATCGCTTGAACCAGGAGGCGGAGGTTGCAGGGAGC" + "CAAGATGGCGCCACTGCACTCCAGCCTGGGCGATAGAGTGAGACTCCGTC" + "TCAGAAAAAAAAGAAAAGAAACGAGGCACAGTCGCATGCACATGTAGTCC" + "CAGTTACTTGAGAGGCTAAGGCAGGAGGATCTCTTGAGCCCAAGAGTTTG" + "AGTCCAGCCTGAACAACATAGCAAGACATCATCTCTAAAATTTAAAAAAG" + "GGCCGGGCACAGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGTGGA" + "GGTGGGTAGATCACCTGACGTCAGGAGTTGGAAACCAGCCTGGCTAACAT"; char[] charArray = dna.toCharArray(); // AGG, CCAG, AGCC가 각각 몇 개씩 있는지 담을 변수가 필요 int TAGG = 0; int CCAG = 0; int AGCC = 0; // 검사할 문자 4개를 담을 4칸짜리 문자 배열(char[])을 선언 char[] current = newchar[4]; // charArray를 탐색할 for문 for (int i = 0; i < charArray.length - 3; i++) { // 반복문 내에 또 반복문을 만들어 검사해야 할 문자열 4개를 순서대로 채워 넣음 for (int k = 0; k < current.length; k++) { current[k] = charArray[i + k]; } // char[]을 String으로 변환 String seq = new String(current); // 염기서열 세기 switch (seq) { case"TAGG": TAGG++; break; case"CCAG": CCAG++; break; case"AGCC": AGCC++; break; } } System.out.println("TAGG: " + TAGG); System.out.println("CCAG: " + CCAG); System.out.println("AGCC: " + AGCC); } }
charArray를 탐색할 for문
int i = 0에서 시작
i < charArray.length - 3까지만 탐색
문자열의 첫 줄(“GATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCA”)을 “GATC”(인덱스 0 ~ 3) / “ATCC”(인덱스 1 ~ 4) / “TCCG”(2 ~ 5) / “CCGC”(3 ~ 6), … 이런 식으로 확인한다. 그러다가 맨 마지막 줄(“GGTGGGTAGATCACCTGACGTCAGGAGTTGGAAACCAGCCTGGCTAACAT”)에서 “ACAT”까지만 확인 필요하다. “ACAT”은 인덱스 length - 4부터 length - 1까지이기 때문에 종결식을 i < charArray.length - 3으로 잡아야 한다.
검사할 문자 4개를 담을 4칸짜리 문자 배열(char[])을 선언 for문 안에서 배열을 선언하는 이유는 반복문을 벗어나면 더 이상 사용할 일이 없기 때문이다. 하지만 배열을 새로 만드는 작업 비용이 클 수 있기 때문에 여러번 반복하여 만들지 않고 for문 밖에서 한 번 만들어 재사용하는 것이 나을 수 있다.