on
java 수업 DAY 17 // Array, For Each문
java 수업 DAY 17 // Array, For Each문
public class TestArray { public static void main(String[] args) { //기존 변수는 하나의 값만 기억 // Array 배열 - 한개의 변수로 여러개를 담을 수 있음 // 다만 똑같은 타입만 int[] arr; // 변수 선언 int 배열 이름은 arr [] 배열의 표현 // [] 뒤에 붙여도 똑같음 arr = new int[5]; //변수 초기화 // 길이가 5인 int 배열 초기화 즉 int 5개를 담을 5개칸을 만든다 // 칸 구분은 index로 구분한다 // 처음에는 기본값으로 초기화 되어 있다 // 최대값은 int의 최대값까지 가능하다 arr[0] = 5; // arr배열의 index 0초기화 / 한칸 arr[1] = 20; arr[2] = 30; arr[3] = 40; arr[4] = 50; System.out.println(arr[0]); System.out.println(arr.length); // arr.length = 10; // 안됨 배열의 길이 한번 정하면 불가 상수임 } }
public class TestArray2 { public static void main(String[] args) { int[] array = new int[5]; int[] numbers = new int[] {1, 2, 3, 4, 5}; // 알아서 길이 값을 만들어준다 고로 new int[]에 숫자를 넣지 않는다 int[] numbers2 = {10, 20, 30, 40, 50}; // 원시형은 가능 ㄴ 원소라 불림 for (int i = 0; i < numbers2.length; i++) { System.out.println(numbers2[i]); } // 한꺼번에 보이는 것 // int 배열 길이 값이 5이고, // 원소값으로 각각 30, 60, 90, 120, 150을 가지는 배열을 초기화해보세요. int[] numbers3 = {30, 60, 90, 120, 150}; for (int i = 0; i < numbers3.length; i++) { numbers3[i] = (i + 1) * 30; } // 위 배열의 원소들을 역순으로 접근하여 출력해보세요 for (int i = numbers3.length - 1; i >= 0; i--) { System.out.println(numbers3[i]); } // 배열 범위를 벗어나면 에러가 난다 } }
public class TestArrary3 { public static void main(String[] args) { int myLength = 4; int[] arr = new int[myLength]; // 배열 값으로 변수도 가능 } }
/* * 사용자에게 학생이 몇명인지 입력받은 후 * 학생의 점수를 각각 입력받아 * 합과 평균을 출력해보세요 // 배열을 사용할 필요가 굳이 없음 * * 추가 * 각각의 학생들의 점수를 최종적으로 출력해주세요 - 이럴경우 배열 사용 */ import java.util.Scanner; public class TestScores { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("학생이 몇명입니까? "); int student = scan.nextInt(); int[] score = new int[student]; int sum = 0; for (int i = 0; i < student; i++) { System.out.print("학생" + (i + 1) + "의 점수? "); int input = scan.nextInt(); // 기억할 필요가 있을 때만 score[i] = input; sum += input; // 배열을 쓰지 않는 경우 위에 두줄 삭제 sum += scan.nextInt(); } System.out.println("합: " + sum); System.out.println("평균: " + sum / student); //어렵게 생각하지 말기 for (int i = 0; i < score.length; i++) { System.out.println("학생" + (i + 1) + "의 점수" + score[i]); } } }
..length 안쓸경우 - final int student 하는 것이 좋음
/* * 사용자의 5번의 정수 입력 중 * 2자리의 정수가 몇개 있는 지 출력한 후, * 해당 정수들을 출력해보세요. */ import java.util.Scanner; public class TestCount { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int[] num = new int[5]; int count = 0; for (int i = 0; i < num.length; i++) { System.out.print("정수" + (i + 1) + "? "); int input = scan.nextInt(); if (input >= 10 && input < 100) { count++; } num[i] = input; } System.out.println("개수: " + count); for (int i = 0; i < num.length; i++) { int num1 = num[i]; if (num1 >= 10 && num1 < 100) { System.out.println(num1); } } } }
음수의 경우 math.abs 써보자
(숫자 범위로 조건 다는법 말고, 2자릿수 그 자체로 아는 방법은 없을까요 - 메소드로 만들어 놓고 호출하면 됨 - 정적으로
숫자를 string으로 바꿔서 갯수를 새보자!
-32을 바꿀땐 음수인지 아닌지 확인하고 절댓값으로 확인하고 바꾸기)
// 문자열로 바꿔서 하는 방법 class dfdfd { private static voolean isTwoDigit(int number) { number = Math.abs(number); String str = String.valueOf(number); return str.length() ==2; } }
// 하고 if의 조건 변경
public class TestArrary4 { public static void main(String[] args) { // 다음과 같은 배열이 있습니다. int[] arr = {10, 20, 30, 40, 50, 60}; // 0, 2, 4.. {짝수 index의 원소를 2배 증가시켜 대입연산 해보세요.) // {20, 20, 60, 40, 100, 60) for(int i = 0; i < arr.length; i++) { if (i % 2 == 0) { arr[i] *= 2; } System.out.print(arr[i] + " "); } } }
for (int i = 0; i < arr.length; i += 2) { arr[i] = arr[i] * 2; } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
For Each문
public class TestForEach { public static void main(String[] args) { int[] arr = {10, 20, 30, 40, 50, 60}; for (int num : arr) { // for-each문 //num 자리 지역변수 자리 // : 옆에 배열같은 것이 들어옴 순차적으로 보고싶을떄 쓴다 // 순서대로 가지고 와준다 System.out.println(num); } // 쉽게 순차적으로 나타낼 수 있음 // 다만 원하는 인텍스로 가지는 못함 무조건 순차적으로 // 기존 for문은 int i 는 index 를 표현함 // 순서대로 전부 다 보고 싶을 때 사용 } }
public class TestCopyArray { public static void main(String[] args) { int[] number = { 30, 40, 50, 10, 20}; // 기본 배열은 칸수를 추가 할 수 없음 // int[] number2 = number; // // 복사가 아니라 참조가 추가된 것 // number2[0] = 100; // // System.out.println(number[0]); // number와 똑같은 배열 만들기 int[] copy = new int[number.length]; // 새로 만들어서 기본배열에 칸수 추가 가 가능함 for (int i = 0; i < number.length; i++) { copy[i] = number[i]; } for (int num : copy) { System.out.println(num); } } // 기본배열은 배열 추가가 불가 배열 추가 하고 싶을 때 쓴다 // 추가된 칸은 index로 접근해서 집어 넣는다 }
public class TestCopy { public static void main(String[] args) { int[] arr = { 10, 20, 30 }; int[] arr2 = { 100, 90, 80}; int[] arr3 = new int[arr.length + arr2.length]; for (int i = 0; i < arr.length; i++) { arr3[i] = arr[i]; } for (int i = 0; i < arr.length; i++) { arr3[i + arr.length] = arr2[i]; } for (int num : arr3) { System.out.println(num); } } }
출력
10
20
30
100
90
80
원시형 타입의 배열
public class TestSearchArray { public static void main(String[] args) { // 다음과 같은 중복되지 않는 원소를 가지는 배열이 있음. int[] arr = { 5, 3, 4, 7, 9, 8}; // 7이 어디있는지 알고싶음 int find = -1; for (int i = 0; i < arr.length; i++ ) { if (arr[i] == 7) { find = i; // System.out.println("숫자 7의 index: " + i); break; // 중복되지 않는다는 가정해 찾으면 바로 스탑하기 위해 } } System.out.println("인텍스: " + find); } // 좀 더 공부하고싶으면 메소드로도 만들어 보기 }
출력
인텍스: 3
참조형 타입의 배열
class MyClass { public int a; public MyClass(int a) { this.a = a; } } public class TestRefArray { public static void main(String[] args) { int [] arr = { 10, 20, 30}; MyClass[] m = new MyClass[5]; //() 생성자호출 [] 배열 만들기 // MyClass 5칸 짜리 만들기 m[0] = new MyClass(100); // 100을 가지고 있는 인스턴스 참조 m[1] = new MyClass(77); m[2] = new MyClass(32); m[3] = new MyClass(19); m[4] = new MyClass(55); System.out.println(m.length); // 5 System.out.println(m[0].a); // 100 } }
class Student { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public String toString() { return "Student [name=" + name + ", score=" + score + "]"; }; } public class TestStudentArray { public static void main(String[] args) { Student s1 = new Student("길동", 100); // s1은 참조변수 Student s2 = new Student("둘리", 80); Student s3 = new Student("도우너", 90); // Student[] arr = new Student[3]; // arr[0] = s1; // arr[1] = s2; // arr[2] = s3; // 위에것과 밑에 것이 같다 Student[] arr = new Student[] {s1, s2, s3}; // s1.setName("마이콜") // 이러면 s1, arr[0] 둘다 마이콜로 바뀜 반대로 arr[0].setName도 마찬가지 // for (int i = 0; i < arr.length; i++) { // System.out.println(arr[i].toString()); // } for (Student s : arr) { System.out.println(s); } // int sum = s1.getScore() ~~ int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i].getScore(); } System.out.println(sum); //이렇게 적는 경우 학생이 여러 명 생겨도 편함 } }
출력
Student [name=길동, score=100]
Student [name=둘리, score=80]
Student [name=도우너, score=90]
270
※
package 가 먼저오고
그 다음이 import
from http://hiapprendre.tistory.com/31 by ccl(A) rewrite - 2021-12-18 23:01:46