👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
지난 수업 정리
1 . 자료형 : 변수에 넣을 재료에 특성을 정하는 것
변수 선언 시 변수가 저장할 수 있는 값의 타입, 종류는 정수/실수/문자/문자열이 있다
정수는 Int 실수 float, double 문자 char 문자열 String
Int 4byte , float 4byte , double 8byte , char 2byte
2. 조건문 : 특정 조건에 대해 참 거짓을 판별 후 해당 조건에 대한 실행문을 진행하는 것
조건에 따라 참과 거짓을 각각 처리한다. If 문
3. 반복문 : 초기값과 종료시점을 정한 다음 반복 실행문을 반복하는 것 이며
거짓이 될때까지 반복하는 것입니다.
종료 시점을 정확하게 진행 하지 않을 경우 무한 루프에 빠질 수 있으니 조심해야 합니다.
반복 횟수에 따라 특정 코드를 반복해서 실행한다
초기값, 조건, 증감식을 사용한다
대표적인 반복문 for문
메서드
함수와 메서드는 다르다
다만 매개변수/기능/리턴값의 의미는 같다
메서드는 참조를 하는 것이며 , 참조를 사용하는 건 하는 건.(콤마)을 사용하여 참조한다고 생각하면 된다
예시 : Ststem.out.println
. 콤마가 2개 , 2차 참조라고 보면 된다
예시 : Scanner in = new Scanner(system.in);
in이라는 변수에 Scanner 자료형을 선언하여 초기값을 대입한다
예시 : int nowNum = in.nextInt();
in 변수를 참조하여 nextInt() 메서드를 호출하였다
메서드를 사용 시 고려사항 : 매개변수, 기능, 리턴값 을 고민해야한다
charAt()
반복문 안에 사용 할 경우 문자열의 i의 숫자만큼 지정 된 위치의 값을 리턴해준다.
리턴 값은 i자리의 문자이며, 리턴 타입은 char이다
문자열 인덱스는 0 부터 시작한다
charAt() 은 인덱스 문자로 리턴을 시켜준다.
반복문으로 모든 문자를 리턴, 리턴한 것을 출력한다
예제
for (int i = 0; i < test.length(); i++) {
char aaa=test.charAt(i);
if (aaa == 'a') {
cnt++;
}
}
쉬어가기 문제
문제 : 악성 문자를 찾아라, 오늘의 악성 문자는 m 이다.
test : "abcdmabcm"
악성 문자는 모두 몇개인지 출력하며 위치도 같이 출력한다
package Study;
public class Study01 {
public static void main(String[] args) {
String test = "abcdmabcm";
int cnt = 0;
for (int i = 0; i < 9; i++) {
char aaa = test.charAt(i);
if (aaa == 'm') {
cnt++;
System.out.println(" m 의 위치 : " + i);
}
}
System.out.println(" m 의 갯수 : " + cnt);
}
}
package Study;
public class Study02 {
public static void main(String[] args) {
String test = "aaamvvccm";
// 쌤의 풀이
// 악성문자 몇개 어디에있는지, 악성문자의 이름은 ?
// 악성문자 정의
char badChar = 'm';
// 카운팅 저장 변수
int cnt = 0;
// 바꿀 값 변수 선언
String temptest = " ";
for (int i = 0; i < 9; i++) {
char nowChar = test.charAt(i);
if(nowChar == badChar) {
cnt++; // 카운팅 누적
System.out.println("인덱스 [" + i + "] 위치에 악성문자가 있습니다."); // 악성문자 위치
temptest += "*";
} else {
temptest = temptest + nowChar;
}
}
System.out.println("악성 문자는 : " + cnt + "개 있습니다.");
test = temptest;
System.out.println(test.replace('a', 'A'));
}
}
배열
같은 자료형을 연속적으로 저장한다.
길이가 있고 인덱스는 0 부터 시작한다
고정길이는 선언할 때 길이의 값을 지정해주는 것 이다
예시 : int[] arr = new int[5] // int형 배열을 선언해주며 길이는 5로 고정시켜준다
Value : 배열에 저장된 값을 뜻하며 배열 변수 이름 [ 인덱스 번호 ] = 값; 으로 정의한다
필요한 만큼 배열크기를 선언해야 메모리 누수가 생기지 않는다
배열 활용시 입력부와 출력부를 나눠서 하면 좀 더 이해가 쉽다.
배열의 실습
package TASK;
public class task01 {
public static void main(String[] args) {
int[] number = { 10, 20, 5, 3, 25};
for (int i = 0; i < number.length; i++) {
System.out.print(number[i] + " ");
}
}
}
package TASK;
import sun.font.FontRunIterator;
import java.util.Scanner;
public class task02 {
public static void main(String[] args) {
int[] arr = new int[5]; // 5개의 Int를 받을 수 있는 공간 생성, [5]는 배열의 길이
// 인덱스는 0 ~ 4까지 있다
// 입력부 : 배열의 값을 저장하는 부
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
// 출력부 : 배열의 값을 출력하는 부
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
}
}
package TASK;
public class task03 {
public static void main(String[] args) {
// int[] arr = new int[]{};
// 초기값은 자료형에 따라 정해진다.
// Int 자료형은 초기값이 0이다.
int[] arr = {1, 2, 3, 4, 5};
// 출력부
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
package TASK;
public class task04 {
public static void main(String[] args) {
// int[] aaa = {10, 20, 5, 3, 25};
// aaa.length 는 배열의 길이
// 문제 : aaa의 배열의 모든 값의 합을 구하시오
int[] aaa = {10,20,5,3,25};
int tot = 0;
for (int i = 0; i < aaa.length; i++) {
tot += aaa[i];
}
System.out.println(tot);
}
}
오늘의 문제
package Task2;
public class task1 {
public static void main(String[] args) {
// 문제 1 : 10길이 배열을 만들고 첫번쩨 인덱스부터 0~9까지 값을 채워라. 그리고 출력하라
// 선언부
int[] arr = new int[10];
// 입력부
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
// 출력부
for (int i = 0; i < arr.length; i++) {
System.out.println("인덱스" + i + "번째 값 : " + arr[i]);
}
}
}
package Task2;
public class task2 {
public static void main(String[] args) {
//문제 2번 : int[] arr= {45,23,25,64,3,24,48};
// 배열의 길이를 출력하시오
// 배열에서 가장 큰 값의 위치와 값을 출력하세요
// 선언부
int[] arr= {45,23,25,64,3,24,48};
int max = 0; // 가장 큰 값 저장
int point = 0; // 큰 값의 위치 저장
// 출력부
System.out.println("arr의 배열 길이 : " + arr.length);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
point = i;
}
}
System.out.println("배열 중 가장 큰 값 : " + max);
System.out.println("배열 중 가장 큰 값 위치 : " + point);
}
}
package Task2;
import java.util.Scanner;
public class task3 {
public static void main(String[] args) {
// 문제 3 : 로또 번호를 저장 할 수 있는 배열을 선언하고 키보드로 6개 숫자를 입력 후 출력하라
// 선언부
int[] lottoN = new int[6];
Scanner in = new Scanner(System.in);
// 입력부
for (int i = 0; i < lottoN.length ; i++) {
System.out.print("로또 번호를 입력하세요 (6개) : ");
lottoN[i] = in.nextInt();
}
// 출력부
for (int i = 0; i < lottoN.length; i++) {
System.out.println( (i+1) + "번째 입력 로또 번호 : " + lottoN[i]);
}
}
}
package Task2;
public class task4 {
public static void main(String[] args) {
// 문제 4 : 배열의 값을 모두 더한 총 합을 구하시오
// 선언부
int[] arr = {45, 23, 25, 64, 3, 24, 48};
int tot = 0;
// 출력부
for (int i = 0; i < arr.length; i++) {
tot += arr[i];
}
System.out.println("배열의 총 합 : " + tot);
}
}
package Task2;
public class task5 {
public static void main(String[] args) {
// 문제 5 : int[] arr = {45,23,25,64,3,24,48}
// 배열에서 최대값과 최소값의 차이를 구하시오.
// 선언부
int[] arr = {45,23,25,64,3,24,48};
int max = 0;
int min = 0;
// 출력부
for (int i = 0; i < arr.length; i++) {
int tmp=0;
if(arr[i] > max){
max = arr[i];
} else {
tmp = min;
max = tmp;
min = arr[i];
}
}
System.out.println("배열의 최대 값 : " + max);
System.out.println("배열의 최소 값 : " + min);
System.out.println("최대값과 최소값의 차이 : " + (max-min));
}
}
package Task2;
public class task6 {
public static void main(String[] args) {
// 문제 6 : int[] arr = {45,23,25,64,3,24,48}
// 값이 짝수인 인덱스 와 값을 모두 출력하시오.
// 선언부
int[] arr = {45,23,25,64,3,24,48};
// 출력부
for (int i = 0; i < arr.length; i++) {
if (arr[i]%2==0) {
System.out.println(" 짝수인 값 인덱스 번호 : " + i);
System.out.println(" 값 : " + arr[i]);
}
}
}
}
package Task2;
public class task7 {
public static void main(String[] args) {
// 문제 7 : int[] arr = {1,2,3,0,0,0,1,2,3,4,5,2,2,2,2,0,0,0,0,0,3,3}
// 0은 터널이다. 가장 긴 터널의 길이를 구하시오.
// 선언부
int[] arr = {1,2,3,0,0,0,1,2,3,4,5,2,2,2,2,0,0,0,0,0,3,3};
int tmp = 0;
int cnt = 0;
// 출력부
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
cnt++;
if ( cnt > tmp ) {
tmp = cnt;
}
} else {
cnt = 0;
}
}
System.out.println("가장 긴 터널의 길이 : " + tmp);
}
}
package Task2;
public class task8 {
public static void main(String[] args) {
// 문제 8 : int[] arr = {1,2,3,0,0,0,1,2,2,4,2,2,2,2,2,0,0,0,0,0,3,3}
// 숫자는 터널의 번호이다. 터널의 길이가 가장 긴 숫자와 길이를 출력하시오.
// 선언부
int[] arr = {1, 2, 3, 0, 0, 0, 0, 0, 1, 2, 2, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3};
int maxNum = 0, maxCnt= 0, tagetNum = 0, tagetCnt = 0, maxCnt1 = 0, maxNum1 = 0;
// tagetNum = 타겟된 숫자
// tagetCnt = 타겟 숫자의 누적 개수
// maxNum = 가장 높은 누적수의 숫자
// maxCnt = 가장 높은 누적숫자의 실제 누적 개수
// 출력부
for (int i = 0; i < arr.length; i++) {
if (arr[i] == tagetNum ) { // 현재 i의 값과 타겟번호를 비교함, 같을 경우
tagetCnt++; // 타겟 누적을 증가시킴
if (tagetCnt > maxCnt) { // 타겟번호의 누적 개수와 큰 수의 누적 갯수 비교 / 타겟번호 누적개수가 더 크다면
maxCnt = tagetCnt; // 타겟 누적 횟수를 를 큰 수 누적 횟수에 입력
maxNum = tagetNum; // 타겟 번호를 큰 수 번호에 대입
} else if (tagetCnt == maxCnt){
maxCnt1 = tagetCnt;
maxNum1 = tagetNum;
}
} else { // i의 값과 타겟번호가 다를 경우
tagetNum = arr[i]; // 큰 수의 카운팅이 더 크다면 타겟넘버에 해당 인덱스i번째의 수를 대입시킴
tagetCnt = 1; // 타겟넘버의 횟수 초기화
}
}
System.out.println("가장 긴 숫자 : " + maxNum + " / " + maxNum1);
System.out.println("가장 긴 숫자의 크기 : " + maxCnt + " / " + maxCnt1);
}
}
package Task2;
public class task9 {
public static void main(String[] args) {
/*
문제 9 : int[] arr = {1,2,3,0,0,0,1,2,2,4,2,2,2,2,2,0,0,0,0,0,3,3}
숫자는 터널의 번호이다. 터널의 길이가 가장 긴 숫자와 길이를 출력하시오.
만약, 터널의 길이가 가장 긴 터널의 길이와 같은 것이 있다면 그 터널의 번호도 출력하시오.
*/
// 선언부
int[] arr = {1, 2, 3, 0, 0, 0, 1, 2, 2, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3};
int maxNum = 0, maxCnt= 0, tagetNum = 0, tagetCnt = 0, maxCnt1 = 0, maxNum1 = 0;
// tagetNum = 타겟된 숫자
// tagetCnt = 타겟 숫자의 누적 개수
// maxNum = 가장 높은 누적수의 숫자
// maxCnt = 가장 높은 누적숫자의 실제 누적 개수
// 출력부
for (int i = 0; i < arr.length; i++) {
if (arr[i] == tagetNum ) { // 현재 i의 값과 타겟번호를 비교함, 같을 경우
tagetCnt++; // 타겟 누적을 증가시킴
if (tagetCnt > maxCnt) { // 타겟번호의 누적 개수와 큰 수의 누적 갯수 비교 / 타겟번호 누적개수가 더 크다면
maxCnt = tagetCnt; // 타겟 누적 횟수를 를 큰 수 누적 횟수에 입력
maxNum = tagetNum; // 타겟 번호를 큰 수 번호에 대입
} else if (tagetCnt == maxCnt){
maxCnt1 = tagetCnt;
maxNum1 = tagetNum;
}
} else { // i의 값과 타겟번호가 다를 경우
tagetNum = arr[i]; // 큰 수의 카운팅이 더 크다면 타겟넘버에 해당 인덱스i번째의 수를 대입시킴
tagetCnt = 1; // 타겟넘버의 횟수 초기화
}
}
System.out.println("가장 긴 숫자 : " + maxNum + " , " + maxNum1);
System.out.println("가장 긴 숫자의 크기 : " + maxCnt + " , " + maxCnt1);
}
}
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/09/27🌱 배열과 단일for문을 사용한 문제풀이 (0) | 2023.09.29 |
---|---|
2023/09/26🤔 반복문과 배열 문제 풀기 (0) | 2023.09.29 |
2023/09/22🌹 단일 for 문과 if 문 실습 (0) | 2023.09.23 |
2023/09/21✏️ For문 (0) | 2023.09.21 |
2023/09/19 ✨ IF문 실습 (0) | 2023.09.21 |