유디의 공간정보·개발일기
H2. 0719_ JAVA 기초2, 응용 과제 본문
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 |