[java] 반복문 문제 풀기 ① (공백 빼서 출력하기, 성적 결과 구하기, 숫자의 누적 합계 구하기)

심심이·2024년 1월 27일
0

java

목록 보기
19/46

1. 문자열에서 반복문으로 공백 빼서 출력하기

출력 결과 / 요구 사항:

"   world        세계  "
=> "world세계"로 변환하기

코드 작성

	/*
    =============================for문으로 작성 ==============================
    */
    
    String str = "   world        세계  ";
		String str_result_for = "";

		for(int i = 0; i<str.length(); i++) {
			if(str.charAt(i) != ' ') { // 공백이 아닐 경우
				str_result_for += str.charAt(i);  //charAt은 한 글자만 나오므로 계속 문자열에 더해준다.
			}
		}

	/*
    =============================while문으로 작성 ==============================
    */
    
		int i = 0;
		while(i<str.length()) {
			if(str.charAt(i) != ' ') { // 공백이 아닐 경우
				str_result_for += str.charAt(i); //charAt은 한 글자만 나오므로 계속 문자열에 더해준다.
			}
			i++;
		}
        
    /*
    =============================dowhile문으로 작성 ==============================
    */
    
		int i =0;
		do {
			if(str.charAt(i) != ' ') {
				str_result_for += str.charAt(i);
			}
			i++;
		} while(i<str.length());
		System.out.println("시작/" + str_result_for + "/끝");


2. 성적결과 구하기

출력 결과 / 요구 사항:

=== 이순신님의 성적결과 ===
1. 학번 : 01564699
2. 성명 : 이순신
3. 국어 : 30
4. 영어 : 40
5. 수학 : 50
6. 총점 : 120
7. 평균 : 40.0
8. 학점 : F
9. 선물 : 꿀밤31. 국어, 영어, 수학은 0~100까지의 숫자만 받음
2. 선물은 누적됨(A면 놀이공원 이용권,스타벅스 이용권,맘스터치 이용권)

코드


public class Sungjuk2 {

	// === field ===
	String hakbun;  // "091234"
	String name;
	int kor;
	int eng;
	int math;
	int total;
	double avg;
	char grade;
	String gift;
	//==============


	// === method ===


	public boolean isTrue(String str) { //유효성 검사 메소드
		int number = Integer.parseInt(str);
		if(0 <= number && number <= 100) {
			return true;
		} else {
			System.out.println("입력하신" + str + "은 올바른 데이터가 아닙니다.");
			System.out.println("점수는 0~100까지만 입력하세요!!");
			return false;
		}
	}
	public void total() { // 합계 계산하는 메소드
		total = kor + eng + math;
	}

	public void avg() { // 평균 계산하는 메소드
		avg = total / 3.0;
	}

	public void grade() {
        if (avg > 90) {
            grade = 'A';
        } else if (avg > 80) {
			grade = 'B';
        } else if (avg > 60) {
			grade = 'C';
        } else if (avg > 40) {
			grade = 'D';
        } else {
			grade = 'F';
		}
    }

	public void gift() {
		gift = "";
		switch (grade) {
			case 'A' :
				gift += "놀이공원 이용권,";
			case 'B' :
				gift += "스타벅스 기프티콘,";
			case 'C' :
				gift += "맘스터치 이용권,";
			case 'D' :
				gift += "아이스크림";
				break;
			default :
				gift = "꿀밤 1대";

		}
	}
/* *** gift에서 문자열에 쌓아놓기가 가능한 이유는 
switch문은 break를 일일히 걸어줘야 빠져나갈 수 있기 때문이다.
break가 없을 경우 참인 조건문에서 부터 빠져 나오지 않고 모두 실행된다.
만약 하나의 값만 나오게 하려면
			case 'A' :
				gift += "놀이공원 이용권,";
                break;
가 필요한데, 여기서는 break를 걸지 않아 break를 건 D까지 자동적으로 
출력이 된다. (A가 참인 경우-> 참인 놀이공원 이용권부터 아이스크림까지 다 출력
B가 참인 경우-> A는 스킵(참인 조건문에서 break를 만날 때까지 지속되는 것이므로)
스타벅스 기프티콘부터 아이스크림까지 다 출력


*/
	public void print() { //결과 출력 메소드
		total();
		avg();
		grade();
		gift();

		System.out.println("===" + name + "님의 성적결과 ======");
		System.out.println("1. " + hakbun + "\n" +
				"2. 성명 : " + name + "\n" +
				"3. 국어 :" + kor + "\n" +
				"4. 영어 :" + eng + "\n" +
				"5. 수학 :" + math + "\n" +
				"6. 총점 :" + total + "\n" +
				"7. 평균 :" + Math.round(avg * 10)/10.0 + "\n" +
				"8. 학점 :" + grade + "\n" +
				"9. 선물 :" + gift
		);
	}



public class Main_sungujk2 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		Sungjuk2 sj = new Sungjuk2(); //기본 생성자
		// 사용자 입력 시작 ----
		System.out.print("1. 학번: ");
		sj.hakbun = sc.nextLine();

		System.out.print("2. 성명: ");
		sj.name = sc.nextLine();

		String inputStr = "";
		try {
			//유효성 검사 실행: 값이 0~100까지만 들어와야 됨.  ----
			System.out.print("3. 국어: ");
			inputStr = sc.nextLine();

			if (!(sj.isTrue(inputStr))) {
				sc.close();
				return;
			} else {
				sj.kor = Integer.parseInt(inputStr);
			}


			System.out.print("4. 수학: ");
			inputStr = sc.nextLine();
			if (!(sj.isTrue(inputStr))) {
				sc.close();
				return;
			} else {
				sj.math = Integer.parseInt(inputStr);
			}

			System.out.print("5. 영어: ");
			inputStr = sc.nextLine();
			if (!(sj.isTrue(inputStr))) {
				sc.close();
				return;
			} else {
				sj.eng = Integer.parseInt(inputStr);
			}

			sj.print();

		} catch (NumberFormatException e) {
			System.out.println(inputStr +" 이 아닌 숫자를 입력하세요.");
		}
	}
}

3. 성적결과 구하기

출력 결과 / 요구 사항:


1+2+3+4+5+6+7+8+9+10=55
1 부터 10 까지의 누적의 합계 : 55

코드:

	public static void main(String[] args) {
		int sum = 0;
		String str = ""; 
		for (int i = 1; i < 11; i++) {
			sum += i; //1부터 10까지 합계를 구함
			String add = (i<10)? "+":"="; //i가 마지막 숫자가 될 때까지 +, 아니면 =
			str += i + add; //str 문자열에 i와 add 붙여서 입력
            //for문에서 sum을 출력하면 오류가 나기 때문에 밖으로 빼줌. 
            //지역변수의 이해가 필요하다
		}
		System.out.print(str + sum);
	}
}
profile
개발하는 심심이

0개의 댓글

관련 채용 정보