** 실습1 **
/* 7
문제)정수 5개를 입력받을 배열을 선언한 후 정수 5개를 입력받아 배열에 저장한 후
배열복사를 통해 크기가 2배인 배열에 복사하고 언래 배열 크기뒤부터 다시 입력
5개를 받아 출력하는 프로그램 작성.
단, 추가 입력까지 모두 한 후에 배열 복사 진행.
입력예)10 20 30 40 50 (arr에 입력)
출력예)arr.length : 5 (arr로 출력)
10 20 30 40 50
입력예)1 2 3 4 5 (tmp에 입력)
배열복사 후 출력
최종출력예)10 20 30 40 50 1 2 3 4 5 (arr로 출력)
*/
// * 참조형 변수는 초기값이 null로 세팅된다.*
int[] arr = new int[5];
int i;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = scn.nextInt();
}
System.out.printf("arr. length : %d \n", arr.length);
for(i = 0 ; i < arr.length ; i++)
{
System.out.printf("%d ", arr[i]);
}
int[] tmp = new int[arr.length * 2];
for(i = 0 ; i < arr.length ; i++)
{
tmp[i] = arr[i];
}
for(i = arr.length ; i < tmp.length ; i++)
{
tmp[i] = scn.nextInt();
}
//배열 복사
arr = tmp;
System.out.println("arr.length ; " + arr.length);
for(i = 0 ; i < arr.length ; i++)
{
System.out.printf("%d ", arr[i]);
}
** 실습2 (랜덤) **
//* 2 랜덤 Math.random() //double형으로 0.0이상 1.0미만 사이 값 반환
//실행결과)012345789
// 582164930(결과-랜덤)
int[] arr = new int[10];
int i, n, tmp;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = i;
System.out.print(arr[i]);
}
System.out.println();
for(i = 0 ; i < 100 ; i++)
{
n = (int)(Math.random() * 10); //0~9사이 하나의 값
//Math = 클래스, .random = 메소드 / (int)강제형변환
System.out.printf("%d ", n);
tmp = arr[0];
arr[0] = arr[n];
arr[n] = tmp;
}
System.out.println();
for(i = 0 ; i < arr.length ; i++)
{
System.out.printf("%d", arr[i]);
}
** 실습3 **
/* 3
문제)로또번호 발생기
배열에 1부터 45까지 값을 저장한 후에 0번째와 random 배경의 값을 바꾸는데
횟수를 100번 실행하고 최종 로또번호는 앞에서부터 6개 출력(배열에 0~5번째 값)
단, (int)(Math.random() * 45) //0~44사이 값중 한 값 생성
*/
int[] arr = new int[45];
int i, n, tmp;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = i + 1;
}
for(i = 0 ; i < 100 ; i++)
{
n = (int)(Math.random() * 45);
tmp = arr[0];
arr[0] = arr[n];
arr[n] = tmp;
}
for(i = 0 ; i < 6 ; i++)
{
System.out.printf("%d ", arr[i]);
}
** String클래스 (참조형) **
- 문자배열인 char배열과 같은 의미 (char : 한칸한칸 문자저장 / String : 한칸에 문자열 저장)
- char 배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유
: String클래스가 char배열에 기능(메서드)를 추가한 것이기 때문임
- char배열과 String클래스의 중요한 차이는 String객체는 읽을 수만 있을 뿐 내용을 변경할 수 없음.(StringBuffer 클래스 사용)
ex) char[] a = new char[5];
a[0] = 'A';
a[1] = 'B';
a[3] = 'C';
와
String b = "ABC";
결과 값은 같다
char[] a = new char[5]; a[0] = 'A'; a[1] = 'B'; a[3] = 'C'; |
String b = "ABC"; | 결과값 동일 |
String a = "abc"; a = "abcde" |
읽을 수는 있지만 주소값이 서로 다르기 때문에 바뀌는건 아니다. 내부적으로 배열 복사가 일어난다. |
String str = "Java:;
str = str + "8"; //"Java8" 이라는 새로운 문자열이 str에 저장
System.out.println(str); // "Java8"
문자열 str의 내용이 변경되는 것 같지만, 문자열은 변경할 수 없으므로 새로운 내용의 문자열이 생성됨.
(자료가 잘 변경되는 것에 String을 잘 사용하지 않는 이유)
* String 클래스의 중요 메서드 *
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당위치(index)에 있는 문자를 반환한다. |
int length() | 문자열의 길이를 반환한다. |
String substring(int from, int to) | 문자열에서 해당범위(from~to)에 있는 문자열을 반환한다 (to는 범위에 포함되지 않음) |
boolean equals(Object obj) | 문자열의 내용이 obj와 같은지 확인한다. 같으면 true / 다르면 flase 메서드 앞의 boolean : 반환 타입 |
char[] toCharArray[] | 문자열을 문자배열(char[])로 변환해서 반환함 |
* String 배열 *
- 3개의 문자열을 담을 수 있는 배열생성
String[] name = new String[3];
String[] name = new String[3];
String[] name = new String[3]; neame[0] = new String("Kim"); neame[2] = new String("Park"); neame[3] = new String("Yu"); |
String[] name = new String[3]; neame[0] = "Kim" neame[1] = "Park" neame[2] = "Yu" |
** String 클래스 **
//String 클래스
String str = "java programing";
char c = str.charAt(0); //String클래스의 charAt(인덱스값)메서드
char[] ch = {'j','a','v','a'}; //배열
System.out.println("str.charAt(0) : " + c);
System.out.println("str.charAt(5) : " + str.charAt(5));
System.out.println("str.length() : " + str.length()); //-> str.length() : 15
System.out.println("str.substring() : " + str.substring(3)); //-> str.substring() : a programing
System.out.println("str.substring() : " + str.substring(1, 8)); //-> str.substring() : ava pro
System.out.println("str.equals(1) : " + str.equals("java programing")); //-> str.equals(1) : true
System.out.println("str.equals(2) : " + str.equals("java")); //-> str.equals(2) : false
int num = 10;
String str1 = String.valueOf(num);
System.out.println(str1 + ", length : " + str1.length()); //-> 10, length : 2
* String 배열 *
//String 배열
String[] names = {"kim", "park", "lee"};
String name = "kimparklee";
int i;
for (i = 0 ; i < names.length ; i++)
{
System.out.println("names[" + i + "] : " + names[i]);
}
String tmp = names[2];
System.out.println("tmp : " + tmp);
names[0] = "yu";
for (i = 0 ; i < names.length ; i++)
{
System.out.println("names[" + i + "] : " + names[i]);
}
//names[0] - kim, yu 가 가리키는 주소는 다르다.
// char배열과 String클래스 변환
//char배열과 String클래스 변환
String str = "ABCDE";
int i;
char ch;
for(i = 0 ; i < str.length() ; i++)
{
ch = str.charAt(i);
System.out.println("str.charAt(" + i + ") : " + ch);
}
//String을 char[]로 변환
char[] chArr = str.toCharArray();
System.out.println(chArr + ", length : " + chArr.length);
** 다차원 배열 **
선언 방법 | 선언 예 |
타입[][] 변수이름; | int[][] score; |
타입 변수이름[][]; | int score[][]; |
타입[] 변수이릅[]; //잘 사용 안함 | int[] score[]; |
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열
score[0][0] | score[0][1] | score[0][2] |
score[1][0] | score[1][1] | score[1][2] |
score[2][0] | score[2][1] | score[2][2] |
score[3][0] | score[3][1] | score[3][2] |
- 2 차원 배열 초기화
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}};
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
* 2차원배열(다차원 배열)
/* 4 2차원 배열의 초기화 설정은 한 후 실행
실행결과)score[0][0] = 100
score[0][1] = 100
score[0][2] = 100
score[1][0] = 20
score[1][1] = 20
score[1][2] = 20
score[2][0] = 30
score[2][1] = 30
score[2][2] = 30
score[3][0] = 40
score[3][1] = 40
score[3][2] = 40
sum = 570
*/
int[][] score = new int[][] {{100, 100, 100},{20, 20, 20},{30, 30, 30},{40, 40, 40}};
int i, j, sum = 0;
for(i = 0 ; i < score.length ; i++)
{
for(j = 0 ; j < score[i].length ; j++)
{
System.out.printf("score[%d][%d] = %d \n", i, j, score[i][j]);
sum += score[i][j];
}
}
System.out.println("sun = " + sum);
** 실습5 **
/* 5
문제)String배열을 이용한 단어 맞추기.
배열에 "chair", "의자"
"computer", "컴퓨터"
"integer", "정수"로 선언
입.출력예)chair의 뜻은>책상
틀력습니다. 정답은 의자입니다.
computer의 뜻은?컴퓨터
정답입니다.
integer의 뜻은?정수
정답입니다.
단, 문자연 비교는 equals 매서드 사용.(예 : a.equals("의자"))
equals 메서드의 인수값을 2차원 배열로 표현
*/
String[][] words = {{"chair", "의자"},{"computer", "컴퓨터"},{"integer", "정수"}};
int i, j;
String w;
for(i = 0 ; i < words.length ; i++)
{
System.out.printf("%s의 뜻은?", words[i][0]);
w = scn.nextLine();
if(w.equals(words[i][1]))
{
System.out.println("정답입니다.");
}
else
System.out.println("틀렸습니다. 정답은 " + words[i][1] + "입니다.");
}
** 실습6 **
/* 6
문제)5명의 학생의 3과목 점수를 더해서 각 학생의 총점과 평균을 계산하고,
과목별 총점을 계산하는 프로그램 작성.
단, 과목은 score 2차원배열에 저장하고 출력시 번호는 %3d, 각 점수는 %5d, 평균은 %5.1f 적용 // 소숫점밑 1자리와 소숫점을 포함한 5자리
실행결과)번호 국어 영어 수학 총점 평균
===================================
1 100 100 100 300 100.0
2 20 20 20 60 20.0
3 30 30 30 90 30.0
4 40 40 40 120 40.0
5 50 50 50 150 50.0
===================================
총점 240 240 240
*/
int[][] score = {{100, 100, 100},{20, 20, 20},{30, 30, 30},{40, 40, 40},{50, 50, 50}};
int sum , i, j;
int totalKor = 0, totalEng = 0, totalMath = 0;
double avg;
System.out.println(" 번호 국어 영어 수학 총점 평균");
System.out.println("===================================");
for(i = 0 ; i < score.length ; i++)
{
System.out.printf(" %d ", i+1);
sum=0;
for(j = 0 ; j < score[i].length ; j++)
{
sum += score[i][j];
System.out.printf("%5d ", score[i][j]);
}
totalKor += score[i][0];
totalEng += score[i][1];
totalMath += score[i][2];
avg = (double)sum/score[i].length;
System.out.printf("%5d %5.1f ", sum, avg);
System.out.println();
}
System.out.println("===================================");
System.out.printf(" 총점%5d %5d %5d", totalKor, totalEng, totalMath);
** 실습7 **
/* 7
문제)정수 배열 5행 5열로 선언한 후 각 배열 위치에 1로 시작해서 1씩 증가하는 값을
저장한 후 5행 5열을 출력하는 프로그램
출력예) 1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
*/
int[][] arr = new int[5][5];
int i, j, k = 1;
for(i = 0 ; i < arr.length ; i++)
{
for(j = 0 ; j < arr[i].length ; j++)
{
arr[i][j] = k;
k++;
System.out.printf("%-3d ", arr[i][j]);
}
System.out.println();
}
** 실습8 **
'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글
11/14 수업 (12일차) (1) | 2023.11.14 |
---|---|
11/13 수업 (11일차) (2) | 2023.11.13 |
11/09 수업 (9일차) (2) | 2023.11.09 |
11/08 수업(8일차) (0) | 2023.11.08 |
11/07 수업 (7일차) (1) | 2023.11.07 |