day12

상은👸·2023년 9월 12일
0

뚜벅뚜벅 첫번째

목록 보기
11/26
post-thumbnail

✏️연습문제 5

  1. 1+ (1+2)+ (1+2+3)+(1+2+3+4)+...+(1+2+3+...+10) ..결과 계산 최종결과는?

=>

int sum = 0;
for (int i=1; i<=10; i++) {
	for (int j=1; j<=i; j++) {
    	sum = sum + j;
    }
}
System.out.println(sum);

=> i:1 j:1
i:2 j:12
i:3 j:123
i:4 j:1234
이런식으로 나오게 한 다음 j를 누적합 해주면 된다!

✏️연습문제 6

  1. 1+(-2)+3+(-4)+... , 과 같은 식으로 계속 더해나갔을 때 몇까지 더해야 총합이 100이상인지 찾으시오.
    100 이상이된 시점의 누적합이 얼마인지 + 얼마까지 더해서 100이 넘었는지 찾으세요.

=>

int n=0;
int sum=0;

while (true) {
	if (sum>=100) {
    	break;
    }
    
    //n=199일때, sum = -99+199=100이 된다
    if (n%2==0) { 
    	sum = sum - i;
    } else {
    	sum = sum + i;
    }
    
    // 위에서 sum이 100이 되면 마지막 연산값이 199인 상태에서 나가야되는데
    // 밑에서 n++를 해버리기때문에 n이 200이 되서 나가버린다!
    n++; // 증감 
}
System.out.println("누적합 : " + sum);
System.out.println("마지막 연산 값 : " + (n-1) );

=> while문으로 작성했을때 증감을 제일 밑으로 깔아주고
누적합이 100이상일때 빠져나가는 식을 가장 먼저 깔아주게되면 n이 199일때 sum이 100이 되니까 그대로 나가야되는데 n++; 때문에 n이 200이 된 상태에서 break;를 만나게된다

=> 따라서 마지막 연산값 출력값을 n-1로 잡아주거나

int n=0;
int sum=0;

while (true) {
    
    if (n%2==0) { 
    	sum = sum - i;
    } else {
    	sum = sum + i;
    }
    
    if (sum>=100) {
    	break;
    }
    
    n++; // 증감 
}
System.out.println("누적합 : " + sum);
System.out.println("마지막 연산 값 : " + n );

=> 이런식으로 sum이 100이 되자마자 바로 break;로 나갈 수 있게 식을 만들어주면 출력값을 n으로 둬도 마지막 연산값은 199가 나오게된다~!

참조타입

기본타입 vs 참조타입

기본타입 : 정수, 실수, 논리 // (int, double, boolean)
변수에 값이 저장됨

참조타입 : String, 배열, 클래스, 인터페이스, (열거)
변수에 주소값이 저장됨

String

String s1 = "";   //공백인 문자열을 가리키고 있는 중
String s2;		  //아무것도 없는 상태 (선언만 한 상태)
String s3 = null; //현재 아무것도 참조하고 있지 않다
		
System.out.println(s1); // 공백인 문자열값이 들어있는 상태!
//System.out.println(s2); // 초기화가 안된 상태!
System.out.println(s3); // null값이 들어있긴 한 상태!
String str1 = "자바";
Scanner scan = new Scanner(System.in);
//String str2 = scan.nextLine(); //입력받기 -> 자바 //다른 새로운 공간이 만들어짐
String str2 = new String("자바"); //new : 새로운공간 확보 하면서 "자바"라는 내용으로 새로 만듬! //str1 의 "자바"랑 다른 주소!
		
System.out.println(str1==str2); //번지 주소 비교 -> false
		System.out.println(str1.equals(str2));	//값 문자열 비교 -> true

null

str2 = "다른 문자열";
str2 = null; //일부러 null을 넣어서 확인하는 경우있어!
		
//int x = null; //null은 참조타입 변수에 참조하는게 없다는 의미로 사용하는것!
//기본타입에는 null을 사용할 수 없다!

=> 초기값으로 null값을 사용할 수 있다!
=> null : 주소가 없다. 참조하고 있지 않다.
=> 값이 있긴 한거야!!

배열

1. 배열

  • 같은 타입의 데이터 여러개를 보관할 수 있는 변수
  • 연속된 공간을 사용하고, 각 데이터 위치에 인덱스를 통해서 접근이 가능!
  • 배열의 길이는 한번 생성한 이후에는 변경 불가능

2. 배열 변수 만드는 법!!

// 5명의 점수

1. int[] scores = {80, 90, 100, 85, 75};
	//이걸쓰자!
    
2. int[] scoreArray = new int[5];
	//선언만 한 상태! 값이 아직 안들어감
	//이때는 scoreArray[0][1][2][3][4]
    //따로 값을 저장해줘야한다!
    
3. scoreArray = new int [] {80, 90, 100, 85, 75};

//다 각각 다른 공간이다!! 만들때마다 다른공간으로 생김!

// 5명 점수 합

int sum = 0;
for (int i=0; i<5; i++) { 				

	sum = sum + scores[i];
}
System.out.println("5명 점수의 합 : " + sum);

=> for문 누적합과 같은 방식으로 작성한다!

3. 배열 선언 사용 ( 선언만 한 상태!)

int [] intArray = new int[10];

=> 저렇게 만들면 선언만 한 상태이기때문에 저장된 값이 없다!

※기본 초기값※
int -> 0
double -> 0.0
boolean -> false
String -> null

4. 배열의 길이 확인

int[] scores = {70, 80, 75, 95, 90, 100, 95};
int sum = 0;
for (int i=0; i<scores.length; i++) { //애초에 scores.length 로 범위잡고
	sum = sum + scores[i];
  //sum = sum + i; 로 하게되면 10이 나와! //0 1 2 3 4 더하는거니까
}
System.out.println("총합 : " + sum);
System.out.println("평균 : " + ( (double)sum/scores.length));

=> scores.length는 배열의 길이를 나타낸다!

=> 따라서 i<7으로 쓰지않고 i<scores.length로 쓰면 배열 길이만큼 나오겠죠!

=> 그리고 평균구할때도 sum/7 이 아니라 sum/scores.length로 쓰면 된다!
실수까지 나타내고 싶으면 int/int니까 double/int로 바꿔주면 돼!

5. 연습문제

String[] fruitsArray = {"오렌지", "귤", "감귤", "조생귤", "한라봉"};
  1. 배열의 길이는?
    System.out.println(fruitsArray.length);

  2. 조생귤에 접근해서 출력하려면?
    System.out.println(fruitsArray[3]);

  3. 저장된 값 중에 감귤을 천혜향으로 변경하려면?
    fruitsArray[2] = "천혜향"

  4. fruitsArray 에서 오렌지 감귤 한라봉만 출력하세요.

for (int i=0; i<fruitsArray.length; i=i+2) {
System.out.println(fruitsArray[i]);
}

※조심※

for (int i=0; i<fruitsArray.length; i++) {
	System.out.println((i+1)+"번째 과일 : " + fruitsArray[i]);
}

=> i:0~4, index:0~4, 순번:1~5
=> [1] 번째 과일 : 오렌지 [0]
이렇게 나오게하려면 번째과일 앞에 i가 +1이 되야 1번째로 나오겠지!?

왜냐면 인덱스가 0부터 시작하니까 인덱스가 0인 과일이 1번째 과일이 되야하니까!

!!!!값이 같은 코드!!!!

for (int i=1; i<=fruitsArray.length; i++) {	
	System.out.println(i+"번째 과일 : " + fruitsArray[i-1]);
}

=> 이 코드에서는 i=1로 잡아놓고 시작하니까 인덱스가 0부터 나오게 하려면 fruitsArrray[i] 를 fruitsArrray[i-1] 을 해줘야 1이 0으로 나오게 되겠죠~!

✏️연습문제

  1. 자연수 (정수) 5개의 수를 차례대로 입력 받는다.
    몇번째 수인가요? : 그에 해당하는 수를 출력
    ex) 10 20 30 50 90
    몇번째 수인가요? 5
    결과 : 90
Scanner scan = new Scanner(System.in);
System.out.print("자연수(정수) 5개의 수를 입력하세요 : ");

int[] numArr = new int[5];

for (int i=0; i<numArr.length; i++) {
	numArr[i] = scan.nextInt();
}

System.out.print("몇번째 수인가요? : ");
int findNum = scan.nextInt();


System.out.println("결과 : " + numArr[fidnNum-1]);

=>
int input1 = scan.nextInt();
int input2 = scan.nextInt();
int input3 = scan.nextInt();
int input4 = scan.nextInt();
int input5 = scan.nextInt();
이렇게 일일이 쳐서 입력받는 방법도 있지만!

=>
int[] numArr = new int[5];
numArr[0] = scan.nextInt();
numArr[1] = scan.nextInt();
numArr[2] = scan.nextInt();
numArr[3] = scan.nextInt();
numArr[4] = scan.nextInt();
먼저 배열 정리해놓고 또 일일이 값 저장하는 방법도 있지만!

=>
int[] numArr = new int[5];

for (int i=0; i<numArr.length; i++) {
numArr[i] = scan.nextInt();
} // 0 1 2 3 4 다 값 저장되게 된다!!!
이렇게 쓰게되면 훨씬 짧아지고 보기좋겠지?

=> 그리고 나서 몇번째 수인가요에 대한 출력은
numArr[]이 나와야 하고
입력받는 변수 findNum이 들어가면
numArr[findNum] : 인덱스 01234가 들어가게 되니까 12345가 출력될수있게 -1을 해준다!

=> 그래서 numArr[findNum-1]로 적어준다!

✏️연습문제

  1. +자연수 (정수) 5개의 수를 차례대로 입력 받는다.
    받은후에 순서를 거꾸로 출력하세요.
    ex) 1 2 3 4 5
    결과 : 5 4 3 2 1

Scanner scan = new Scanner(System.in);
System.out.print("자연수(정수) 5개의 수를 입력하세요 : ");

int[] numArr = new int[5];

for (int i=0; i<numArr.length; i++) {
	numArr[i] = scan.nextInt();
}

for (int i=4; i>=0; i--) {
	System.out.println(numArr[i] + " ");
}

=> 위와 같이 배열 선언하고 값저장함과 동시에 입력받기하고

=> 거꾸로 출력하려면 입력 인덱스를 뒤집어서 출력하게 하면 된다!

2차원 배열

2차원 배열 int[][] ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅁㅁ

1.

int[][] arr1 = new int[3][4];

=> 2차원 배열 3행 4열 (값은 아직 저장x)

2.

int[][] arr2 = { {1,2,3}, {4,5,6}, {7,8,9} };

=> 2차원 배열 3행 3열
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

※중첩반복문과 연결!※

int[][] arr2 = { {1,2,3}, {4,5,6}, {7,8,9} };

-> for (int i=0; i<3; i++ {
	for (int j=0; j<3; j++ {
    System.out.print(arr2[i][j] + " ");
	}
}

=>

2차원 배열의 길이

  • 1차원 배열 -> arr = new int[3];
    arr.length -> 해당 배열의 길이
  • 2차원 배열 -> arr = new int[3][4];
    arr.length -> 행의 길이
    arr[0].length -> 0행의 열의 길이
profile
뒤죽박죽 벨로그

0개의 댓글

관련 채용 정보