프로그래밍/JAVA 자바
배열 마무리 / 명령행인수
Heidong
2021. 7. 13. 23:31
반응형
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();
}
}
반응형