Index(of,of), 숙제

문이빈·2023년 7월 21일
0

기본형

논리형 - boolean (1bit) - true or false

문자형 - char (2byte) → uni code 0 ~ 65535

정수형 - byte (1byte) → -128 ~ +127

  • short (2byte) → -32768 ~ +32767
  • int (4byte)
  • long (8byte)

실수형 - float (4byte)

  • double (8byte) - default

객체형 - String (문자열)

-> 주소값을 갖고 있다.

String

  1. 문자열

  2. literal("") 생성 가능

  3. 문자열 편집(수정)을 할 수 없다.

  4. 비교시

== 사용하면 reference(참조값)을 비교 한다

equals() 사용하면 문자열의 내용을 비교한다.
※ 문자열 자체가 reference(참조값) 이다.

※ 똑같은 내용의 문자열 리터럴은 메모리에 한번만 생성된다. new는 할 때마다 메모리에 생성 된다

StringBuffer / StringBuilder (같음)

String 타입이 Buffer 타입으로 들어갈 수 없다.
new 해서 써야된다.

  1. 문자열

  2. 문자열 편집이 가능

StringTokenizer(java.util) 클래스와 String클래스의 split( )

  1. 문자열을 분리할 때 사용

  2. 분리된 문자열을 Token이라고 한다.

  3. StringTokenizer는 비어있는 값은 무시하고 split()는 비어있는 값도 인식한다.

배열

index
내가 찾은 위치에서 앞 글자배열의 번호


IndexOf( ? , ? )

숙제 했던거 다른 방법으로 풀어 봄

package class_;

import java.util.Scanner;

public class StringMain2 {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    
    System.out.print("문자열 입력: ");
    String original = scan.nextLine();
    
    System.out.print("현재 문자열 입력: ");
    String current = scan.nextLine();
    
    System.out.print("바꿀 문자열 입력: ");
    String change = scan.nextLine();
    
    if (original.length()<current.length()){
    	System.out.println("입력한 문자열의 크기가 작습니다.");
    	System.out.println("치환 할 수 없습니다");
    	//System.exit(0); //프로그램 강제 종료
    	return;//메소드를 벗어나라
    }
    
    original = original.toLowerCase();
    current = current.toLowerCase();
    
    int index = 0;
    int count = 0;
    
    while((index = original.indexOf(current, index)) != -1) {
    	index = index +2;
    	count++;
    }// while문 끝
    
    System.out.println(original.replace(current, change));
    System.out.println(count + "번 치환");
    }
}

숙제

package constructor;

import java.util.Scanner;

public class MemberService { // 딱 1인분만 한다.
    //배열로 만든다
    Scanner scan = new Scanner(System.in);
    MemberDTO[] ar = new MemberDTO[3];

public MemberService() {
	System.out.println("기본 생성자");
}

public void menu(){
	
	int num;
	
	while(true) {
		System.out.println();
		System.out.println("***********");
		System.out.println("  1. 가입");
		System.out.println("  2. 출력");
		System.out.println("  3. 수정");
		System.out.println("  4. 삭제");
		System.out.println("  5. 끝");
		System.out.println("***********");
		System.out.print  ("  번호 : ");
		num = scan.nextInt();
		
		if(num==5) break; // while문을 벗어나라
		if(num==1) 
			insert(); //가입하러 가세요;
		else if(num==2)
			display();
		else if(num==3)
			update();
		else if(num==4) 
		    delete();
	}
}
    public void insert() {
	
	int i;
	for(i=0; i<ar.length; i++) {
		if(ar[i] == null) System.out.println(ar[i]); // 주소값 출력 

주소값을 출력함
.toString( )과 같은 값을 출력

숙제) 선생님이 새로 하신 코드

package constructor;

import java.util.Scanner;

public class MemberService_T { // 딱 1인분만 한다.
    //배열로 만든다
    Scanner scan = new Scanner(System.in);
    MemberDTO_T[] ar = new MemberDTO_T[3];

public MemberService_T() {
	System.out.println("기본 생성자");
}

public void menu(){
	
	int num;
	
	while(true) {
		System.out.println();
		System.out.println("***********");
		System.out.println("  1. 가입");
		System.out.println("  2. 출력");
		System.out.println("  3. 수정");
		System.out.println("  4. 삭제");
		System.out.println("  5. 끝");
		System.out.println("***********");
		System.out.print  ("  번호 : ");
		num = scan.nextInt();
		
		if(num==5) break; // while문을 벗어나라
		if(num==1) 
			insert(); //가입하러 가세요;
		else if(num==2)
			display();
		else if(num==3)
			update();
		else if(num==4) 
		    delete();
	}
}
    public void insert() {

	int i;
	for(i=0; i<ar.length; i++) {
		if(ar[i] == null) {
			
			System.out.print("이름 입력 : ");
			String name = scan.next();
			System.out.print("나이 입력 : ");
			int age = scan.nextInt();
			System.out.print("핸드폰 입력 : ");
			String phone = scan.next();
			System.out.print("주소 입력 : ");
			String address = scan.next();
			
		    ar[i] = new MemberDTO_T(name, age, phone, address);
		    System.out.println("가입 완료");
		   
		   break; // for문을 벗어나라
		} //if문
	}// for문
	
	if(i == ar.length) {
		System.out.println("회원 마감");
		}
	}

public void display() {
	
	int i;
	for(i=0; i<ar.length; i++) {
		if(ar[i] == null) System.out.println(ar[i]); // 주소값 출력 
	}
}
		public void update() {
			System.out.println("핸드폰 번호 입력 : ");
			String phone = scan.next();

			int i;
			for(i=0; i<ar.length; i++) {
				if(ar[i] == null) {
					if(ar[i].getPhone().equals(phone)) {
						System.out.println(ar[i]);
						
						System.out.print("수정 할 이름 입력 : ");
						String name = scan.next();
						System.out.print("수정 할 나이 입력 : ");
						int age = scan.nextInt();
						System.out.print("수정 할 핸드폰 입력 : ");
						phone = scan.next();
						System.out.print("수정 할 주소 입력 : ");
						String address = scan.next();
						
						//수정
						ar[i].setName(name);
						ar[i].setAge(age);
						ar[i].setPhone(phone);
						ar[i].setAddress(address);
						
						System.out.println("회원 정보 수정 완료");
						
						break;
					}
				}
				

				} //if문
			}// for문
		public void delete() {
			System.out.println("핸드폰 번호 입력 : ");
			String phone = scan.next();
			
			int i;
			for(i=0; i<ar.length; i++) {
				if(ar[i] == null) {
					if(ar[i].getPhone().equals(phone)) {
						ar[i] = null;
						System.out.println("회원 정보 삭제 완료");
						return;
					}
				}
			}
			if(i == ar.length) System.out.println("회원 정보를 찾을 수 없습니다.");
		}
}

잘 작동 함.


난수

0 <= 난수 < 1
컴퓨터가 불규칙하게 발생시키는 수

만약 x ~ y 사이의 난수를 발생시키고 싶다면
System.out.println((int)(Math.random() * (y - x + 1)) + x);
문자로 하려면 괄호를 이렇게 변경해야 한다..
System.out.println((char)(Math.random() * 26 + 65));

package constructor;

public class ImportStatic {

public static void main(String[] args) {
	System.out.println(Math.random()); //난수 발생 시켜 보도록 할게
	System.out.println((int)(Math.random() * (90 - 65 + 1)) + 65); //65~90 사이의 난수
	System.out.println((char)(Math.random() * 26 + 65)); // 아스키 코드 65~90(A~Z) - 괄호 잘 보세요
	System.out.println(Math.pow(3, 4)); // 3의 4승 -> pow함수가 실수형으로 바꿔서 준다.
	System.out.println(String.format("%.2f", 12.567)); //  뒤에 수를 소숫점 둘째 자리까지 출력(반올림 하면서)
	}
}


몇글자 안쓰겠다고 import하고 안쓸 수 있긴 함

package constructor;

import static java.lang.Math.random;
import static java.lang.Math.pow;
import static java.lang.String.format;

public class ImportStatic {

public static void main(String[] args) {
	System.out.println(random()); 								//난수 발생 시켜 보도록 할게
	System.out.println((int)(random() * (90 - 65 + 1)) + 65);   //65~90 사이의 난수
	System.out.println((char)(random() * 26 + 65)); 			// 아스키 코드 65~90(A~Z) - 괄호 잘 보세요
	System.out.println(pow(3, 4)); 								// 3의 4승 -> pow함수가 실수형으로 바꿔서 준다.
	System.out.println(format("%.2f", 12.567));				    //  뒤에 수를 소숫점 둘째 자리까지 출력(반올림 하면서)
    }
}

+import static java.lang.System.out;

import static java.lang.System.out;

public class ImportStatic {

public static void main(String[] args) {
	out.println(random()); 								//난수 발생 시켜 보도록 할게
	out.println((int)(random() * (90 - 65 + 1)) + 65);  //65~90 사이의 난수
	out.println((char)(random() * 26 + 65)); 			// 아스키 코드 65~90(A~Z) - 괄호 잘 보세요
	out.println(pow(3, 4)); 							// 3의 4승 -> pow함수가 실수형으로 바꿔서 준다.
	out.println(format("%.2f", 12.567)); 				//  뒤에 수를 소숫점 둘째 자리까지 출력(반올림 하면서)
    }
}

+import java.util.Random;

	Random r = new Random();
	System.out.println(r.nextDouble()); // 0 <= 난수 < 1
	System.out.println(r.nextInt());	// 음수~양수
	System.out.println(r.nextInt(100)); // 오버로드 0 ~ 99
    }
}

final (상수화)

  1. final 변수는 값을 변경할 수 없다.

  2. final 변수는 반드시 초기값을 주어야 한다. final 필드는 생성자에서 초기값을 주어야 한다
    static final 필드는 static 구역에서 초기값을 주어야 한다

  3. final 변수는 대문자로만 기술

  4. final 메소드는 Override를 할 수 없다. 5. final 클래스는 자식클래스를 가질 수 없다.- 상속이 안된다

    package inheritance;
    
    enum Color{ // 상수들의 집합체 만들어 버리기  ; 없이 나열만 하면 됨
          RED, GREEN, BLUE, CYAN, NAGENTA  
        }
    //---------------------
    class Final{
       public final String APPLE = "사과";
       public final String STRAWBERRY;
    
    public static final String LION = "사자";
    public static final String TIGER; // static 은 절대 생성되고 초기화가 안되서 static에서 초기화 해야됨
    
    
    //	public static final int RED = 0;
    //	public static final int GREEN = 1;
    //	public static final int BLUE = 2;
    //	public static final int CYAN = 3;
    //	public static final int NAGENTA = 4;
    
    
    public Final() { //  생성자로 가서 초기화를 시켜주고 값을 설정 
    				 //	(생성자의 주 목적 = 초기화!!!!!!!!!!!!!)
    	STRAWBERRY = "딸기";
    }
    	
    static {
    	TIGER = "호랑이";
    	}	
    }
    
    //----------------------------------------
    public class FinalMain {
    
    public static void main(String[] args) {
    	final int A = 10;
    	// A++; -error
    	System.out.println("A = " + A);
    	
    	final int B;
    	B = 20;
    	System.out.println("B = " + B);
    	
    	System.out.println("----------------------");
    	
    	Final f = new Final();
    	System.out.println("FRUIT = " + f.APPLE); // static이 없으면 무조건 new!!!!!!!!!!!!!!
    	System.out.println("STRAWBERRY = " + f.STRAWBERRY);
    	
    	System.out.println("----------------------");
    	
    	System.out.println("LION = " + Final.LION);
    	System.out.println("LION = " + f.LION);
    	//둘 다 오케이 static 으로 생성해서 Final.도 가능
    	
    	System.out.println("LION = " + f.TIGER);
    	
    	System.out.println("----------------------");
    	
    	System.out.println("빨강 = " + Color.RED);
    	System.out.println("빨강 = " + Color.RED.ordinal()); // 빨강이 무슨 숫자를 가지고 있는지 궁금함.
    	
    	System.out.println("----------------------");
    	
    	for(Color c : Color.values()) {             //확장형 for문이라 Color.values()가 : 앞에 애에게 값을 넘겨줌
    		System.out.println(c + "\t" + c.ordinal());


package

  1. 서로 관련이 있는 *.class 파일들의 모임

  2. 맨 첫줄에 1번만 기술할 수 있다

  3. 소문자로 기입

  4. 자바가 제공하는 기본 패키지 java.lang (default package)이다

package com.zoo;

public class Zoo {
    public void tiger() {
        System.out.println("무서운 호랑이");
    }
}

-------------------------------------------

package com.apple;

import com.zoo.Zoo;

public class Apple {

public static void main(String[] args) {
	System.out.println("빨강 사과");
	
	// Zoo클래스에서 tiger( )메소드를 호출
    
	Zoo z = new Zoo();
	z.tiger();
    }
}


★ 접근제한자 (Modifier)

※ default라고 직접 쓰는 것이 아니라 -> public, protected, private 를 쓰지 않은 상태
※ protected는 다른 패키지에서 Sub 클래스라면 접근이 가능하다
단, Sub 클래스로 생성해야만 한다. Super클래스로 생성하면 접근이 안 된다.

package com.zoo;

public class Zoo {
    public void tiger() {
        System.out.println("무서운 호랑이");
    }
    protected void giraffe() {
        System.out.println("목이 긴 기린");
    }
    void elepthant() {
        System.out.println("뚱뚱한 코끼리");
    }
    private void lion() {
        System.out.println("멋진 사자");
    }
}

만약 같은 패키지에 있다면 private인 lion 빼고는 다 볼 수 있다.

할머니 클래스는 자기 자식이 누가 있는지 모름.


추상클래스 - Sub class 제어

  1. 추상화 작업

  2. 메소드에 body { } 가 없는 메소드를 추상메소드라고 한다. 추상메소드에는 abstract 라는 키워드를 써야 한다
    추상메소드는 { } body 없이 ;를 써야한다

  3. 추상메소드가 있는 클래스는 반드시 추상클래스이어야 한다.

  4. 추상메소드가 없는 추상클래스를 의미상의 추상클래스라고 한다. 의미상의 추상클래스의 메소드는 모두 빈 body로 되어 있다.

  5. 추상클래스는 자신의 클래스로 메모리 생성을 할 수 없다
    => 생성하려면
    가. Sub(자식) Class를 이용 (반드시 Sub Class가 추상메소드를 Override 해야 한다)
    나. 메소드를 이용

  6. 추상메소드는 반드시 Sub Class에서 Override 꼭 해 주어야 한다. Override를 안하면 Sub Class 마저도 abstract 가 되어야 한다.

ex) 12월 1일 만두 가게 오픈할 예정 -> 현재 가게 없음(현재 메소드 없음) = 추상

추상메소드를 만들면 클래스도 추상이여야 함.

추상 클래스의 가장 큰 특징 절대 new할 수 없다.

-> 방법은 강제로 상속관계 만들기

package abstract_;

public abstract class AbstractTest { //  POJO(Plain Old Java Object) 형식이에요 = 완전 기본이다~
    String name; // 나만 쓸래 상속안해

public String getName() { // 구현
	return name;
}

public abstract void setName(String name); // 추상 메소드 - { }있어야 하는데 그냥 ; 박아버림	
}

--------------------------------------------------------------

package abstract_;

public class AbstractMain extends AbstractTest{ // 그대로 물려받아 추상으로 만들어 줘야 된다. 
                                               -> 그런데 abstract 빼야지 AbstractTest at = new AbstractMain(); 
                                                  가능 이유는 아직 현실화되지 않아서 new가 불가능

@Override
public void setName(String name) {
	this.name = name;             // private 이여서 -> protected or defalt로 만들어주면 사용 가능
}

public static void main(String[] args) {
//		AbstractTest at = new AbstractTest();    // 추상 클래스의 가장 큰 특징 절대 new할 수 없다.
        AbstractTest at = new AbstractMain();
        at.setName("문이빈");
        System.out.println(at.getName());

    }
}

예외처리

생각지도 않은 error가 발생하여 프로그램이 중도에 멈추는 것을 미리 예방하는 것

  1. 예외처리의 최 상위 클래스는 Exception 이다.

  2. Exception이 여러 개 발생을 하면 한 번에 최 상위 클래스 Exception으로 처리하는 것이 편하다.

  3. 자바가 제공하는 Override한 메소드에는 throws 사용해서는 안된다.

  1. 컴파일 Exception
  • RuntimeException 으로부터 상속을 받지 않기때문에 반드시 Exception을 처리한다
    => try~catch, throws
    실행 Exception
  • RuntimeException 으로부터 상속을 받으며
    Exception을 처리하지 말고 비즈니스 로직으로 처리한다.

처리

1. try {
error가 발생할 가능성이 있는 영역
 } catch( ){
error가 발생하면 처리되는 부분
 }

2. try {
 }catch( ) {
 }catch( ) {
 }

3. try {
 } catch( ) {
 } finally {
error가 있건 없건 무조건 실행하는 부분
 }
  1. throws - JVM에게 떠넘기는 것

  2. throw - 사용자가 직접 Exception을 작성하여 발생

    package abstract_;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Today {

public static void main(String[] args) throws ParseException {
	Date date = new Date();
	System.out.println("오늘 날짜 : " + date);
	
	SimpleDateFormat sdf = new SimpleDateFormat("y년 MM월 dd일 HH:mm:ss E요일"); 
 // 2023년 07월 21일 (작성방법 구글링~)
	System.out.println("오늘 날짜 : " + sdf.format(date));
	
 // 내 생일
	SimpleDateFormat input = new SimpleDateFormat("yyyyMMdd");
	Date birth = input.parse("19960706"); 
 // input.parse = 문자열을 date형식으로 바꾸는 메소드 -> 예외 처리
	System.out.println("내 생일 : " + birth);
	System.out.println("내 생일 : " + sdf.format(birth));
	
	System.out.println();
	
 // 시스템 날짜를 기준으로 생성이 된다.
	//Calendar cal = new Calendar(); -error 	// 추상 클래스라 직접적으로 new가 불가능 방법은 밑에 처럼
	//Calendar cal = new GregorianCalendar(); 	// 자식 클래스를 이용하여 생성함.
	Calendar cal = Calendar.getInstance(); 		// 메소드를 이용하여 클래스 생성
	
	int year = cal.get(Calendar.YEAR); 			//년 꺼내기year / cal.get(1);
	int month = cal.get(Calendar.MONTH)+1;	 	//월 꺼내기 => 1월 = 0 , 2월 = 1 / cal.get(1)+1;
	int day = cal.get(Calendar.DAY_OF_MONTH); 	// 헛갈려 그냥 지정해버리기~
	
	int week = cal.get(Calendar.DAY_OF_WEEK); 	// 일-1, 월-2, 화-3
	String dayOfWeek = null;
	switch(week) {
	case 1 : dayOfWeek = "일"; break;
	case 2 : dayOfWeek = "월"; break;
	case 3 : dayOfWeek = "화"; break;
	case 4 : dayOfWeek = "수"; break;
	case 5 : dayOfWeek = "목"; break;
	case 6 : dayOfWeek = "금"; break;
	case 7 : dayOfWeek = "토"; 
	}
	
	int hour = cal.get(Calendar.HOUR_OF_DAY);
	int minute = cal.get(Calendar.MINUTE);
	int second = cal.get(Calendar.SECOND);

	System.out.println(year + "년 " + month + "월 " + day + "일" + dayOfWeek);
	System.out.println(hour + "시 " + minute + "분 " + second + "초");
	
    }
}

package abstract_;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class NumberMain {

public static void main(String[] args) {
	// NumberFormat nf = new NumberFormat(); -error => 추상 클래스라 생성이 안됨
	
 // DecimalFormat - 3자리 마다 ,를 찍어준다. 근데 말 안해도 소수점 3째자리 까지 제공(반올림한 상태로)
	NumberFormat nf = new DecimalFormat(); // 그래서 자식 클래스를 가지고 와서 생성
	System.out.println(nf.format(12345678.456789)); 
	System.out.println(nf.format(12345678));
	System.out.println();
	
 // 내가 원하는 대로 숫자 적을래~~ => 유효 숫자가 아닌 것은 표시하지 않는다.
	NumberFormat nf2 = new DecimalFormat("#,###.##원");
	System.out.println(nf2.format(12345678.456789)); 
	System.out.println(nf2.format(12345678));
	System.out.println();
	
   // 강제로 0을 표시
      NumberFormat nf3 = new DecimalFormat("#,###.00원");
      System.out.println(nf3.format(12345678.456789));
      System.out.println(nf3.format(12345678));
      System.out.println();

   // NumberFormat nf4 = NumberFormat.getInstance(); //메소드를 이용하여 생성
      NumberFormat nf4 = NumberFormat.getCurrencyInstance();
      nf4.setMaximumFractionDigits(2); //소수이하 2째자리
      nf4.setMinimumFractionDigits(2); //0을 강제로 표시 2자리까지
      System.out.println(nf4.format(12345678.456789));
      System.out.println(nf4.format(12345678));
      System.out.println();
      
   // NumberFormat nf4 = NumberFormat.getInstance(); //메소드를 이용하여 생성
      NumberFormat nf5 = NumberFormat.getCurrencyInstance(Locale.US);
      nf5.setMaximumFractionDigits(2); //소수이하 2째자리
      nf5.setMinimumFractionDigits(2); //0을 강제로 표시 2자리까지
      System.out.println(nf5.format(12345678.456789));         
      System.out.println(nf5.format(12345678));
      System.out.println();
   }
}

숙제 1

[문제] 만년달력
- 년도, 월을 입력하여 달력을 작성하시오
        
클래스명 : CalendarEx
필드 : 
메소드 - 기본 생성자 : 월, 일을 입력
       calc()    : 매달 1일의 요일이 무엇인지? (Calendar에 메소드 준비 - 구글링)
                   매달 마지막이 28, 29, 30, 31 무엇인지? (Calendar에 메소드 준비 - 구글링)
       display() : 출력

클래스명 : CalendarMain

[실행결과]
년도 입력 : 2002
월 입력 : 10	

일	월	화	수	목	금	토
		1	2	3	4	5
6	7	8	9	10	11	12
13	14	15	16	17	18	19
20	21	22	23	24	25	26
27	28	29	30	31
package abstract_;

import java.util.Calendar;
import java.util.Scanner;

class CalendarEx {

private int year;
private int month;

// 월, 일을 입력하는 생성자
public CalendarEx(int year, int month) {
    this.year = year;
    this.month = month;
}

// 매달 1일의 요일을 계산하는 메소드
public int mon1() {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month - 1, 1); // 월은 0부터 시작하므로 month - 1
    return cal.get(Calendar.DAY_OF_WEEK);
}

// 매달 마지막 날짜를 계산하는 메소드
public int lastday() {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, 1); // 다음 달 1일로 설정
    cal.add(Calendar.DATE, -1); // 하루를 빼서 이전 달의 마지막 날짜로 변경
    return cal.get(Calendar.DATE);
}

// 달력을 출력하는 메소드
public void display() {
    System.out.println("일\t월\t화\t수\t목\t금\t토");

    int firstDay = mon1();
    int lastDay = lastday();

    // 첫 번째 날짜 이전의 공백 출력
    for (int i = 1; i < firstDay; i++) {
        System.out.print("\t");
    }

    // 날짜 출력
    for (int day = 1; day <= lastDay; day++) {
        System.out.print(day + "\t");

        // 토요일이면 줄바꿈
        if ((firstDay + day - 1) % 7 == 0) {
            System.out.println();
        }
    }

    System.out.println();
    }
}

//-----------------------------------------

public class CalendarMain {

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("월 입력: ");
        int month = scanner.nextInt();

        System.out.print("일 입력: ");
        int day = scanner.nextInt();

        CalendarEx cal = new CalendarEx(month, day);
        cal.display();

        scanner.close();
    }
}

숙제 2

[문제] 사지선다형
- 총 5문제의 답을 입력받는다
- 정답은 "11111" 이다
- 맞으면 'O', 틀리면 'X'
- 1문제당 점수는 20점씩 처리

클래스명 : Exam
* 필드
private String name;
private String dap;
private char[] ox;
private int score;
public static final String JUNG = "11111"; //상수화

* 메소드
생성자 - Scanner 를 이용하여 이름과 답을 입력받는다. 
compare() - 비교
getName()
getOx()
getScore()

클래스명 : ExamMain

[실행결과]
인원수 입력 : 2

이름 입력 : 홍길동
답 입력 : 12311  

이름 입력 : 코난
답 입력 : 24331

이름		1 2 3 4 5	점수
홍길동  	O X X O O	60
코난  	X X X X O	20
package constructor;

import java.util.Scanner;

public class Exam {
    private String name;
    private String dap;
    private char[] ox;
    private int score;
    public static final String JUNG = "11111";

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getDap() {
	return dap;
}
public void setDap(String dap) {
	this.dap = dap;
}
public char[] getOx() {
	return ox;
}
public void setOx(char[] ox) {
	this.ox = ox;
}
public int getScore() {
	return score;
}
public void setScore(int score) {
	this.score = score;
}
public static String getJung() {
	return JUNG;
}

Scanner scan = new Scanner(System.in);

public void con() {
	System.out.println("이름 입력 : " + name);
	name = scan.next();
	System.out.println("답 입력 : " + dap);
	dap = scan.next();
	
	compare();
}
public void compare() {
    ox = new char[dap.length()];
    score = 0;

    for (int i = 0; i < dap.length(); i++) {
        if (dap.charAt(i) == JUNG.charAt(i)) {
            ox[i] = 'O';
            score += 20;
        } else {
            ox[i] = 'X';
            }
        }
    }
}

-----------------------------------------------------------

package constructor;

import java.util.Scanner;

public class ExamMain {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("인원수 입력: ");
    int count = scanner.nextInt();
    Exam[] exams = new Exam[count];

    for (int i = 0; i < count; i++) {
        exams[i] = new Exam(scanner);
    }

    System.out.println("\n이름\t1 2 3 4 5\t점수");
    for (Exam exam : exams) {
        System.out.print(exam.getName() + "\t");
        char[] ox = exam.getOx();
        for (char c : ox) {
            System.out.print(c + " ");
        }
        System.out.println("\t" + exam.getScore());
    }

    scanner.close();
    }
}

0개의 댓글