안녕하세여 ㅎ 다름이 아니라 제가 지금 개 골썩고 있는 문제가 있는데 좀 도와주십사... 모셨슴미다^^
(문제) ctrl-z가 입력될 때까지 키보드로부터 문자열을 읽고 (띄어쓰기가 있는 문장도 허용하기 위해 입력 받을 때
Scanner.nextLine()을 사용) 사용자가 입력한 문자열에서 제일 긴 단어를 출력하는 프로그램을 작성하라. 단어는 공백으로 분리한다.
클래스 이름은 LongCountWord
인데여 쌉빡고수님들
보시면 아시겠지만 Input리더(영어 철자 기억이 안남) 어쩌구는 사용이 안되더라구여 심지어 교수님이
** 반복문과 StringTokenizer클래스를 이용하여 'ctrz-z'가 입력 될 때까지 계속 문자열을 입력받도록 한다.
** 'ctrl-z'를 누르면 다음과 같은 출력 메시지가 뜨도록 하시오: "가장 긴 단어는 ????? 이다.
라는 추가 조건을 내걸었슴미다. 그리고 try-catch 를 사용하고 Exception 타입은 NoSuchElementException 로 정하셨습니다.
제가 앉아서 손가락만 빨진 않았고 어느 정도 하기는 했거든여
그런데 ㅋㅋ 쓸모없음ㅋㅋ ㅎㅎㅈㅅ;;!!
제 문제점
1. 빡머갈임
2. 클래스 두 개(LongCountWord 랑 StringTokenizer)로 나뉘어야 하는 것 같은데 어느 클래스에 뭐시기가 들어가야 되는지도 모르겠고 나누지도 못함
3. 일단 LongCountWord 에 싸잡아 넣었는데 입력받고 ctrl+z 해도 가장 긴 단어는 null 이다. 라고 나옴
밑에는 제코드입니다 세상최초존잘 행님덜
=================
import java.util.*;
import java.io.*;
public class LongWordCount {
public static void main (String[] args) throws NoSuchElementException {
Scanner scner = new Scanner(System.in);
String munza;
String longest = null;
System.out.print("문자열을 입력하시오>>");
try {
while(true) {
munza = scner.nextLine();
StringTokenizer st = new StringTokenizer(munza);
int gulza = st.countTokens();
longest = st.nextToken();
for (int i=0; i<gulza; i++) {
String token = st.nextToken();
if (token.length() > longest.length())
longest = token;
}
}
}
catch (NoSuchElementException e) { // ctrl-z 입력 시 발생하는 예외
System.out.println("\n가장 긴 단어는 " + longest + "이다."); // 누적 단어 갯수 출력
}
}
}
longest를 static으로 바꿔보심이 어떤가영 그리궁 stringTokenizer는 맨마지막 혹은 catch문에 넣어서 읽어보심이 어떠십니깡
코드에 따르면 문자로 문자열을 입력을 받고 바로 st가 생성되면 입력받으면 딱 그 문자열만 st에 저장되지 않을까 싶네요 ㅎ
입력받은 문자열들을 '문자'변수에만 저장할게 아니라 '문자'의 문자열들을 보관할 배열리스트라도 사용하면 해결할거 같기두 해용
ㄴ 어떤 뜻인지 모르겠어여 ㅜㅜ
ㄴ 그리고 그 longest 가 String 변수 이름이어요 행님
보니까 첫루프시 longest가 다른 token을 이기더라도 다음 루프에서 뭘입력하던 longest가 다음 토큰을 먹어버리네요.
this is jav라고 입력할시 longest는 this를 갖고 is , jav를 이기지만 다음루프의 nextLine에 의해 아마 null을 먹지 않았을까 생각됩니다
변수 한개 더늘려서 longest <-> token의 승자를 갖게 한뒤 그 변수를 출력하면 쉽게 될것 같은데요!
ㄴ ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 제가 지금 이번에 처음으로 배우는 거라 잘 못알아먹겠습니다 ㅠㅠ 진짜 친절한 설명인데 ㅠㅠ ㅠ ㅠ
위에는 주저리주저리 추측한거구 새로운 변수 temp를 만들어서 longest 랑 token이랑 비교하고 난 결과값 longest를 temp와 비교하여 temp에 저장해두시고 마지막 출력문제 longest대신 temp
클래스 아래에 String temp If문 아래에 if (temp 사이즈<= longest사이즈) temp = longest , 마지막 system에 longest대신 temp