SW공부 23일차

Guryena·2023년 1월 30일
0

CS

목록 보기
16/34

1. 아래 프로그램을 작성하시오.

국어 영어 수학 점수를 scanner 로 입력 받아.
평균과 학점을 출력 하는 프로그램을 짜시오.

단, Grade(국어,영어,수학) 클래스를 만들것.

출력
총점 : 240
평균 : 80

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int kor = sc.nextInt();
		int eng = sc.nextInt();
		int math = sc.nextInt();
		
		
		Grade grade = new Grade(kor, eng, math);
		
		System.out.println("총점 : "+grade.sum());
		
		System.out.println("평균 : " +grade.avg());
		
		System.out.println("학점은 "+grade.grade() + "입니다");
	}
public class Grade {
	private double kor;
	private double eng;
	private double math;
	private double sum;
	private double avg;
	
	public Grade(double kor, double eng, double math) {
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	double sum() {
		sum = this.kor + this.eng+this.math;
		return sum;
	}
	double avg() {
		
		avg = sum/3; 
		return avg;
	}
	String grade() {
		if (avg >=90) {
			return "수";
		}
		else if (avg >= 80) {
			return "우";
		}
		else if (avg >= 70) {
			return "미";
		}
		else if (avg >= 60) {
			return "양";
		}
		return "가";
	}
	
}

2.String 과 StringBuilder 의 차이는?

  • String

String 클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 String 인스턴스가 생성된다.

String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용해 주시면 좋은 성능을 기대할 수 있다. 그러나 문자열 추가,수정,삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 된다.

  • StringBuilder

String 과는 반대로 StringBuffer/StringBuilder 는 가변성 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능하다. 따라서 문자열의 추가,수정,삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용한다.

StringBuffer, StringBuilder의 가장 큰 차이점은 동기화의 유무로써 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 이다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있다.

반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어나다.

3.사용자에게 받은 문자열을 역순으로 화면에 출력하는 프로그램을 작성하시오.

입력:abcde
출력:edcba

public static void main(String[] args) {
		Scanner	sc = new Scanner(System.in);
		
		String al = sc.nextLine();
		String reverse = "";

		for (int i = al.length() - 1; i >= 0; i--) {
			reverse = reverse + al.charAt(i);
		}
		
		System.out.println(reverse);
	}

4.아래의 String 함수를 설명하시오.

  • length()
    UTF-16 코드 유닛을 기준으로 문자열의 길이를 나타낸다.

  • substring()
    string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환한다.

  • concat()
    매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다.

  • charAt()
    문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환한다.

5.사용자로부터 받은 문자열(영문으로)에서 자음과 모음 개수를 계산하는 프로그램을 작성하라.

public class CountChar {
	int consonant;
	int vowel;
	String s;
	public void setStr(String str) {
		s = str;
	}
	public String getStr() {
		return s;
	}
	
	public void vowelCount() {

		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i)=='a' ||s.charAt(i)=='e'||s.charAt(i)=='i'
					|| s.charAt(i)=='o'||s.charAt(i)=='u') {
				vowel++;
			}
		}
		System.out.println(vowel);
	}
	
	public void consonantCount() {
		
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i)!='a' ||s.charAt(i)!='e'||s.charAt(i)!='i'
					|| s.charAt(i)!='o'||s.charAt(i)!='u') {
				consonant++;
			}
		}
		System.out.println(consonant);
	}
	
}
import java.util.Scanner;

public class ScannerEx2 {

	public static void main(String[] args) {
		Scanner	sc = new Scanner(System.in);
		
		CountChar countChar = new CountChar();
		String str;
		
		str=sc.nextLine();
		countChar.setStr(str);
		
		countChar.consonantCount();
		countChar.vowelCount();
	}

}

6.String.valueOf 에 대하여 설명하시오.

toString과 String.valueOf() 두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.
toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 valueOf는 "null"이라는 문자열로 처리한다.

String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환한다.
toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니여도 출력한다.

7. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;

  • int형의 17보다 String형의 데이터 크기가 크기 때문에 데이터가 큰 타입으로 형변환되어 호출된다.

0개의 댓글