티스토리 뷰
1. 좌표에 X표시
package practice01;
import java.util.*;
public class practice {
public static void main(String[] args) {
final int SIZE=10;
int x= 0;
int y=0;
char[][] board=new char[SIZE][SIZE];
byte[][] shipboard= {
{0,0,0,0,0,0,1,0,0}, //0
{0,0,1,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1},
{0,0,0,1,0,0,0,0,0}, ㅎ
{0,0,0,0,0,0,1,1,1},
{0,1,1,1,0,0,0,0,0},
{1,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,1,0,1},
{1,0,0,0,0,0,0,0,0}
}; //배의 위치
Scanner scanner=new Scanner(System.in);
for(int i=1; i<SIZE; i++) {
board[i][0]=board[0][i]=(char)(i+'0'); //1차원배열로 바로 출력할 수 있도록 저장
}
while(true) {
System.out.printf("좌표를 입력하세요. (종료는 00)>");
String input1=scanner.nextLine();
if(input1.length()>=3) {
System.out.println("잘못된 입력입니다. 다시입력해 주세요.");
continue;
}
x=input1.charAt(0)-'0';
y=input1.charAt(1)-'0';
if(x==0 && y==0) break;
if(shipboard[x-1][y-1]==1)
board[x][y]='O';
else board[x][y]='X';
for(int i=0; i<SIZE; i++) {
System.out.println(board[i]); //1차원배열로 바로바로 출력 char 배열이기때문에 가능!
}
}
}
}
char 배열의 경우 println(1차원배열) 로 간단하게 1차원배열의 내용을 모두 한줄에 담을 수 있다 . 고로 2차원배열을 출력할 때에도 2중 for문을 사용하지 않아도 된다!
2. 빙고
package practice01;
import java.util.*;
public class practice {
public static void main(String[] args) {
int[][] bingo=new int[5][5];
int num=1;
for(int i=0; i<5 ;i++) { //1부터 25까지 순서대로 저장
for(int j=0; j<5 ; j++)
bingo[i][j]=num++;
}
int n1;
int n2;
int tmp;
for(int i=0; i<100; i++) {
n1=(int)(Math.random()*5);
n2=(int)(Math.random()*5);
tmp=bingo[0][0];
bingo[0][0]=bingo[n1][n2];
bingo[n1][n2]=tmp;
} //배열 shuffle
for(int i=0; i<5 ; i++) { //빙고판 출력
for(int j=0; j<5 ;j++)
System.out.printf("%2d " , bingo[i][j]);
System.out.println();
}
Scanner scanner=new Scanner(System.in);
while(true) {
System.out.printf("1~25의 숫자를 입력하세요 (종료:0)> ");
String str=scanner.nextLine();
int input = Integer.parseInt(str);
if(input==0) break; //0==종료
if(input<1 || input>25) { //out of range
System.out.printf("잘못입력하셨습니다. 다시입력해주세요");
continue;
}
boolean done1=false; //행 값 빙고 여부
boolean done2 =false; //열 값 빙고 여부
for(int i=0; i<5; i++) { //행값은 입력된 값 0으로 만들어주면서 빙고여부도 판단
for(int j=0; j<5; j++) {
if(bingo[i][j]==input)
bingo[i][j]=0;
if(bingo[i][j]==0)
done2=true;
else
done2=false;
}
if(done2==true) break; //1빙고 되었으면 for문 탈출
}
if(done2==true) { //빙고 while문 탈출 끝
System.out.println("BIGNO!!");
break;
}
for(int j=0; j<5; j++) {//열값 빙고 확인
for(int k=0; k<5; k++) {
if (bingo[k][j]==0) done1=true;
else done1=false;
}
if(done1==true) break; //1열 빙고 -> for문 탈출
}
if(done1==true) { //열값 빙고-> while문 탈출 종료
System.out.println("BINGO!!");
break;
}
}
for(int i=0; i<5 ; i++) { //마지막 빙고판 출력
for(int j=0; j<5 ;j++)
System.out.printf("%2d " , bingo[i][j]);
System.out.println();
}
}
}
기존 코드에서 변경사항: 행이나 열 1빙고 시 탈출!
더 응용해서 3빙고까지 count해서 3빙고되면 나오게 만들 수도 있다.
3.행렬 곱
package practice01;
//import java.util.*;
public class practice {
public static void main(String[] args) {
int[][] m1= {
{1,2,3},
{4,5,6} };
int[][] m2= {
{1,2},
{3,4},
{5,6} };
final int ROW=m1.length;
final int COL=m2[0].length;
final int M2_ROW=m2.length;
int [][] m3= new int[ROW][COL];
for(int i=0; i< ROW; i++) { //2
for(int j=0; j<COL; j++) { //2
for(int k=0; k<M2_ROW; k++) { //3
m3[i][j]+=m1[i][k]*m2[k][j];
}
}
}
for(int i=0; i<m3.length;i++) {
for(int j=0; j<m3[i].length;j++)
System.out.printf("%2d ", m3[i][j]);
System.out.println();
}
}
}
** 행렬곱에서 나타나는 쉬운 오류는, 각 행렬의 행과 열의 길이를 리터럴 상수로 표시하는 것이다. 하지만 리터럴 상수로 나타낼 경우에는 행,렬의 길이가 달라질 경우 코드를 다 뜯어고쳐야한다는 불편함이 있기때문에, length 메서드를 통해서 각 배열의 길이를 나타내고, 그 길이를 final 상수로 저장해주면 간단하다! 사실 그냥 배열 생성할때 final 함수 빼고 length 메서드로 해줘도 되긴하는데 fianl 상수를 쓰는게 훨씬 직관적이다.
4.단어 퀴즈
package practice01;
import java.util.*;
public class practice {
public static void main(String[] args) {
String[][] Quiz= {
{"computer", "컴퓨터"},
{"chair", "의자"},
{"integer","정수"}
}; // string 3*2 two dimensional array
Scanner scanner= new Scanner(System.in);
for(int i=0; i< Quiz.length; i++) {
System.out.printf("Q%d. %s의 뜻은? ", i+1, Quiz[i][0]);
String answer=scanner.nextLine();
if(answer.equals(Quiz[i][1])) {
System.out.println("정답입니다.");
}
else {
System.out.println("틀렸습니다. 정답은"+Quiz[i][1]+"입니다");
}
}
}
}
1. 스트링을 2차원 배열로 선언한다.
2. 2차원 배열의 한 행마다 "문제" "답"을 페어로 저장해준다.
** 스트링역시 2차원으로 쓸 수있다는 것을 잊지말기!
'programming language > Java' 카테고리의 다른 글
[자바] 형식화 포맷 - Decimal Format과 Simple Date Format (0) | 2020.04.06 |
---|---|
[자바] StringBuffer클래스 (0) | 2020.04.04 |
[자바] String 클래스 (0) | 2020.04.04 |
[자바] Object 클래스의 메서드 (0) | 2020.04.04 |
자바 string class method 정리 (0) | 2020.02.11 |
댓글