package ch5;
public class Ex5_9 {
public static void main(String[] args) {
int[][] score = {
{100,100,100},
{20,20,20},
{30,30,30},
{40,40,40},
{50,50,50}
};
//과목별 총점
int korTotal = 0,engTotal=0, mathTotal=0;
System.out.println(" 번호 국어 영어 수학 총점 평균 ");
System.out.println("=============================");
for(int i=0;i<score.length;i++) {
int sum=0;
float avg=0.0f;
korTotal += score[i][0];
engTotal += score[i][1];
mathTotal += score[i][2];
System.out.printf("%3d",i+1);
for(int j=0; j<score[i].length;j++) {
sum +=score[i][j];
System.out.printf("%5d",score[i][j]);
}
avg = sum/(float)score[i].length;
System.out.printf("%5d %5.1f%n",sum,avg);
}
System.out.println("=============================");
System.out.printf("총점: %3d %4d %4d %n",korTotal,engTotal,mathTotal);
}
}
package ch5;
import java.util.Scanner;
public class Ex5_10 {
public static void main(String[] argv) {
String[][] words= {
{"chair","의자"},
{"computer","컴퓨터"},
{"integer","정수"}
};
Scanner scanner = new Scanner(System.in);
for(int i=0;i<words.length;i++) {
System.out.printf("Q%d. %s의 뜻은? > ",i+1,words[i][0]);
String tmp = scanner.nextLine();
if(tmp.equals(words[i][1])) {
System.out.printf("정답입니다! %n%n");
}else {
System.out.printf("틀렸습니다. 정답은 %s입니다. %n%n",words[i][1]);
}
}
}
}
- nextLine(): Enter를 치기 전까지 쓴 문자열 모두 반환.
- next(): space(공백)전까지 입력받은 문자열 반환
문자열 비교와 출력 - equals(), toString()
- toString(): 배열의 모든 요소를 문자열로 편하게 출력. 일차원 배열에서만 사용할 수 있다.
그럼 다차원 배열에서 toString() 사용하고 싶다면? ▶ deepToString()
- deepToString(): 배열의 모든 요소를 재귀적으로 접근하여 문자열을 구성.
- equals(): 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다름녀 false 반환. 일차원 배열에서만 사용할 수 있다.
다차원 배열에서 사용하고 싶다면? ▶ deepEquals()
배열의 복사 - copyOf(), copyOfRange()
- copyOf(): 배열 전체를 복사해서 새로운 배열을 만들어서 반환
- copyOfRange(): 배열의 일부를 복사해서 새로운 배열을 만들어서 반환한다. 지정된 범위의 끝은 사용 X
int[] arr = {0,1,2,3,4};
int[] arr_test1=Arrays.copyOf(arr, arr.length); // arr_test1=[0,1,2,3,4]
int[] arr_test2=Array.copyOf(arr,3); // arr_test2=[0,1,2]
int[] arr_test3=Array.copyOf(arr,7); // arr_test3=[0,1,2,3,4,0,0]
int[] arr_test4=Array.copyOfRange(arr, 2, 4); // arr_test4=[2,3]. 4 미포함
int[] arr_test5=Array.copyOfRange(arr,0,7); //arr_test5=[0,1,2,3,4,0,0]
배열의 정렬 sort()
배열을 정렬할 때 사용한다.
int[] arr = {3,2,0,1,4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 결과는 [0,1,2,3,4]
p. 154 [연습문제]
문제 5-3) 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.
package ch5;
public class Excercose5_3 {
public static void main(String[] args) {
int[] arr= {10,20,30,40,50};
int sum=0;
for(int i=0;i<arr.length;i++) {
sum += arr[i];
}
System.out.println("sum = "+sum);
}
}
문제 5-4) 2차원 배열 arr에 담긴 모든 값의 총합과 평균 구하는 프로그램 완성하셈
package ch5;
public class Exercise5_4 {
public static void main(String[] args) {
int[][] arr= {
{5,5,5,5,5},
{10,10,10,10,10},
{20,20,20,20,20},
{30,30,30,30,30}
};
int total = 0;
float average = 0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
total += arr[i][j];
}
}
average=total/(float)(arr.length * arr[0].length);
System.out.println("total=" + total);
System.out.println("average=" + average);
}
}
문제 5-5) 1~9 사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램 만들어라
package ch5;
import java.util.Arrays;
public class Exercise_5_5 {
public static void main(String[] args) {
int[] ballArr = {1,2,3,4,5,6,7,8,9};
int[] ball3 = new int[3];
// 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다.
for(int i=0;i<ballArr.length;i++) {
int j = (int)(Math.random() * ballArr.length);
int tmp = 0;
tmp=ballArr[i];
ballArr[i]=ballArr[j];
ballArr[j]=tmp;
}
// 배열 ballArr의 앞에서 3개의 수를 배열 ball3으로 복사한다.
ball3=Arrays.copyOf(ballArr, 3);
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]);
}
}
}
나는 배열 ballArr의 앞에서 3개의 수를 배열 ball3으로 복사하는 부분을 위와 같이 작성했으나..
자바의 정석 기초판 답지에서는 다음과 같이 쓰여있더라.
System.arraycopy(ballArr,0, ball3,0,3);
System.arraycopy(src,srcPos,dest,destPos,length)
문제 5-6) 단어의 글자위치를 섞어서 보여주고, 원래의 단어를 맞추는 예제.
package ch5;
import java.util.Scanner;
public class Exercise5_6 {
public static void main(String[] args) {
String[] words = {"television","computer","mouse","phone"};
Scanner scanner = new Scanner(System.in);
for(int i=0; i<words.length; i++) {
char[] question = words[i].toCharArray(); //String을 char[]으로 변환
//단어의 글자 위치 섞는 코드
for(int j=0;j<question.length;j++) {
int randidx = (int) (Math.random() * question.length);
char tmp = question[i];
question[i]=question[randidx];
question[randidx]=tmp;
}
System.out.printf("Q%d. %s의 정답을 입력하세요 > ", i+1, new String(question));
String answer = scanner.nextLine();
//trim()으로 answer의 좌우공백 제거, equals()로 word[i]와 비교
if(words[i].equals(answer.trim())) {
System.out.printf("맞았습니다 %n%n");
}else {
System.out.println("틀렸습니다.. %n%n");
}
}
}
}
'프로그래밍 > java' 카테고리의 다른 글
[JAVA] 다형성(polymorphism) (0) | 2022.08.28 |
---|---|
[JAVA] 패키지와 import, 제어자, 겟터와 셋터 (0) | 2022.08.28 |
[JAVA] 오버라이딩(overriding)과 참조변수 super, super() 생성자 (0) | 2022.08.27 |
[JAVA] 상속 (0) | 2022.08.26 |
[JAVA] 객체, 인스턴스, 클래스, 메서드, 변수, static (0) | 2022.08.26 |