32-java - 문자열 문제들

jin·2022년 7월 30일
0

1. 끝말잇기 게임

끝말잇기 게임을 만들어보세요.

제시어 : 자전거
입력 : 거미
제시어 : 거미
입력 : 미술
...ect

Scanner sc = new Scanner(System.in);
String start = "자전거";

while (true) {
	System.out.println("제시어 : " + start + "종료 : exit");
	System.out.print("입력 : ");
	String input = sc.next();
	if (input.equals("exit")) {
		System.out.println("끝내기 ");
		break;
	}
	int startLastWord = start.charAt(start.length()-1);
	int inputFirstWord = input.charAt(0);
	if ( startLastWord == inputFirstWord) {
		System.out.println("정답\n");
		start = input;
	} else {
		System.out.println("오답 다시");
	}
}

charAt() 메서드로 제시어 끝문자와 입력단어 시작문자의 아스키코드 값을 구해 비교하면 되는 문제

2. 문자열 비교

. equals() 메서드 사용없이 equals 직접구현 문자의 일치여부 비교
예)
코끼리
입력 = 티라노사우루스
출력 = false

Scanner sc = new Scanner(System.in);

String name = "코끼리";

System.out.println("동물이름 입력");
String animal = sc.next();

boolean check = false;

if (name.length() == animal.length()) {
	check = true;
}

if (check == true) {
	for (int i = 0; i < name.length(); i++) {
		if (name.charAt(i) != animal.charAt(i)) {
			check = false;
			break;
		}
	}
	
} else {
	System.out.println("글자수 다름");
}

System.out.println(check);

제시 단어와 입력 단어 길이를 비교해 준 후 길이가 같으면 각 문자들 아스키 코드 값이 같은지 비교

3. 대소문자 일치

아이디와 비밀번호 입력받고 로그인출력
조건) 단, 아이디와 비밀번호는
1) 대문자로 입력하던 ,
2) 소문자로 입력하던 ,
3) 섞어서 입력하던 전부 인식되어야한다.

Scanner sc = new Scanner(System.in);

String dbId = "q1w2e3r4";
String dbPwd = "r4e3w2q1";

String str0 = "0123456789";
String str1 = "abcdefghijklmnopqrstuvwxyz";
String str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

//		System.out.print("아이디 입력 : ");
//		String id = sc.next();
//		System.out.print("비밀번호 입력 : ");
//		String pwd = sc.next();
String id = "Q1w2E3r4";
boolean check = false;
if (dbId.length() != id.length()) { // 길이가 다를 경우
	check = true;
} else {
	
	for (int i = 0; i < dbId.length(); i++) {
		char dbC = dbId.charAt(i);
		char idC = id.charAt(i);
		
		if (dbC != idC) { // 같지 않으면 검사(같을경우 굳이 검사할 필요 없음
			//숫자가 틀린지 검사 ==> 영어자리에 숫자 있으면 true걸림
			for (int j = 0; j < str0.length(); j++) {
				if (dbC==str0.charAt(j) || idC==str0.charAt(j)) {
					check = true;
					System.out.println("숫자 :"+dbC + " " + idC);
					break;
				}
			}
			//글자이면 대소문자 검사 ==> 같지 않으면 불일치
			for (int j = 0; j < str1.length(); j++) {
				if (str1.charAt(j) == dbC) {
					if (str2.charAt(j) != idC) {
						check = true;
						System.out.println(dbC + " " + idC);
						break;
					}
				} else if (str2.charAt(j) == dbC) {
					if (str1.charAt(j) != idC) {
						check = true;
						System.out.println(dbC + " " + idC);
						break;
					}
				}
			}
			
		}
		
	}
}
if (check == false) {
	System.out.println("일치");
} else {
	System.out.println("불일치");
}


//		if (dbId.equalsIgnoreCase(id) && dbPwd.equalsIgnoreCase(pwd)) {
//			System.out.println("로그인 성공");
//		} else {
//			System.out.println("로그인 실패");
//		}
	sc.close();
}

주석처리한 부분은 왠지 String 메소드 중에 대소문자 상관없이 일치함을 판별해주는 메소드가 있지 않을까 싶어 구글링해봤고 equalsIgnoreCase() 메소드를 사용하면 대소문자 상관없이 판별해준다해서 사용하여 답을 내놨다.
당연히 반려당했다.
날로 먹을 수 있는건 생선이나 소 뿐인 것 같다.

chartAt() 메서드로 각 단어가 같지 않을때 들어오면 숫자가 같으면 해당사항에 없게 된다.
단어들이 일치하지 않을때, 회전수를 줄이기 위해 숫자가 있으면 불일치이니 숫자가 위치하고 있는지 먼저 판별을 해준다. 그 후 대소문자를 검사해주면 된다.

4. 타자연습 게임

  1. 문제를 섞는다.(shuffle)
  2. 순서대로 문제를 출제하고, 문제를 다 맞추면 게임 종료
    예)
    문제 : mysql
    입력 : mydb
    문제 : mysql
    입력 : mysql <--- 정답을 맞추면, 다음 문제 제시
    문제 : jsp
Random rnd = new Random();
Scanner sc = new Scanner(System.in);
String[] words = {"java", "mysql", "jsp", "spring"};

for (int i = 0; i < 100; i++) {
	int rNum1 = rnd.nextInt(words.length);
	int rNum2 = rnd.nextInt(words.length);
	String temp = words[rNum1];
	words[rNum1] = words[rNum2];
	words[rNum2] = temp;
}
System.out.println(Arrays.toString(words));
int index = 0;

while (true) {
	if (index == words.length) { 
		System.out.println("클리어 \n게임 종료");
		break; 
	}
	System.out.println("문제 : " + words[index]);
	System.out.print("입력 : ");
	String str = sc.next();
	if (words[index].equals(str)) {
		System.out.println("정답");
		index++;
	} else {
		System.out.println("오답");
	}
}

System.out.println();
for (String str : words) { // words의 값을 차례대로 가져와서 str에 넣어라
	System.out.println(str);
}
sc.close();

앞에서 이해를 다 하고 넘어왔다면 크게 어려움은 없을 문제

0개의 댓글