-
배열 마무리 / 명령행인수프로그래밍/JAVA 자바 2021. 7. 13.반응형
package ex0712; public class Ex20_Q5 { public static void main(String[] args) { /* 대각선으로 채우기 1 2 4 7 11 3 5 8 12 16 6 9 13 17 20 10 14 18 21 23 15 19 22 24 25 */ int arr[][]=new int[5][5]; int n, k; n=0; for(int i=0; i<=8; i++) { for(int j=0; j<=4; j++) { //j는 행 k=i-j; if(k<0) continue; if(k>4) continue; n++; arr[j][k]=n; } } for(int i=0; i<arr.length; i++) { for(int j=0; j<arr[i].length; j++) { System.out.printf("%3d", arr[i][j]); } System.out.println(); } } }
package ex0712; public class Ex21_Q6 { public static void main(String[] args) { /* A~Z까지 임의의 문자를 난수를 이용하여 발생하고 발생된 문자를 4*4 배열에 0행 0열부터 대입하여 출력하는 프로그램 작성. 단, 중복문자는 배제하여 대입한다. */ char ch[][] = new char[4][4]; for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch[i].length; j++) { // ch[i][j]=(char)((Math.random()*26)+'A'); ch[i][j] = (char) ((Math.random() * 26) + 65); gogo: for (int a = 0; a <= i; a++) { for (int b = 0; b < ch[a].length; b++) { if (a == i && b >= j) //이 문자가 나올 자리 앞 까지 모두 비교 그러나 뒷자리는 없기 때문에 비교할 필요가없음 break gogo; if (ch[a][b] == ch[i][j]) { // 중복적인 것이 존재하는 경우 j--; break gogo; } } } } } for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch[i].length; j++) { System.out.print(ch[i][j] + "\t"); } System.out.println(); } } }
package ex0712; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub char [][] a = new char[4][4]; for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { a[i][j] = (char)((Math.random()*26)+65); A: for(int x=0; x<=i; x++) { for(int z=0; z<a[i].length; z++) { if(x==i && z>=j) { break A; } if(a[i][j] == a[x][z]) { j--; break A; } } } } } for(int i=0; i<a.length; i++) { for(int j=0; j<a[i].length; j++) { System.out.printf("%3c",a[i][j]); } System.out.println(); } } }
위 2개 코드는 똑같은 소스이다 변수만 다를뿐
라벨 A 부분이 중요하다.
이중 for문으로 다시 배열을 돌면서 확인을 하는것이다.
첫번째 if문에서 불필요하게 열과 행을 전체를 다 안돌도록
위에서 완성된 a[i][j] 까지만 돌게 하는것이다.
그리고 나서 2번째 if로 넘어가는데 여기서 중복 값 유무를 체크한다.
만약 중복된 값이 있다면 j를 1개 줄여줘야 한다.
명령행인수
main 함수는 하나의 인수를 가지며 인수는 외부에서 특정 값을 main함수로 전달 받을 목적으로 사용되는 것으로 이때 사용되는 인수를 명령 행 인수(Command Line Argument)라 함
정의 설명이 뭔가 어렵다.
다른 글을 찾아보면
명령행인수 = 콘솔창에서 프로그램을 실행시킬때 프로그램에 인수 값을 인가하는 것
명령행인수를 처리하기 위해서는 프로그램에서 main 함수에 매개변수를 정의해야한다
참고로 패키지가 있으면 콘솔창에서는 작동안함.
package ex0713; public class ArgEx { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("명령행인수 예제..."); /* for(String s: args) { System.out.println(s); } */ for(int i=0; i<args.length; i++) { System.out.println(args[i]); } } }
배열 복사
package ex0713; public class Ex02_array { public static void main(String[] args) { // 배열 복사 int []a = new int[] {10,20,30}; int []b = new int[a.length]; System.arraycopy(a, 0, b, 0, a.length); //a배열의 값을 b배열에 복사 System.out.println("a 배열"); for(int n:a) { System.out.print(n + " "); } System.out.println(); System.out.println("b 배열"); for(int n:b) { System.out.print(n + " "); } System.out.println(); } }
System.arraycopy(arr1, 0, arr2, 1, 10); <<
arr1배열의 0위치부터의 끝까지를 arr2의 1위치에 10개의 데이터를 복사한다.
2차원 배열 복사
package ex0713; public class Ex03_array { public static void main(String[] args) { // 2차원 배열 복사 int[][]a = {{10,20,30},{100,200,300}}; int[][]b = new int[a.length][a[0].length]; /* 2개 복사 주소가 복사 System.arraycopy(a, 0, b, 0, a.length); b[1][1] = 70; System.out.println(a[1][1] + " : " + b[1][1]); */ //2차원 배열에 값을 복사 for(int i=0; i<a.length; i++) { System.arraycopy(a, 0, b, 0, a.length); } b[1][1] = 70; System.out.println(a[1][1] + " : " + b[1][1]); } }
마방진 만들기
package ex0712; import java.util.Scanner; public class Ex22_Q8 { public static void main(String[] args) { /* 홀수를 입력 받아 마방진을 완성하는 프로그램 입력받은 수가 만약 짝수가 입력되거나 15을 초과하면 다시 입력 받는다. */ Scanner sc = new Scanner(System.in); int arr[][]; int n; int row, col; do { System.out.print("홀수 ? "); n = sc.nextInt(); } while (n % 2 == 0 || n > 15 || n < 1); arr=new int[n][n]; row = 0; //행 col = n / 2; //1을 넣기 위해 가운데 자리 구하기 열 for (int i = 1; i <= n * n; i++) { arr[row][col] = i; //숫자 1 넣었음 if(i%n==0) { //배수 규칙을 찾았을때 행만 하나 증가 시키면 된다. row++; } else { //그렇지 않으면 row--; col++; } if(row<0) row=n-1; //행이 음수면 밑으로 제일 내려라 if(col>=n) col=0; //열이 벗어났으면 } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.printf("%5d", arr[i][j]); } System.out.println(); } sc.close(); } }
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
메소드 정리, 재귀호출 (0) 2021.07.15 객체지향, 클래스, 메소드, 인스턴스 기초 (0) 2021.07.14 배열, 2차원 배열, 여러가지 정렬 방법 (0) 2021.07.13 break문 / continue문 / 배열 (0) 2021.07.11 do-while문 / for문 / 별찍기 / 가위바위보 (0) 2021.07.09