일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩테스트
- 국비IT
- ReactNative
- 이안의평일코딩
- 자바의정석
- 자스코테
- 리액트네이티브
- VUE
- Oracle
- typescript
- php
- javascript
- 오라클
- 스프링
- 정보처리기사요약
- 정보처리기사실기정리
- react
- 자바스크립트
- 정보처리기사정리
- 리액트
- Java의정석
- 타입스크립트
- 국비코딩
- 정보처리기사실기
- 자바스크립트 코딩테스트
- 정보처리기사실기요약
- 평일코딩
- 정보처리기사
- CSS
- spring
- Today
- Total
이안의 평일코딩
JAVA의 정석 13일차 - 배열용도 본문
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초 잠깐잠깐 멈추게 하는 애니메이션 효과
}
}
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 15일차 - 변수, 연산자, 제어문, 배열, 문자열 복습 (0) | 2020.07.03 |
---|---|
JAVA의 정석 14일차 - 배열용도2 (0) | 2020.07.02 |
JAVA의 정석 12일차 - 배열 (10) | 2020.06.30 |
JAVA의 정석 - 변수, 데이터, 연산자, 제어문 복습 (0) | 2020.06.29 |
JAVA의 정석 11일차 - do~while, break, continue, 중첩 for문 (0) | 2020.06.29 |