public static void main(String[] args) { //처리 StringBuilder msg = new StringBuilder();
//n을 1부터 9까지 변하도록 for (int a=1; a<=9; a++) { for (int b=1; b<=9; b++){ msg.append(String.format("%d * %d = %d %n", a, b, (a * b))); } // append에서 %n을 쓰려면 반드시 String.format에서만 사용할 수 있다. msg.append(String.format("------------------%n")); }
//출력 System.out.println(msg.toString());
/*for (int a=1; a<=9; a++){ // 내가 짠 코드 (처리와 결과가 구분되어있지 않음) for (int b=1; b<=9; b++){ System.out.printf("%d * %d = %d%n", a, b, (a*b)); } }*/ } }
예를 들어, 1부터 100사이의 숫자중에서 홀수들의 합을 계산해서 출력. for문, continue키워드 이용.
int sum=0; for(int a=1; a<=100; a++) { if (a%2 == 0) { continue; //건너뛰기. 현위치에서 a++(증감식) 부분으로 이동함. } sum += a; } System.out.printf("홀수들의 합: %d %n", sum);
package com.test;
public class Sample16 { public static void main(String[] args) {
int sum=0; for(int a=1; a<=100; a++) { if (a%2 == 0) { continue; //건너뛰기. 현위치에서 a++(증감식) 부분으로 이동함. } sum += a; } System.out.printf("홀수들의 합: %d %n", sum); } }
배열(Array)
1. 배열은 크기와 성격이 같은 일련의 원소들이 모여 공동의 집합 구조를 갖는 자료의 집합체.
2. 특징 - 하나의 이름(식별자)을 가지고 여러개의 저장 공간을 가진다. - 자료형이 같은 자료만 저장할 수 있다. - 사전에 공간의 크기를 지정해야 한다. - 참조형이다. - 특정 저장 공간을 지칭하기 위해서 인덱스(0부터 시작되는 번호)를 이용한다. - 배열의 배열을 이용해서 다차원 배열을 만들 수 있다. - 자동 초기화 지원
3. 배열 사용 방법
자료형[] 변수명; //배열 선언 int[] arr; 변수명 = new 자료형[크기]; //배열에 메모리 할당 arr = new int[] 변수명[인덱스] = 자료; // 배열 요소의 사용
4. 배열 선언 및 초기값 동시 지정
자료형[] 변수명 = new 자료형[크기]; // 자동초기화 지원. 자료형[] 변수명 = {값1, 값2, .....}; // 원하는 값으로 채워짐
문제) 이름과 전화번호를 저장하는 주소록 작성. 배열이용. 반복문 이용. 실행 예) 회원 수(1~10)?3 이름 전화번호(1)? hong 111-1111 이름 전화번호(2)? kim 222-2222 이름 전화번호(3)? park 333-3333
---------------- 전체 회원수: 3명 ---------------- 이름 전화번호 hong 111-1111 kim 222-2222 park 333-3333 ----------------
package com.test; import java.util.Scanner;
public class Sample19 { public static void main(String[] args) {
//입력단계 및 1단계 배열 선언 Scanner sc = new Scanner(System.in); System.out.print("회원 수(1~10)?"); String num = sc.next(); int count = Integer.parseInt(num); String[] members = new String[count];
//처리단계 및 2단계 배열 요소 입력 //샘플 members[0] = "hong:111-1111"; for(int a=0; a<count; a++) { Scanner sc2 = new Scanner(System.in); System.out.printf("이름:전화번호(%d)?", (a+1)); members[a] = sc2.next(); }
//출력 및 3단계 배열 요소 출력//입력받을때 띄어쓰기는 인식안됨. System.out.println("----------------"); System.out.printf("전체 회원수: %d명%n", count); System.out.println("----------------"); System.out.println("이름:전화번호"); for (int a=0; a<members.length; a++) { System.out.printf("%s %n", members[a]); } System.out.println("----------------"); } }
//결과
회원 수(1~10)?3 이름:전화번호(1)?jjj:333-4444 이름:전화번호(2)?hhh:222-1111 이름:전화번호(3)?uuu:777-9999 ---------------- 전체 회원수: 3명 ---------------- 이름:전화번호 jjj:333-4444 hhh:222-1111 uuu:777-9999 ----------------
-> Sample19.java에서 입력시 띄어쓰기 가능하도록 수정한 버전. 복사해서 정리할 것.
package com.test; import java.util.Scanner;
public class Sample19_01 { public static void main(String[] args) {
//1단계. 배열 선언 Scanner sc = new Scanner(System.in); System.out.print("회원 수(1~10)?"); String num = sc.next();
int count = Integer.parseInt(num);
String[] names = new String[count]; String[] tels = new String[count];
//2단계. 배열 요소 입력 //names[0] = "hong"; //tels[0] = "111-1111";
for(int a=0; a<count; a++) { //0, 1, 2 -> 3회 System.out.printf("이름 전화번호(%d)?", (a+1)); //next메소드는 띄어쓰기로 구분해서 입력 받으면 //두 개의 문자열로 인식한다. names[a] = sc.next(); tels[a] = sc.next(); }
//사본 배열 준비 -> 교집합 int[] hap = new int[(arr1.length>arr2.length)?arr2.length:arr1.length];
//arr1의 요소와 arr2의 요소들 중에서 //중복된 요소만 hap에 저장 int n = 0; for(int a=0; a<arr1.length; a++) { //중복된 요소만 찾는 과정 for (int b=0; b<arr2.length; b++) { if (arr1[a] == arr2[b]) { hap[n++] = arr1[a]; } } }
//hap에 요소들을 출력 for (int a=0; a<n; a++) { System.out.printf("%d ", hap[a]); } System.out.println();
//사본 배열 준비 -> 차집합 int[] hap = new int[arr1.length];
//arr1의 요소 중에서 arr2의 요소와 //중복되지 않은 요소만 hap에 저장 int n = 0; for(int a=0; a<arr1.length; a++) { //arr1의 요소와 중복되지 않은 요소만 //걸러내는 과정 추가 boolean result = true; for (int b=0; b<arr2.length; b++) { if (arr1[a] == arr2[b]) { result = false; } }
if (result) { hap[n++] = arr1[a]; } }
//hap에 요소들을 출력 for (int a=0; a<n; a++) { System.out.printf("%d ", hap[a]); } System.out.println();