Scanner sc = new Scanner(System.in);
String[] text = {"school" , "teacher" , "child" ,"father" , "love"};
System.out.print("검색할 단어를 입력하세요 : ");
String word = sc.nextLine();
String search = "";
for (int i = 0 ; i < text.length; i++) {
boolean check = false;
int index = 0;
for (int j = 0; j < text[i].length(); j++) {
char chText = text[i].charAt(j);
char chWord = word.charAt(index);
if (chText == chWord) {
index++;
} else {
index = 0;
}
if (index == word.length()) {
check = true;
break;
}
}
if (check == true) {
search += text[i] + ",";
}
}
if (search.equals("")) {
System.out.println("검색 포함 단어 없음");
} else {
System.out.println( search.substring(0,search.length()-1) );
}
sc.close();
앞서 배열에서 했던 연속된 숫자 판별 응용문제
단어 교체하기(replace)
1. text변수 문장 속에서 변경하고 싶은 단어를 입력받아,
2. 교체해주는 기능을 구현한다.
예)
Life is too short.
변경하고 싶은 단어입력 : Life
바꿀 단어입력 : Time
Time is too short.
Scanner sc = new Scanner(System.in);
String text = "Life is too short.";
System.out.println(text);
System.out.print("변경하고 싶은 단어를 입력하세요 : ");
String word = sc.nextLine();
String front = "";
String end = "";
int size = text.length() - word.length()+1;
boolean check = false;
for (int i = 0; i < size; i++) {
int count = 0;
for (int j = 0; j < word.length(); j++) {
if (text.charAt(i + j) == word.charAt(j)) {
count++;
}
}
if (count == word.length()) {
front = text.substring(0,i);
end = text.substring(i + word.length());
check = true;
}
}
if (check == true) {
System.out.print("삽입할 단어 입력 : ");
String change = sc.next();
System.out.println(front + change + end);
} else {
System.out.println("해당 단어 없음 " + word);
}
입력한 문자열이 있는지 먼저 확인 해 준 후, 그 앞의 문자열(frontn)와 뒤쪽 문자열(back)을 구해 마지막에 합쳐주면 된다.
어려웠다. 하다가 접근법 자체를 틀려서 망하기도 했고 변수를 덜써보겠다고 진행하다가 입력한 문자가 삽입되어 나오는 등 애로사항이 많았다.
문자열 속 숫자검사
예) adklajsiod
문자만 있다.
예) 123123
숫자만 있다.
예) dasd12312asd
문자와 숫자가 섞여있다.
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
String text = "adklajsiod";
// String text = sc.next();
System.out.println(text);
boolean check = false;
int count = 0;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) <= '9' && text.charAt(i) >= '0') {
check = true;
System.out.println("i번째 : " + (i+1) + " / "+ (text.charAt(i)) );
count++;
}
}
if (check == true) {
System.out.println(text);
if (count == text.length()) {
System.out.println("숫자만 있다");
} else {
System.out.println("문자와 숫자가 섞여있다");
}
} else {
System.out.println(text);
System.out.println("문자만 있다");
}
바로 앞의 포스팅 대소문자 일치에서 숫자 판별할때는 for문으로 각 문자에 숫자가 있는지 각기 판별해줬다면 이러한 조건식으로 각 단어에 대한 숫자 확인 반복을 하지 않고 판별이 가능해진다.
타자연습 게임[2단계]
1. 문제를 섞는다.(shuffle)
2. 순서대로 문제를 출제하고, 문제를 다 맞추면 게임 종료
3. 단 문제를 출제할 때, 단어의 랜덤한 위치 한 곳만 로 출력
예)
문제 : mysl
입력 : mysql <--- 정답을 맞추면, 다음 문제 제시
문제 : *sp
입력 : jsp
...
Random rnd = new Random();
Scanner sc = new Scanner(System.in);
String[] words = {"java", "mysql", "jsp", "spring"};
for (int i = 0; i < 50; i++) {
int rNum1 = rnd.nextInt(4);
int rNum2 = rnd.nextInt(4);
String temp = words[rNum1];
words[rNum1] = words[rNum2];
words[rNum2] = temp;
}
System.out.println(Arrays.toString(words));
int count = 0;
boolean run = true;
String temp = null;
while (true) {
if (count == words.length) {
System.out.println("\n전체 정답. 클리어 \n종료");
break;
}
int size = words[count].length();
int rNum = rnd.nextInt(size);
while (run) {
String rChar = words[count].charAt(rNum) + "";
temp = words[count].replaceFirst(rChar, "*");
run = false;
}
System.out.printf("문제 : %s \n", temp);
System.out.print("입력 : ");
String answer = sc.next();
if (words[count].equals(answer)) {
System.out.println("정답");
run = true;
count++;
} else {
System.out.println("오답");
}
}
앞서 배열 문제에서 다 풀고 이해하고 넘어왔다면 크게 어려움이 없을 문제 각 순서에 따라 한글자씩 가려주고 정답 수와 words배열의 크기가 같아질때까지 진행하면 된다.
영어단어가 전부 * 로 표시된다.
영어단어를 입력받고 틀릴때마다 랜덤으로 한글자씩 벗겨진다. (점수는 5점씩 감점)
(조건) 만약에 같은 철자가 여러개면 한번에 벗겨진다.
전부 벗겨지거나 맞추면 종료
Scanner sc = new Scanner(System.in);
Random rnd = new Random();
String word = "performance";
String meaning = "공연";
int size = word.length();
int score = 100;
int check[] = new int[size]; // 힌트 - 체크를 통해서 확인할수있다.
System.out.println(Arrays.toString(check));
int count = 0;
String answer ="";
while (true) {
if (score != 100) {
int rNum = 0; // 중복검사
while (true) {
rNum = rnd.nextInt(size);
if (check[rNum] == 0) {
break;
} else {
continue;
}
}
char rChar = word.charAt(rNum);
for (int i = 0; i < size; i++) {
if ((int)rChar == (int)word.charAt(i)) {
check[i] = (int)rChar;
count++;
}
}
}
if (count >= size) {
System.out.println("* 전부 오픈");
System.out.println("정답은 " + word);
break;
}
System.out.println("뜻 : " + meaning);
System.out.print("문제 : ");
for (int i = 0; i < size; i++) {
if (score != 100) {
if (check[i] == (int)word.charAt(i)) {
System.out.print(word.charAt(i));
} else {
System.out.print("*");
}
} else {
System.out.print("*");
}
}
System.out.println();
System.out.print("답 : ");
answer = sc.next();
if (word.equals(answer)) {
System.out.println("정답");
System.out.println("점수 : " + score);
break;
} else {
System.out.println("오답\n");
score -= 5;
}
}
문제는 이해했으나 주어진 힌트에서 방향성을 잘못잡아 약간 애로사항이 꽃필듯 말듯 했던 문제.
check배열에 인덱스를 넣어주면 됐었는데 parseInt로 글자 아스키코드 값을 넣어줬다. 결국적으로 그것도 0이 아니니 맞긴 했다.
Scanner sc = new Scanner(System.in);
String[] idList = {"qwer", "javaking", "abcd"};
String[] pwdList = {"1111", "2222", "3333"};
int MAX_SIZE = 100;
String[][] cartList = new String[MAX_SIZE][2];
int count = 0;
String[] items = {"사과", "바나나", "딸기"};
String log = "";
int index = -1;
while(true) {
boolean check = false;
System.out.println("[MEGA MART]");
if (log.isEmpty()) {
System.out.println("[1]로 그 인");
} else {
System.out.println(log+"회원 로그인 중");
System.out.println("[2]로그아웃");
System.out.println("[3]쇼 핑");
System.out.println("[4]장바구니");
}
System.out.println("[0]종 료");
System.out.print("메뉴 선택 : ");
int select = sc.nextInt();
if(select == 1) {
if (log.isEmpty()) {
System.out.print("아이디 입력 : ");
String id = sc.next();
for (int i = 0; i < idList.length; i++) {
if (id.equals(idList[i])) {
System.out.print("비밀번호 입력 : ");
String pwd = sc.next();
if (pwd.equals(pwdList[i])) {
System.out.println("로그인 성공\n");
log = idList[i];
index = i;
check = true;
break;
} else {
System.out.println("비밀번호 오류\n");
break;
}
}
}
} else {
System.out.println("로그아웃 후 이용 가능\n");
}
if (log.isEmpty()) {
System.out.println("아이디 또는 비밀번호 확인\n");
}
}
else if(select == 2) {
if (!log.isEmpty()) {
log = "";
index = -1;
System.out.println("로그아웃 성공\n");
} else {
System.out.println("로그인 후 이용가능\n");
}
}
else if(select == 3) {
System.out.println(Arrays.toString(items));
System.out.print("구매할 과일 입력 : ");
String item = sc.next();
for (int i = 0; i < items.length; i++) {
if (item.equals(items[i])) {
System.out.println("구매성공\n");
cartList[count][0] = log;
cartList[count][1] = items[i];
count++;
check = true;
break;
}
}
if (check == false) {
System.out.println("해당 과일 없음\n");
}
}
else if(select == 4) {
System.out.println(log + "==>");
for (int i = 0; i < cartList.length; i++) {
if (log.equals(cartList[i][0])) {
System.out.print(cartList[i][1] + " ");
}
if (cartList[i][0] == null) {
break;
}
}
}
else if(select == 0) {
System.out.println("프로그램 종료");
break;
}
}
배열에서 회원가입 문제를 스스로 해냈다면 크게 어려울 것이 없는 문제