- 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를 누적합 해주면 된다!
- 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가 나오게된다~!
기본타입 : 정수, 실수, 논리 // (int, double, boolean)
변수에 값이 저장됨
참조타입 : 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
str2 = "다른 문자열";
str2 = null; //일부러 null을 넣어서 확인하는 경우있어!
//int x = null; //null은 참조타입 변수에 참조하는게 없다는 의미로 사용하는것!
//기본타입에는 null을 사용할 수 없다!
=> 초기값으로 null값을 사용할 수 있다!
=> null : 주소가 없다. 참조하고 있지 않다.
=> 값이 있긴 한거야!!
// 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문 누적합과 같은 방식으로 작성한다!
int [] intArray = new int[10];
=> 저렇게 만들면 선언만 한 상태이기때문에 저장된 값이 없다!
※기본 초기값※
int -> 0
double -> 0.0
boolean -> false
String -> null
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로 바꿔주면 돼!
String[] fruitsArray = {"오렌지", "귤", "감귤", "조생귤", "한라봉"};
배열의 길이는?
System.out.println(fruitsArray.length);
조생귤에 접근해서 출력하려면?
System.out.println(fruitsArray[3]);
저장된 값 중에 감귤을 천혜향으로 변경하려면?
fruitsArray[2] = "천혜향"
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으로 나오게 되겠죠~!
- 자연수 (정수) 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]로 적어준다!
- +자연수 (정수) 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차원 배열 int[][] ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅁㅁ
int[][] arr1 = new int[3][4];
=> 2차원 배열 3행 4열 (값은 아직 저장x)
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] + " ");
}
}
=>