유디의 공간정보·개발일기

H2. 0719_ JAVA 기초2, 응용 과제 본문

JAVA

H2. 0719_ JAVA 기초2, 응용 과제

55yudi 2021. 10. 31. 15:16
import java.util.ArrayList;
import java.util.Calendar;

public class myjava_0719 {

	public static void main(String[] args) {
		//java기본, SQL --> 둘을 연결함
		//Compile, Execute,
		//Data Type, Variable, Method
		//타입은 크기가 있다. 한정적인 메모리공간을 효율적으로 사용하기 위해 변수의 크기를 적절히 지정할 필요가 있다.
		//메모리, 메인메모리, 디스크
		//nano sec, milli sec
		//int, long, double, char, byte, boolean, float
		
		//int count = 500; // int-->4bytes, long-->8bytes
		
		int count = Integer.MAX_VALUE; //상수 --> 대문자_대문 4*8=32bit(01111111111...)-첫자리(=보호비트) 0은 양수, 1은 음수를 나타내줌
		System.out.println(count); //-->(출력) 2147483647
		//1. 메모리 공간을 할당받아서 count라는 이름을 참조하게 한다.
		//2. 그 메모리 공간에 500이라는 숫자를 기입한다/넣는다.
		System.out.println(Calendar.SUNDAY); //Calendar class 안에 있는 SUNDAY 상수(value)를 불러옴 (메소드가 아니다!)
		System.out.println(Integer.toBinaryString(count)); //Integer class의 함수toBinaryString(이진법) 값을 출력
		
		count = -1;
		System.out.println(Integer.toBinaryString(count));//=32개의 1이 나옴
		count = '1';//char형의 리터럴 -> char타입의 상수
		System.out.println(Integer.toBinaryString(count));
		System.out.println(count);
		
		//배열, 메서드
		//배열은 크기를 변경할 수 없다는 게 문제점, 단점
				//가변적인 크기일 경우 --> Collection API를 사용한다. : ArrayList, Vector, LinkedList
		//제어문--> if, for, while, switch
		//if : 참 또는 거짓에 따라 분기되게 함
		//for : 정해진 횟수만큼 반복할 때
		//while : 얼마나 반복해야 할 지 모를 때
		//switch : 여러 경우의 수로 분기하게 함
		
		//1+2+...+n 언제까지 더해야 백만을 초과할까?
		//변수로 무엇이 필요할까? --> 누적할 숫자, 누적값도 저장
		int count = 1;
		int sum = 0;
		while(sum <= 1000000) { //조건이 참인 동안 계속 반복해!
			sum += count++; //무한루프에 빠질 수 있으므로 내부에서 sum을 변경해야 한다.
		}
		System.out.printf("1부터 %d까지 더하면 1000000을 넘으며 그 때의 값은 %d입니다.", count-1, sum);
		//-->(출력) 1부터 1414까지 더하면 1000000을 넘으며 그 때의 값은 1000405입니다.
		
		/*
		if(count) { // ()안은 참이나 거짓으로 판정될 수 있어야 한다.
		}
		*/
		
		//과제3_방정식의 해 구하기
		for(int x = 0; x <= 10; x++) {
			for(int y = 0; y <= 10; y++) {
				if(2*x + y == 10) {
					System.out.println("x = " + x);
					System.out.println("y = " + y);
					//System.out.printf("2x+y=10의 해, x = %d, y = %d입니다.\n", x, y);
					//%d 에 각각의 값이 매핑되니까 더 편리함, \n 은 실행시킬때마다 줄을 바꿔 출력함을 의미
				}
			}
		}
		
		
		//과제4--> new class(Ex04_Solution)
		
	}
}

 

[과제4 -> Ex04_Solution]

import java.util.ArrayList;

public class Ex04_Solution {
	
	public static void main(String[] args) {
		/*
		- 1. 1부터 999까지의 100개의 임의의 수로 이루어진 배열을 생성하는 함수를
		1을 이용하여 배열을 생성한다.
		- 2. 인덱스가 홀수인 수들을 출력하는 함수
		- 3. 배열의 수들의 합을 반환하는 함수
		- 4. 가장 작은 수의 위치(인덱스)를 반환하는 함수
		- 5. 3의 배수만을 새로운 배열에 복사하여 리턴하는 함수
		
		추가
		- 배열의 수들을 한 줄에 10개씩 출력하는 함수, 이때 각 수들은 줄이 맞춰져야 함
		*/

		//1. 1부터 999까지의 100개의 임의의 수로 이루어진 배열을 생성하는 함수
		int[] list = null;
		int[] list = makeList();
		//makeList는 함수, makeList()는 함수를 '호출'한 것
		
		
		//2. 인덱스가 홀수인 수들을 출력하는 함수
		//oddNumber();
		printOddIndex(list); //컴파일 오류 이유: printOddIndex 함수를 '정의'해주지 않았기 때문 //execute, call
		
		
		//3. 배열의 수들의 합을 반환하는 함수
		//listSum();
		int sum = sumList(list); //list를 매개변수로 받음
		System.out.println("배열 내부의 합은 " + sum);
		
		//4. 가장 작은 수의 위치(인덱스)를 반환하는 함수
		//minNumber();
		int minValuePosition = findMinIndex(list);
		System.out.printf("배열에서 가장 작은 수의 위치는 %d, 그리고 값은 %d \n", minValuePosition, list[minValuePosition]);
		
		
		//5. 3의 배수만을 새로운 배열에 복사하여 리턴하는 함수
//		//numbers();
//		int[] multiples = makeNewList(list);
		
		List<Integer> list3 = makeList3(list); //_다시(07.23)
		for(int ele : list3) {
			System.out.println(ele);
		}
		
		
		//추가. 배열의 수들을 한 줄에 10개씩 출력하는 함수, 이때 각 수들은 줄이 맞춰져야 함
		printList(list);
		
	}
	
	

	//1.
	private static int[] makeList() {
		int[] result = new int[100];		//c.f. 컬렉션.size : 컬렉션의 길이
		for(int i = 0; i < result.length; i++) { //배열명.length : 배열의 크기(여기서는 100)
			int temp = (int) (Math.random()*999);
			result[i] = temp;
		}
		return result;
	}
	
	//2.
	private static void printOddIndex(int[] list) {
		//전달받은 배열 내부를 참조할 수 있는 코드
		for(int i = 0; i < list.length; i++) {
			if(i%2 == 1) {
				System.out.println(i + ".번째 : " + list[i]);
			}
		}
	}
	/*
	private static void oddNumber() {
		for(int i = 0;; i++) {
			if(i%2 == 1) {
				System.out.println(i);
			}
		}
	} */
	
	//3.
	//뭔가 일을 하는데 명령문들의 집합, 전달받는 값, 리턴을 할 수 없다.
	//전달받은 배열의 합을 리턴한다.
	private static int sumList(int[] list) {
		int sum = 0;
		for(int ele : list) { //list배열에서 하나하나 꺼내서 아랫줄을 실행하는 것
			sum += ele; //sum = sum + ele;랑 같은 것
		//for(int i = 0; i < list.length; i++) { //line75-76과 같은 의미
		//	sum = sum + list[i];
		}
		return sum;
	}
	/*
	private static int[] listSum() {
		int sum = 0;
		for(int i = 0;; i++) {
			sum += i;
			System.out.println(sum);
		}
	} */
	
	//4.
	private static int findMinIndex(int[] list) {
		int index = 0;
		int value = list[0];
		for(int i = 0; i < list.length; i++) {
			if(list[i] < value) {
				value = list[i];
				index = i;
			}
		}
		return index;
	}
	
	//5.
//	private static int[] makeNewList(int[] list) {
//		//도대체 3의 배수가 몇개나 있는지 모르기에 가변적인 배열 ArrayList
//		//일단 3의 배수가 몇개인지 체크한다.
//		int count = 0;
//		for(int ele : list) { //하나하나 꺼내서
//			if(ele%3 == 0) { //그 숫자가 3의 배수면
//				count++;	//하나씩 더해준다.
//			}
//		}
//		//체크된 수만큼 배열을 생성한다.
//		int[] result = new int[count];
//		//반복문을 통해서 3의 배수를 배열에 넣는다.
//		int index = 0;
//		for(int i = 0; i < list.length; i++) {
//			if(list[i]%3 == 0) {
//				result[index] = list[i];
//				index++;
//			}
//		}
//		//배열을 리턴한다.
//		return result;
//	}
	
	// ArrayList로 다시(07.23)
			ArrayList<Integer> result = new ArrayList<Integer>();
			for(int ele : list) {
				if(ele%3 == 0) {
					result.add(ele);
				}
			}
			//ArrayList -> Array로 conversion(구글링 참조해서 ) 근데 안됨
			Integer[] intArray = new Integer[result.size()];
			result.toArray(intArray);
			return intArray;
	
	
	/*
	private static int[] numbers() {
		for(int i = 0;;i++) {
			i = i + 1;
			ArrayList<int[]> numberArray = new ArrayList<int[]>();
						
			if(i%3 == 0) {
				numberArray.add(null);
				int[] result = numberArray.get(i);
				return result ;
			}
		}	
	} */
	
	
	//추가. 전달받은 배열을 10개씩 한 줄에 출력한다.
	private static void printList(int[] list) {
		int index = 1;
		for(int ele : list) {
			System.out.println(ele + "\t"); //\t : 들여쓰기
			
			if(index%10 == 0) {
				System.out.print("\n"); //\n : 줄바꿈
			}
			index += 1;
		}
	}
	
	
}

 

- print  : 결과값이 이어서 출력

  println  : 결과값이 한 줄씩 줄 바꿔 출력

  printf  : 문자열 " "을 일일히 쓰지 않아서 더 편리함

 

- \n : 줄바꿈

  \t : 탭 들여쓰기

 

- ele : list 의 의미

 

- 타입은 크기가 있다.

  한정적인 메모리 공간을 효율적으로 사용하기 위해 변수의 크기를 적절히 지정할 필요가 있다.

  타입 : int, long, double, char, byte, boolean, float

 

- int -> 4bytes

  long -> 8bytes

 

- 이진스트링

Integer.toBinaryString

 

'JAVA' 카테고리의 다른 글

H3-2. 0720_ JAVA 코드  (0) 2021.10.31
H3-1. 0720_ Stack/Heap영역, 변수  (0) 2021.10.31
H1. 0716_ JAVA 기초  (0) 2021.10.31
7-2. 0713_ Hashmap  (0) 2021.10.24
7-1. 0713_ Interface, Abstract class  (0) 2021.10.24