이안의 평일코딩

JAVA의 정석 13일차 - 배열용도 본문

Back-end/Java

JAVA의 정석 13일차 - 배열용도

이안92 2020. 7. 1. 11:51
반응형

2020.07.01(수)

1. 배열

  => 여러개 변수를 하나로 묶어서 관리

      (변수 이름을 한개로 가지고 사용 -> 배열명)

      변수가 여러개 이기 때문에 구분 -> 인덱스 (첨자)

      *** 주의점 : 인덱스 번호는 0부터 시작

  => 배열의 갯수를 가지고 올 때 => 배열명.length

  => 배열 선언

       int[] 배열명 = new int[변수갯수]

       int[] arr = new int[5];

       double[] arr = new double[5] => double => 0.0

       =====

       데이터형

       문자열 여러개

       String[] arr = new String[10] // => String => null로 초기화

       *** 모든 클래스 => 주소를 가지고 있다 (주소 없는 경우 : null)

  => 배열 초기화

       1) new를 이용해서 자동 초기화

       2) 프로그래머가 직접 입력

          int[] arr = {10, 20, 30, 40, 50}

       3) 사용자가 입력, 난수 ...

  => 배열 값 변경

       배열명[원하는 부분] = 값

              ========== 인덱스

               10개 => 7번째에 값을 변경

                           ====

                            배열명[6] = 100 -> 일반 변수와 동일한 취급을 한다

  => 배열 값 출력

       0부터 ~~ ==> for문 사용이 용이 => while을 사용이 가능

       => 일반 for => 인덱스 이용

            ==> 배열값을 변경, 제어

       => for-each => 실제 저장된 값을 읽어 온다

            ==> 출력용으로 주로 사용

 

   === 선언 데이터[] 배열명;

              =====기본형

              byte[] b => File 전송

              String[] s => 문자열이 많은 경우 (이름, 주소, 전화번호)

              int[] i => 성적계산, 통계

              double[] d => 통계, 빈도수, 레이팅

              boolean[] b => 존재여부

 

2. 배열 연습문제

 1) 요일 출력

blog.naver.com/psalm0129/220888094653

(윤년 계산하는 법 참조)

// 사용자가 년, 월, 일을 입력하면 => 요일을 출력

import java.util.*;
public class 자바배열 {
	public static void main(String[] args) {
    
    // 년도, 월, 일을 받는 변수가 필요
    int year=0, month=0, day=0;
    
    // 사용자로 부터 요청값을 받는다
    Scanner scan = new Scanner(System.in);
    System.out.print("년도 입력:");
    year = scan.nextInt();
    // scan.nextInt() => 키보드로 입력된 정수값을 읽어오는 역할
    // year라는 변수안에 값을 저장함
    System.out.print("월 입력:");
    month = scan.nextInt();
    System.out.print("일 입력:");
    day = scan.nextInt();
    
    System.out.println(year+"년도"+month+"월"+day+"일");
    
    //요일
    /*
    * 요일 구하기
    * 1) 전년도까지의 총날수 ex) 2020년. 1년도 1월 1일 ~ 2019년 12월 31일
    * 2) 전달까지의 총날수 ex) 7월. 2020년 1월 1일 ~ 2020년 6월 30일
    * 3) 입력된 day까지 총날수 구한다
    * =============================== +
    * => 전체총날수 & 7 ==> 요일을 구할 수 있다
    *    ==============
    *    0(일) 1(월) 2 3 4 5 6(토)
    *    => 1년도 1월 1일 => 월요일로 시작
    */
    
    // 전년도까지의 총날수
    int total = (year-1) * 365
    			+(year-1)/4
                -(year-1)/100
                +(year-1)/400;
    // 윤년 => 366 => 4년마다(윤년), 100년마다(제외), 400년마다(윤년) => 로마시대
    // 전달까지의 합
    int[] lastDay = {31, 28, 31, 30, 31, 30,
    				31, 31, 30, 31, 30, 31};
    // 1월 => 0
    // 2월 => total+31
    // 3월 => total+31+28...
    
    // 2월일 경우 => 28, 29
    if((year%4==0 && year%100!=0)||(year%400==0)) { // 윤년 조건
    	lastDay[1] = 29;
        }
    else {
        lastDay[1] = 28;
        }
        
    for (int i = 0; i<month-1; i++) {
    	total+=lastDay[i];
        }
        
    // 입력된 DAY
    total+=day;
    
    // 요일구하기
    int week = total%7;
    char[] strWeek = {'일','월','화','수','목','금','토'};
    System.out.println(strWeek[week]+"요일입니다");
    // 0 -> 일요일, 1 -> 월요일, ....
    }
}

 

 2) 가위바위보

import java.util.*;

public class 자바배열_용도 {
	public static void main(String[] args) {
	
    // 가위(0), 바위(1), 보(2)
    
    // 컴퓨터 -> 난수
    int com = (int)(Math.random()*3); // 0~2
    
    // 사용자 입력
    Scanner scan = new Scanner(System.in);
    System.out.print("가위(0), 바위(1), 보(2)>")
    int user = scan.nextInt();
    
    // 입력된 결과 확인
    /* if(com==0)
    * 	System.out.print("컴퓨터:가위");
    * else if(com==1)
    *	System.out.print("컴퓨터:바위");
    * else if(com==2)
    *	System.out.print("컴퓨터:보");
	*
    * if(user==0)
    *	System.out.print("사용자:가위");
    * else if(user==1)
    *	System.out.print("사용자:바위");
    * else if(user==2)
    *	System.out.print("사용자:보");
	*/}
    
    // => 세줄로 바꾸기
    
    String[] result = {"가위", "바위", "보"}
    System.out.println("컴퓨터:"+result[com]);
    System.out.println("사용자:"+result[user]);

 }
}

 3) 숫자 야구게임

========

정답 3  6  9

======== int[] com = {3, 6, 9}

3 9 6

===결과===

S: ●

B:

=========

3 8 7

===결과===

S:

B: 

=========

8 7 3

S:

B:

import java.util.*;

public class 자바배열_용도2 { 
public static void main(String[] args) { 
	int[] com = {3, 6, 9};
	// 사용자가 입력한 값 저장
    int[] user = new int[3];
    
    // 입력 받기
    Scanner scan = new Scanner(System.in);
    while(true) { // 맞힐 때까지 무한루프
		System.out.print("3자리 정수를 입력:"); // 100~999
    
    	// 잘못된 입력일 때 조건
    	int input = scan.nextInt();
   		if(input<100 || input>999) {
        // || => 잘못된 입력일 경우에 주로 처리
        // && => 정상적으로 입력이 된 경우에 처리
        System.out.println("잘못된 입력입니다!!"); // while 처음으로 이동
        continue; // while의 조건식으로 이동
    }
    
	// 잘못된 입력
    // 중복된 수가 있으면 안된다
    // 저장 ==> 123
    user[0] = input/100; // 123/100 => 1
    user[1] = (input%100)/10; // 123%100 => 23/10 => 2
    user[2] = input%10; // 화폐매수 구하기
        
    if(user[0]==user[1] || user[1]==user[2] || user[0]==user[2]) {
        System.out.println("중복된 수는 사용할 수 없다");
        continue;
    }
        
    // 비교
    int s=0, b=0;
    for(int i=0; i<3; i++) { // com
        for (int j=0; j<3; j++) { // user
            if(com[i]==user[j]) { // 같은 수가 있는지 여부 확인
                if(i==j)
                    s++;
                else
                    b++;
             }
         }
     }
        
     // 결과값 출력
     System.out.println("==== 결과 ====");
     System.out.print("S:");
     for(int i=0 ; i<s ; i++) {
        System.out.print("●");
        }
     System.out.print("\nB:");
     for(int i=0 ; i<b ; i++) {
        System.out.print("●");
        }
     System.out.println("\n==============");
    	
     // while 종료 여부
     if(s==3) {
        System.out.println("Game Over!!");;
        break;
     }
  }      
 } 
} 

 

 4) 2진법 출력

사용자가 입력 (정수) ==> 2진법 출력

bit => 16bit => 32767

0000 0000 0000 1010 10 ==> 배열

import java.util.*;
public class 자바배열_용도3 {
	public static void main(String[] args) {
    	int[] binary = new int[16];
        // 0, 1만 저장
        // 사용자가 요청한 정수
        int user = 0;
        int index = 15; // 뒤에서 부터 저장해 나감. 16번째 자리부터 2진법
        				// ==> 배열 제어
        Scanner scan = new Scanner(System.in);
        System.out.print("정수 입력(0~32767):");
        user = scan.nextInt();
        
        // Library 이용
        // System.out.println(Integer.toBinaryString(user));
        
        while(true) { // 종료시점 => break. 횟수가 지정되어 있지 않아서
        	binary[index] = user%2;
            user=user/2; // 1/2 = 0
            if(user==0)break;
            index--;
        }
        
        // 결과 출력 (while문에서 하면 안됨)
        for(int i = 0; i<16; i++) {
        	if(i%4==0 && i!=0) // 한칸씩 띄움
            	System.out.print(" ");
            	System.out.print(binary[i]);
        }
 }
}

 

 5) 문자 갯수 ==> 비밀번호

String[] s={
	"strawberry",
    "grape",
    "banana",
    "watermelon",
    "grapefruit",
    "melon",
    "pineapple"
    };
    // 과일명중에 가장 긴 과일은?
    // 전체 과일 출력
    System.out.println("===== 전체 과일명 =====");
    for (String ss:s) { // index가 존재하지 않는다, 값을 변경할 수 없다
    	System.out.println(ss);
    }
    System.out.println("=======================");
    System.out.println("과일명중에 가장 긴 과일은?");
    int max = 0;
    for (String ss:s) {
    	int len = ss.length(); // 문자열 => 문자의 갯수 (length())
        if(max<len)
        	max=len;
    }
    
    // 출력
    for(String ss:s) {
    	if(ss.length() == max) {
        	System.out.println(ss);
        }
    }
    
    System.out.println("=======================");
    System.out.println("과일명중에 가장 짧은 과일은?");
    int min = 100;
    for (String ss:s) {
    	int len = ss.length(); // 문자열 => 문자의 갯수 (length())
        if(min>len)
        	min=len;
    }
    
    // 출력
    for(String ss:s) {
    	if(ss.length() == min) {
        	System.out.println(ss);
        }
    }
    

 

3. 문자열 비교 : equals() // 로그인, 패스워드

   =============== (==)

   문자찾기 : contains() // 검색시 한글자만 쓰게되면 문자열 포함되는 찾아주는

   시작문자열 : startsWith() // 검색글자로 시작하는 자동완성

   끝나는문자열 : endsWith() 

   문자열자르기 : substring() // 유아인, 박신혜 2가지 자를 때

   문자 추출 : charAt()

   문자의 갯수 : length()

   공백문자 제거 : trim()

   문자의 위치 찾기 : indexOf(), lastIndexOf()

      // aaa.java -> .이 몇번째 위치

   형변환 : valueOf()

 

 1) equals(), equalsIgnoreCase() 로그인 처리

import java.util.*;
public class 문자열1 {
	public static void main(String[] args) {
    	//id, pwd
        final String ID="admin";
        final String PWD="1234";
        
        Scanner scan = new Scanner(System.in);
        System.out.print("ID를 입력:");
        String id = scan.nextLine();
        System.out.print("비밀번호 입력:");
        String pwd = scan.nextLine();
        /*
        * equals : 대소문자 구분해서 비교 // 비밀번호
        * equalsIgnoreCase : 대소문자 구분없이 비교 // 아이디(admin ADMIN 둘다가능)
        */
        // 결과 출력
        if(id.equals(ID) && pwd.equals(PWD)) {
        	System.out.println("로그인되었습니다!!");
        }
        else {
        	System.out.println("ID나 비밀번호가 틀립니다!!");
        }    
    }
}

// 문자열 String은 ==은 사용불가 (주소값만 저장) => equals()를 사용해야함

 

 2) contains() 포함된 문자열 찾기

import java.util.*;
import javax.swing.*; //window
public class 문자열2 {

	public static void main(String[] args) {
		String[] title={
				"#살아있다",
			    "결백",
			    "사라진 시간",
			    "침입자",
			    "온워드: 단 하루의 기적",
			    "야구소녀",
			    "반도",
			    "엔딩스 비기닝스",
			    "배트맨 비긴즈",
			    "위대한 쇼맨"
		};
		String[] actor={
				"유아인(오준우), 박신혜(김유빈)",
			    "신혜선(정인), 배종옥(화자), 허준호(추시장)",
			    "조진웅(박형구), 배수빈(김수혁), 정해균(정해균)",
			    "송지효(유진), 김무열(서진)",
			    "톰 홀랜드(이안 라이트풋 목소리), 크리스 프랫",
			    "이주영(주수인), 이준혁(최진태)",
			    "강동원, 이정현",
			    "쉐일린 우들리(다프네), 제이미 도넌(잭)",
			    "크리스찬 베일(브루스 웨인/배트맨), 마이클 케인(알프레드)",
			    "휴 잭맨(P.T. 바넘), 잭 에프론(필립 칼라일)"
		};
		
        String ss = JOptionPane.showInputDialog("검색어 입력"); // 입력창
        
        // System.out.println(ss);
        
        String temp="";
        
        for(String s:title) {
        	if(s.contains(ss)) {
            	// System.out.println(s);
                temp+=s+"\n";
            }   
        }
        //System.out.println(temp);
        JOptionPane.showMessageDialog(null, temp); // 정보창
	}

}
import javax.swing.*;
public class 문자열3 {

	public static void main(String[] args) {
		String[] title={
				"#살아있다",
			    "결백",
			    "사라진 시간",
			    "침입자",
			    "온워드: 단 하루의 기적",
			    "야구소녀",
			    "반도",
			    "엔딩스 비기닝스",
			    "배트맨 비긴즈",
			    "위대한 쇼맨"
		};
		String[] actor={
				"유아인(오준우), 박신혜(김유빈)",
			    "신혜선(정인), 배종옥(화자), 허준호(추시장)",
			    "조진웅(박형구), 배수빈(김수혁), 정해균(정해균)",
			    "송지효(유진), 김무열(서진)",
			    "톰 홀랜드(이안 라이트풋 목소리), 크리스 프랫",
			    "이주영(주수인), 이준혁(최진태)",
			    "강동원, 이정현",
			    "쉐일린 우들리(다프네), 제이미 도넌(잭)",
			    "크리스찬 베일(브루스 웨인/배트맨), 마이클 케인(알프레드)",
			    "휴 잭맨(P.T. 바넘), 잭 에프론(필립 칼라일)"
		};
		
		// 출연자명을 입력
		String name=JOptionPane.showInputDialog("출연자명을 입력");
		for(int i=0; i<actor.length; i++) {
			if(actor[i].contains(name)) {
				System.out.println("출연 영화:"+title[i]);
				break;
			}
		}
	}
}

 3) starsWith(), endsWith()

import java.util.*;
public class 문자열4 {

	public static void main(String[] args) throws Exception {
		String[] data = {
				"Java Program",
				"Oracle Program",
				"JSP Program",
				"Oracle AND Java",
				"Java AND JSP",
				"Ajax Program",
				"Spring AND Mobile",
				"Kotlin Program",
				"XML AND Annotation",
				"Java AND JQuery"
		};
		// startsWith suggest(자동완성기능)
		Scanner scan = new Scanner(System.in);
		System.out.print("검색어 입력:");
		String ss = scan.nextLine(); //next() 공백제외시킴, nextLine() 공백상관없음
		for(String s:data) {
			if(s.startsWith(ss) || s.endsWith(ss)) {
				System.out.println(s);
				Thread.sleep(500); // 1000분의1초 0.5초 잠깐잠깐 멈추게 하는 애니메이션 효과
			}
		}
	}
}
반응형
Comments