국어 영어 수학 점수를 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 "가";
}
}
String 클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 String 인스턴스가 생성된다.
String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용해 주시면 좋은 성능을 기대할 수 있다. 그러나 문자열 추가,수정,삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 된다.
String 과는 반대로 StringBuffer/StringBuilder 는 가변성 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능하다. 따라서 문자열의 추가,수정,삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용한다.
StringBuffer, StringBuilder의 가장 큰 차이점은 동기화의 유무로써 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 이다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있다.
반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어나다.
입력: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);
}
length()
UTF-16 코드 유닛을 기준으로 문자열의 길이를 나타낸다.
substring()
string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환한다.
concat()
매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다.
charAt()
문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환한다.
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();
}
}
toString과 String.valueOf() 두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.
toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 valueOf는 "null"이라는 문자열로 처리한다.String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환한다.
toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니여도 출력한다.
String str = "age: " + 17;