-
문제. 문자열과 문자열에서 검색될 문자를 입력 받아 문자열에 그 문자가 몇 개인지 개수를 확인하는 프로그램을 작성하세요. (검색할 문자가 영문자가 아니면 "영문자가 아닙니다." 출력 후 프로그램 종료)
문자열 입력 : application
검색할 문자 입력 : p
'p'가 포함된 갯수 : 2 개 문자열 입력 : apple_test123
문자 입력 : ㄱ
영문자가 아닙니다.더보기1234567891011121314151617181920public void test() {Scanner sc = new Scanner(System.in);System.out.println("문자열을 입력하세요 > ");String str = sc.nextLine();System.out.println("검색할 문자를 입력하세요 > ");char ch = sc.next().charAt(0);int num = 0;if(!((int)ch >= 65 && (int)ch <= 90) && !((int)ch >=97 && (int)ch <= 122)) {System.out.println("영문자가 아닙니다.");return;}for(int i = 0; i < str.length(); i++) {if(str.charAt(i) == ch) {num++;}}System.out.printf("'%c'가 포함된 갯수 : %d개",ch, num);}cs 아스키 코드를 사용한다고 int로 강제형변환을 해줬는데
그냥 (ch >='A' && ch <= 'Z') &&(ch >='a' && ch <= 'z')로 해도 된다.
1234567891011121314151617181920212223242526272829public void testAnswer() {Scanner sc = new Scanner(System.in);System.out.println("문자열을 입력하세요 > ");String str = sc.nextLine(); //공백을 포함하겠다는 의도System.out.println("검색할 문자를 입력하세요 > ");char ch = sc.next().charAt(0);//검색할 문자 유효성 검사//영문자 : A-Z a-zboolean isUpperCase = ch >= 'A' && ch <= 'Z'; //65~90boolean isLowerCase = ch >= 'a' && ch <= 'z'; //97~122if(!isUpperCase && !isLowerCase) {System.out.println("영문자가 아닙니다.");return;}int cnt = 0;//문자열의 문자를 하나씩 순회for(int i = 0; i < str.length(); i++) {char currentChar = str.charAt(i);if(currentChar == ch) {cnt++;}}System.out.println(cnt);}cs 문제. 3명의 회원정보를 입력 받아 저장하고 출력하는 프로그램을 만드세요
(입력 : 이름, 나이, 주소, 키, 몸무게, 연락처 )
================ 저장회원===============
1 홍길동 19세 서울시 강남구 170cm 68kg 01012345678
2 임걱정 20세 경기도 수원시 180cm 75kg 01012345678
기능추가1
//출력결과 마지막행에 다음 항목에 대한 평균을 구하시오.
============================================
평균나이 00세 / 평균 키 : 00CM / 평균 몸무게 : 00kg
기능추가2
//입력할 회원 수를 입력하고 그 수 만큼 회원을 입력 받게 업그레이드 하세요받고 출력해야 할 정보가 많아서 복잡한 문제였다.
사실 좀 더 간단하게 해결할 수 있는 방법이 있었는데 '이건 배열 아니면 못 푼다'라는 생각으로 풀었다.나중에 다른 분이 공유해주신 답안 보고 저런 방법도 있구나 감탄했다.
배우는 입장으로서 나간 진도로만 문제를 풀어보는 연습도 필요한데 그러기가 참 어렵다.
더보기123456789101112131415161718192021222324252627282930313233343536373839404142public void test() {Scanner sc = new Scanner(System.in);System.out.println("회원 수를 입력하시오 > ");int num = sc.nextInt();String[] name = new String[num];int[] age = new int[num];String[] address = new String[num];int[] height = new int[num];int[] weight = new int[num];String[] contact = new String[num];int ageAve = 0;int heightAve = 0;int weightAve = 0;for(int i = 0; i < num; i++) {System.out.println("이름을 입력하시오 > ");name[i] = sc.next();System.out.println("나이를 입력하시오 > ");age[i] = sc.nextInt();sc.nextLine();System.out.println("주소를 입력하시오 > ");address[i] = sc.nextLine();System.out.println("키를 입력하시오 > ");height[i] = sc.nextInt();System.out.println("몸무게를 입력하시오 > ");weight[i] = sc.nextInt();System.out.println("연락처를 입력하시오 > ");contact[i] = sc.next();}System.out.println("============= 저장회원 ===============");for(int j = 0; j <num; j++) {ageAve += age[j];heightAve += height[j];weightAve += weight[j];System.out.printf("%d %s %d세 %s %dcm %dkg %s%n",j+1, name[j], age[j], address[j], height[j], weight[j], contact[j]);}System.out.printf("===================================%n"+ "평균나이 : %d세 / 평균 키 : %dcm / 평균 몸무게 : %dkg%n",ageAve/num, heightAve/num, weightAve/num);}cs 사실 배열로 문제를 풀면 나중에 해당 정보를 다시 불러올 때는 훨씬 깔끔하고 간단하기는 하다.
다만 아직 배우지 않은 방법으로 이 방법 밖에는 없다고 스스로 한계를 짓지 않는 게 좋겠다는 생각.
더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172private void test() {Scanner sc = new Scanner(System.in);String name = "";int age = 0;String addr = "";int height = 0;int weight = 0;String phone = "";//회원수System.out.print("몇명의 회원을 등록할까요? => ");int memberCnt = sc.nextInt();String result = "=================== 저장회원 ==================\n";//기능추가int sumAge = 0;int sumHeight = 0;int sumWeight = 0;double avgAge = 0;double avgHeight = 0;double avgWeight = 0;for (int i = 0; i < memberCnt; i++) {System.out.println("-------------- "+(i+1)+" -----------------");System.out.print("이름을 입력하세요 : ");name = sc.next();System.out.print("나이를 입력하세요 : ");age = sc.nextInt();sc.nextLine();System.out.print("주소를 입력하세요 : ");addr = sc.nextLine();System.out.print("키를 입력하세요 : ");height = sc.nextInt();System.out.print("몸무게를 입력하세요 : ");weight = sc.nextInt();System.out.print("연락처를 입력하세요 : ");phone = sc.next();result += (i+1)+"\t"+name+"\t"+age+"\t"+addr+"\t"+height+"cm\t"+weight+"kg\t"+phone+"\n";//기능추가sumAge += age;sumHeight += height;sumWeight += weight;}avgAge = (int)((sumAge*1.0/memberCnt)*10)/10.0;avgHeight = (int)((sumHeight*1.0/memberCnt)*10)/10.0;avgWeight = (int)((sumWeight*1.0/memberCnt)*10)/10.0;//refactoring// avgAge = (int)(sumAge*10.0/memberCnt)/10.0;// avgHeight = (int)(sumHeight*10.0/memberCnt)/10.0;// avgWeight = (int)(sumWeight*10.0/memberCnt)/10.0;result += "===========================================\n";result += "평균나이 : "+avgAge+"세 | 평균신장 : "+avgHeight+"cm | 평균몸무게 : "+avgWeight+"kg";System.out.println(result);}cs 아직 복합대입연산자를 유연하게 사용하는 능력이 부족해 보인다.
더 쓰고 더 고민하고 더 사용해봐야겠다.
avgAge = (int)((sumAge*1.0/memberCnt)*10)/10.0;
-> 여기서 sumAge에 1.0을 곱하는 이유는 double로 형변환하기 위해서. 이후 평균값을 구한 후 10을 곱해 소수점 한자리까지 만들 정보를 확보하고 int로 강제형변환을 해서 아래 소수점 자리들을 없앤다. 이후 10.0을 다시 곱하면 소수점 한자리까지만 나오는 double형의 나이 평균을 구할 수 있다.
printf를 통해 %.1f를 써도 되지만 이런 경우 출력할 때만 해당 값을 꺼내오는 것이고, 위 방법을 사용하면 변수에 이 값이 저장되어 어느 때건 불러오기가 편하다.
'혼자 있는 방 > Java' 카테고리의 다른 글
Homework(6) (0) 2021.06.24 Homework(5) (0) 2021.06.23 Homework(3) (0) 2021.06.21 Homework(2) (0) 2021.06.18 Homework(1) (0) 2021.06.17 댓글