
LoopEx1(숫자 출력하기, for문 등등)
package loop.ex;
import java.util.Scanner;
public class LoopEx1 {
// 필드(전역 변수 비슷)
Scanner sc = new Scanner(System.in);
/**
* 1부터 10까지 출력하기
*/
public void method1() {
// Java는 초기식 변수 선언 시 let X -> Java 자료형
for(int i = 1 ; i <= 10 ; i++) {
System.out.println(i);
}
}
/**
* 첫 번째 입력 받은 수 부터
* 두 번째 입력 받은 수 이하 까지
* 세 번째 입력 받은 수 만큼 증가하며 출력하기
*/
public void method2() {
System.out.print("시작 끝 증가값 :");
int start = sc.nextInt();
int end = sc.nextInt();
int value = sc.nextInt();
for(int i= start; i <= end ; i += value) {
System.out.println(i);
}
}
/**
* 두 수를 입력받아
* 작은 수 부터 큰 수 이하까지 1씩 증가하며 반복
*/
public void method3() {
System.out.print("숫자 2개 입력 : ");
int a = sc.nextInt();
int b = sc.nextInt();
if( b > a) { // a 가 작은경우
for(int i = a ; i <= b; i++) {
System.out.println(i);
}
}else { // b가 작거나 같은 경우
for(int i = b ; i <= a; i++) {
System.out.println(i);
}
}
System.out.println("-----------------------");
//추가 변수를 이용해서 시작, 종료 값 지정하기
int start = a;
int end = b;
if(a > b) { // 시작이 끝 보다 큰 경우
start = b;
end = a;
}
for(int i=start ; i<=end ; i++) {
System.out.println(i);
}
System.out.println("----------------------");
// a에 작은값, b에는 큰 값 저장하게 만들기
if(a > b) { // a 값이 b보다 큰 경우 a <-> b 값 변경
int temp = a; // a 값을 보관하는 임시 변수
a = b;
b = temp;
}
for(int i = a; i <= b; i++) {
System.out.println(i);
}
System.out.println("-----------------------");
// 자바에서 제공하는 기능(메서드)이용
int min = Math.min(a, b); // a,b중 작은값
int max = Math.max(a, b); // a,b중 작은값
for(int i = min ; i <= max; i++) {
System.out.println(i);
}
}
/** 1부터 100 사이의 정수중 5의 배수의 합, 개수 구하기
* sum, count
*/
public void method4() {
int sum = 0;
int count = 0;
for(int i = 1; i <= 100; i++) {
if(i % 5 == 0) { // 5의 배수인 경우
sum += i; // sum에 i값(5의 배수) 누적
count++; // count1 증가(5의 배수 카운트)
}
}
System.out.printf("합계 : %d / 개수 : %d", sum, count);
}
// 구구단 3단 출력하기
public void method5() {
System.out.println("[3단]");
for(int i=1 ; i<=9 ; i++) {
System.out.printf("3 X %d = %d \n", i, 3*i );
}
}
/**
* 입력 받은 단 출력하기
* 단, 입력 받은 단이
* 2~9 사이 숫자가 아니면
* "잘못 입력 하셨습니다" 출력
*/
public void method6() {
System.out.println("[입력 받은 단 출력하기]");
int input = sc.nextInt();
if( input <2 || 9 < input) {
System.out.println("잘못 입력 하셨습니다");
return;
}
for(int i=1 ; i<=9 ; i++) {
System.out.printf("%d x %d = %d \n", input, i, (input*i) );
}
}
/**
* while문 기본 작성법
*/
public void method7() {
int num = 1;
// while(조건식) -> 조건식이 ture인 경우에 반복수행
while(num <= 10) {
System.out.print(num + "");
num++;
}
}
// for(초기식;조건식;증감식)
// -> 지정된 횟수만큼 반복
// while(조건식)
// -> 조건식이 false 가 될 때 까지 반복
// == 몇회인지 모르겠지만 일단 끝날 때 까지 반복
/** [구구단 출력하기 version.2]
* 입력 받은 단 출력하기
* 단, 입력 받은 단이
* 2~9 사이 숫자가 아니면
* "잘못 입력 하셨습니다" 출력 후
* 다시 단 입력 받기
*/
public void method8 () {
int input;
while(true) { // 무한반복
System.out.println("단 입력(2~9) :");
input = sc.nextInt();
if( input >= 2 && input <= 9 ) { // 2~9 사이
break; // 가까운 반복문 정지(분기문)
}
System.out.println("잘못 입력 하셨습니다");
}
// 구구단 출력
for(int i=1 ; i<=9 ; i++) {
System.out.printf("%d x %d = %d \n", input, i, (input*i) );
}
}
}
LoopEx2 (모양 출력하기, do while문 등등)
package loop.ex;
import java.util.Scanner;
public class LoopEx2 {
// 필드(전역 변수 비슷)
Scanner sc = new Scanner(System.in);
/** 다음 모양 출력하기
* 1234
* 1234
* 1234
*/
public void method1() {
for(int i = 1 ; i<=3 ; i++) { // 행 제어(3행 반복)
for(int y = 1; y<=4; y++) { // 열 제어(4열 반복)
System.out.print(y);
}
System.out.println(); // 한 행이 끝나면 줄 바꿈
}
}
/** 다음 모양 출력하기
* 54321
* 54321
* 54321
* 54321
*/
public void method2() {
for(int i = 1; i<=4 ; i++) {
for(int y=5; y>=1; y--) {
System.out.print(y);
}
System.out.println();
}
}
/**
* 행, 열, 정방향(1)/역방향(-1) 입력 받아 출력
*
* 행 입력 : 3
* 열 입력 : 6
* 정방향(1)/역방향(-1) : -1
*
* 654321
* 654321
* 654321
*/
public void method3() {
System.out.print("행 입력 :");
int row = sc.nextInt();
System.out.print("열 입력 :");
int col = sc.nextInt();
System.out.print("정방향(1)/역방향(-1) :");
int direction = sc.nextInt();
for(int x =1; x <= row; x++) { //행
if(direction == 1) {
for(int y = 1; y <= col; y++) {
System.out.print(y); // 정방향
}
}else {
for(int y = col ; y >= 1; y--) {
System.out.print(y); // 역방향
}
}
System.out.println(); // 행 출력 완료 -> 줄바꿈
}
System.out.println("-------------------------------");
// 정방향 초기화
int start = 1;
int end = col;
if(direction == -1) { // 역방향
start = col;
end = 1;
}
for(int x = 1 ; x <= row ; x++) {
for(int y = start ; ; y += direction) {
if(direction == 1 && y <= end) {
System.out.print(y);
continue;
}
if(direction == -1 && y >= end) {
System.out.print(y);
continue;
}
break;
}
System.out.println(); // 줄바꿈
}
}
/** 다음 모양 출력 하기
*
* (0,0) (0,1) (0,2)
* (1,0) (1,1) (1,2)
* (2,0) (2,1) (2,2)
*/
public void method4() {
for(int row = 0; row < 3 ; row++) { // 0~2행(1번칸)
for(int col = 0; col < 3 ; col++) { // 0~2열(2번칸)
System.out.printf("(%d,%d)", row, col);
}
System.out.println(); // 줄바꿈
}
}
/** 다음 모양 출력 하기
*
* (0,0)
* (1,0) (1,1)
* (2,0) (2,1) (2,2)
*/
public void method5() {
for(int row = 0; row < 3 ; row++) { // 0~2행(1번칸)
for(int col = 0; col < row+1 ; col++) { // 0~2열(2번칸)
System.out.printf("(%d,%d)", row, col);
}
System.out.println(); // 줄바꿈
}
}
/** 다음 모양 출력 하기
*
* (0,0) (0,1) (0,2)
* (1,0) (1,1)
* (2,0)
*/
public void method6() {
for(int row = 0; row < 3 ; row++) { // 0~2행(1번칸)
for(int col = 0; col < 3 - row ; col++) { // 0~2열(2번칸)
System.out.printf("(%d,%d)", row, col);
}
System.out.println(); // 줄바꿈
}
}
/** [do ~ while]
* - 최소 1회 이상 반복하는 while문
*/
public void method7() {
int num = 10;
do{
System.out.println("반복 출력");
}while(num < 10);
System.out.println("---- 종료 ----");
}
/**
* 0이 입력될 때 까지 입력된 모든 수의 합
*/
public void method8() {
int input = 0; // 숫자를 입력 받을 변수
int sum = 0; // 합계
do{ System.out.print("숫자 입력 : ");
input = sc.nextInt();
sum += input;
}while(input != 0);
System.out.println("합계 : " + sum);
}
}
LoopRun
package loop.run;
import loop.ex.LoopEx1;
import loop.ex.LoopEx2;
/**
* 실행용 클래스
*/
public class LoopRun {
public static void main(String[] args) {
// LoopEx1 ex1 = new LoopEx1();
// ex1.method1();
// ex1.method2();
// ex1.method3();
// ex1.method4();
// ex1.method5();
// ex1.method6();
// ex1.method7();
// ex1.method8();
LoopEx2 ex2 = new LoopEx2();
// ex2.method1();
// ex2.method2();
// ex2.method3();
// ex2.method4();
// ex2.method5();
// ex2.method6();
// ex2.method7();
ex2.method8();
}
}
arrayEx1 ( 배열)
package ex;
import java.util.Arrays;
import java.util.Scanner;
public class ArrayEx1 {
Scanner sc = new Scanner(System.in);
/* JavA 배열 (자료구조)
*
* - 같은 자료형 변수를 하나의 묶음으로 다루는 것
*
* - 생성된 배열의 요소(묶여진 배열)는
* 인덱스 번호로 구분된다! (index는 0부터시작)
*
* - 생성된 배열을 활용하기 위해서는
* 배열을 참조하는 "참조형 변수"를 이용한다!
*
* [참조형 변수]
* - 값 X, 주소를 저장하는 변수
*
* - 변수 호출 시 값 반환 X
* ->저장된 주소로 찾아가
* 해당 위치의 배열/객체를 참조
*
* - 기본자료형 8개를 제외한 나머지는 모두 참조형!
*
*/
/**
* 배열 선언, 할당, 초기화
*/
public void method1() {
// 배열 선언
int[] arr; // Stack 메모리 영역에
// int[] 자료형을 참조할 변수 arr을 선언
// 배열 할당(생성)
arr = new int[4];
// Heap 메모리 영역에
// int 4칸짜리 배열을 할당(생성)한 후
// 생성된 배열의 주소를 arr에 대입
// -> arr 변수를 이용해 생성된 배열을 참조할 수 있다!
// 배열 초기화
// -> 배열 요소에 값 대입
// 1) 배열을 생성 하자마자
// 각 칸에는 무슨 값이 저장되어 있을까?
// -> 각 자료형의 기본값이 저장되어 있음!!
// -> int : 0 / double : 0.0 / long : 0L
// float : 0.0f / char : '\u0000' / boolean : false
System.out.println( arr ); // 배열의 해시코드(주소 비슷)
System.out.println("arr[0] : " + arr[0]); // 0
System.out.println("arr[1] : " + arr[1]); // 0
System.out.println("arr[2] : " + arr[2]); // 0
System.out.println("arr[3] : " + arr[3]); // 0
// 2) index별로 값 초기화
arr[0] = 1000;
arr[1] = 20;
// arr[2] = 3.14; // int 배열 요소에 double 대입 불가!
arr[2] = 3;
arr[3] = 500;
// for 문을 이용해 arr에 저장된 값 모두 출력
for(int i = 0; i <4 ; i++) {
System.out.printf("arr[%d]의 값: %d \n", i, arr[i] );
}
// ----------------------------------------------------
/* Java의 배열은 크기 조절 X */
arr[4] = 999;
// ArrayIndexOutOfBoundsException : 배열 인덱스 범위 초과 예외
}
/**
* 정수 4개를 입력받아
* 배열 요소에 차례대로 대입 후
* 저장된 값 한번에 출력하기
*/
public void method2() {
// 정수 4칸짜리 배열을 생성하여
// 배열 주소를 arr 변수에 대입
int[] arr = new int[4];
// arr. length == 배열 길이
for(int i = 0; i < arr.length; i++) {
System.out.print(i + "번 인덱스 : ");
arr[i] = sc.nextInt(); // 입력 값을 배열에 대입
}
// java.util.Arrays 클래스 : 배열의 유용한 기능을 모아둔 클래스
// Arrays.toString(배열명) :
// 배열에 저장된 값을 하나의 문자열로 반환
String str = Arrays.toString(arr);
System.out.println(str);
System.out.println("<<종료>>");
}
// debug : 프로그램 수행이 정상적으로 이루어 지지 않은 경우
// 원인을 파악하기 위해 추적하는 것
// + 해결 까지 !
/* [이클립스 디버그 모드 사용 방법]
*
* 1) 확인하고 싶은 코드 다음 줄에 break point 추가
*
* 2) debug 모드로 실행 (벌레 아이콘 또는 F11)
*
* 3) debug 화면으로 switch
*
* 4) resume (F8 키)를 눌러가며 순서대로 확인
*
* */
/**
* 배열 선언과 동시에 초기화 + 난수 활용
*
* [배열 선언 + 초기화]
* JS> let arr = ["aaa", "bbb", "ccc"];
* Java> String[] arr = {"aaa", "bbb", "ccc"};
*
*/
public void method3() {
// 과목이 작성되어 있는 배열 생성
String[] subjects = {"HTML", "CSS", "JS", "Java", "Java", "Java", "Java", "Java"};
// 배열 index 범위의 난수 생성
int ran = (int)(Math.random() * subjects.length);
System.out.printf("당신이 시험볼 과목은 %s 입니다", subjects[ran]);
}
/**
* 5칸짜리 char 배열을 만들어
* 각각의 배열 요소에 이력된 값을 대입
*
* 입력완료 후
* 저장된 값을 역순으로 출력
*/
public void method4() {
char[] arr = new char[5];
for(int i=0 ; i<arr.length ; i++ ) {
System.out.print(i + "번째 요소 : ");
arr[i] = sc.next().charAt(0);
// 입력된 문자열의 0번째 문자(char)를 반환
// -> char 입력 방법
}
// a p p l e
// -> e l p p a
// 마지막 인덱스부터 0까지 1씩 감소
for(int i = arr.length - 1; i >=0 ; i-- ) {
System.out.print(arr[i] + " ");
}
}
}
ArrayEx2 ( 배열인데 중요한 ★☆ 얕은복사, 깊은복사 ☆★)
package ex;
import java.util.Arrays;
public class ArrayEx2 {
/** 얕은 복사
* - 참조형 변수가 가지고 있는
* "주소"만 복사하는 것
*
* - 서로 다른 변수가
* 같은 배열/객체를 참조하기 떄문에
* 같은 값을 공유!!!!
*
*/
public void method1() {
// 원본 배열
int[] arr = {10,20,30,40,50};
// 얕은 복사한 배열 선언
int[] copyArr = arr;
System.out.println("[변경 전]");
System.out.println("arr :" + Arrays.toString(arr) );
System.out.println("copyArr :" + Arrays.toString(copyArr) );
// 복사한 배열의 값 변경
copyArr[3] = 4444;
copyArr[4] = 5555;
System.out.println("[변경 후]");
System.out.println("arr :" + Arrays.toString(arr) );
System.out.println("copyArr :" + Arrays.toString(copyArr) );
// 복사한 배열을 수정했지만
// 원본도 같이 수정됨
// -> 얕은 복사는 주소만 복사해서
// 같은 배열을 참조하게 만들어 값을 공유함
}
/**
* 깊은 복사
* - 원본 배열/객체가 가지고 있는 값을
* 똑같이 복사한 배열/객체를 만드는 것
* (복제의 개념)
*
* - 새로운 배열/객체가 만들어지는 것으로
* 원본과는 독립되어 있음
* -> 값을 공유하지 않는다!!!
*
*/
public void method2() {
// 원본 배열
int[] arr = {10,20,30,40,50};
// 깊은 복사 1 : for문 이용
int[] copyArr = new int[arr.length]; // 원본크기 새 배열 생성
// 원본 배열 요소의 값을
// 같은 인덱스의 복사된 배열 요소에 대입
for(int i=0 ; i<arr.length; i++) {
copyArr[i] = arr[i];
}
// 깊은 복사 2 : System.arraycopy() 이용
// System.arraycopy(원본 배열명, 원본 복사 시작 인덱스,
// 복사 배열명, 복사 배열의 삽입 시작 인덱스,
// 복사 길이)
int[] copyArr2 = new int[arr.length];
System.arraycopy(arr, 0, copyArr2, 0, arr.length);
// 원본, 복사1, 복사2의 0번 인덱스 값을 변경
arr[0] = 11111;
copyArr[0] = 22222;
copyArr2[0] = 33333;
System.out.println("arr + " + Arrays.toString(arr));
System.out.println("copyArr + " + Arrays.toString(copyArr));
System.out.println("copyArr2 + " + Arrays.toString(copyArr2));
}
}
ArrayRun (실행용)
package run;
import ex.ArrayEx1;
import ex.ArrayEx2;
public class ArrayRun {
public static void main(String[] args) {
ArrayEx1 ex1 = new ArrayEx1();
// ex1.method1();
// ex1.method2();
// ex1.method3();
// ex1.method4();
ArrayEx2 ex2 = new ArrayEx2();
// ex2.method1();
ex2.method2();
}
}
오늘까지는 자바 루프와 배열에 대해 배웠다.
내일은 루프 나머지 마무리 조금하고
객체 들어간다고 하시는데
객체부터가 진정한 자바라고 하시니 좀 무섭다..화이팅