728x90

기본형 - int, long, double, boolean 같은 변수레 사용할 값을 직접 넣을 수 있는 타입

참조형 - Student student1, int[] students 와 같이 데이터에 접근하기 위해 참조 주소를 저장하는 데이터 타입

 

기본형은 들어있는 값을 그대로 계산에 사용이 가능,

참조형은 주소지만 있기에 할 수 있는게 하나도 없음, 주소지에 직접 가야 함!

 

기본형은 연산이 가능

int a = 10, b = 20;
int sum = a + b;

 

참조형은 연산이 가능

Student s1 = new Student();
Student s2 = new Student();
s1 + s2 //오류 발생

 

참조형은 . 을 이용하면 객체의 기본형 멤버 변수에 접근하여 연산이 가능

Student s1 = new Student();
s1.grade = 100;
Student s2 = new Student();
s2.grade = 90;
int sum = s1.grade + s2.grade; //연산 가능

 

 

기본형과 참조형의 메소드 호출

 

기본형 - 메소드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달
              메소드 내부에서 매개변수의 값을 변경해도, 호출자의 변수 값은 영향이 없음

참조형 - 메소드로 참조형 데이터를 전달하면, 참조 값이 복사되어 전달

              메소드 내부에서 매개변수로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경됨

 

예시) 기본형 메소드 호출

package ref;
	public class MethodChange {
    
	 public static void main(String[] args) {
	 int a = 10;
 	System.out.println("메소드 호출 전: a = " + a);
	 changePrimitive(a);
	 System.out.println("메소드 호출 후: a = " + a);
	 }
	 static void changePrimitive(int x) {
	 x = 20;
	 }
}

----------------------------------------------------
메소드 호출 전: a = 10
메소드 호출 후: a = 10

 

예시) 참조형 메소드 호출

package ref;

public class MethodChange {

    public static void main(String[] args) {
        Data dataA = new Data();
        dataA.value = 10;
        System.out.println("메서드 호출 전: dataA.value = " + dataA.value);
        changeReference(dataA);
        System.out.println("메서드 호출 후: dataA.value = " + dataA.value);
    }
    static void changeReference(Data dataX) {
        dataX.value = 20;
    }
}

--------------------------------------------
메소드 호출 전: dataA.value = 10
메소드 호출 후: dataA.value = 20

 

 

 

참조형 메소드 호출 응용

 

변경 전)

package class1;
	public class StudentClass {
	 public static void main(String[] args) {
     
 		Student student1;
        
		 student1 = new Student();
 		 student1.name = "학생1";
		 student1.age = 15;
		 student1.grade = 90;
         
		 Student student2 = new Student();
		 student2.name = "학생2";
		 student2.age = 16;
		 student2.grade = 80;
 		 System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
 	 	 System.out.println("이름:" + student2.name + " 나이:" + student2.age + " 성적:" + student2.grade);
 	}
}

 

메소드를 활용하여 변경 후)

package ref;

public class Student {
    String name;
    int age;
    int grade;
}
package ref;

public class Method1 {

    public static void main(String[] args) { 
        Student student1 = new Student(); //x001
        initStudent(student1, "학생1", 15, 90;;
				 //(x001,  "학생1" ...)
                 
                 
        Student student2 = new Student(); //x002
        initStudent(student2, "학생2", 16, 80;;

        printStudent(student1);
        printStudent(student2);
    }
    
								//	=x001
    static void initStudent(Student student, String name, int age, int grade){
        student.name=name;  // = x001.name=name;
        student.age=age;	// = x001.age=age;
        student.grade=grade;// = x001.age=age;
    }
    

    static void printStudent(Student student){
        System.out.println("이름:"+student.name+"나이:"+student.age+"성적:"+student.grade);

    }
}

 

메소드를 활용하여 변경 후 를 더 최적화! )

package ref;

public class Method12 {

    public static void main(String[] args) {
        Student student1 = createStudent ("학생1",15,98)
        Student student2 = createStudent ("학생2",16,80)
                
        printStudent(student1);
        printStudent(student2);
    }

    static Student createStudent(String name, int age, int grade){
        Student student = new Student(); // x001
        student.name=name;
        student.age=age;
        student.grade=grade;
        return student; // x001
    }


    static void printStudent(Student student){
        System.out.println("이름:"+student.name+"나이:"+student.age+"성적:"+student.grade);

    }
}
728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 절차 지향 프로그래밍  (0) 2024.03.02
[JAVA] 변수와 초기화  (0) 2024.03.01
[JAVA] 클래스와 데이터  (2) 2024.03.01
[JAVA] 메소드(Mathod)  (0) 2024.02.29
[JAVA] 배열 응용  (0) 2024.02.25
728x90

객체지향프로그램 (Object Oriented Programming. OOP)

 

객체 - 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것

cf) 속성 - 사람의 이름, 나이 등 / 동작 - 웃다, 걷다
                     =필드&멤버변수  /        =메소드

 

클래스 = 설계도

붕어빵 틀 = 클래스
붕어빵 = 객체=인스턴스


예시1)

package class1;

public class ClassStart3 {
    public static void main(String[] args) {
        Student student1;
        
        student1 = new Student();
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;
        
        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;
        
        System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
        System.out.println("이름:" + student2.name + " 나이:" + student2.age + " 성적:" + student2.grade);
    }
}

 

1. 변수 선언

Student student1 → Student 변수를 선언

 = Student 타입을 받을 수 있는 변수를 선언

    (int는 정수 double은 실수를 받듯이 Student는 Student 타입의 객체를 받을 수 있다.)

 

2. 객체 생성

student1 = new Student() → Student 인스턴스(객체) 생성

= 객체를 사용하려면 먼저 클래스를 기반으로 객체를 생성해야 하는데 여기서 new Student()는 Student 클래스를 기반으로 새로운 인스턴스를 생성하라는 것

 

3.객체 사용

클래스를 통해 생성한 객체를 사용하려면 먼저 메모리에 존재하는 객체에 접근해야 하는데 객체에 접근하려면 .  을 사용 해야 한다.

//객체 값 대입
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
//객체 값 사용
System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" +
student1.grade);

 

 

예시2 배열로 변환)

package class1;

public class ClassStart3 {
    public static void main(String[] args) {
        Student student1 =  new Student();
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;

        Student[] students = new Student[2];
        students[0] = student1;
        students[1] = student2

        System.out.println("이름:" + students[0].name + " 나이:" + students[0].age + " 성적:" + students[0].grade);
        System.out.println("이름:" + students[1].name + " 나이:" + students[1].age + " 성적:" + students[1].grade);
    }
}

 

 

예시3)위의 예시에서 배열 도입)

package class1;

public class ClassStart3 {
    public static void main(String[] args) {
        Student student1 =  new Student();
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;

        Student[] students = new Student{student1, student2};
        // Student[] students = {studnet1, student2} 로 더 최적화 가능

        for ( int i = 0; i<students.length;i++){
            System.out.println("이름:" + students[i].name + " 나이:" + students[i].age + " 성적:" + students[i].grade);
		
        // 아래와 같이 더 최적화 가능
        //for ( int i = 0; i<students.length;i++){
            // Student s = student[i];
        //System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);

        }
		// for-each 문을 활용한 최적화(가장 깔끔)
        for (Student s : students){
            System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
        }
        // ITER 을 입력하면 for-each문이 뙇 하고 나온는데..?
        }
    }
}

 

 

 

예시) 배열과 for문을 활용하여 영화 리뷰 관리하기

package class1.ex;

public class MovieReviewMain2 {
    String title;
    String review;

    public static void main(String[] args) {
        MovieReview reviews[] = new MovieReview[2];


        MovieReview inception = new MovieReview();
        inception.title = "인셉션";
        inception.review = "인생은 무한루프";
        reviews[0] = inception;


        MovieReview aboutTime = new MovieReview();
        aboutTime.title = "어바웃타임";
        aboutTime.review = "인생 시간 영화";
        reviews[1] = aboutTime;

        for (MovieReview review : reviews) {
            System.out.println("영화제목: " + review.title + ", 리뷰: " + review.review);
        }
    }
}

 

 

예시) 상품 주문 시스템 개발

package class1.ex;

public class ProductOrder {
    String productname;
    int price;
    int quantity;

}
package class1.ex;

public class ProductOrderMain {

    public static void main(String[] args) {
        ProductOrder orders[] = new ProductOrder[3];

        ProductOrder order1 = new ProductOrder();
        order1.productname = "두부";
        order1.price = 2000;
        order1.quantity = 2;
        orders[0] = order1;


        ProductOrder order2 = new ProductOrder();
        order2.productname = "김치";
        order2.price = 5000;
        order2.quantity = 1;
        orders[1] = order2;


        ProductOrder order3 = new ProductOrder();
        order3.productname = "콜라";
        order3.price = 1500;
        order3.quantity = 2;
        orders[2] = order3;

        int totalAmount = 0;
        for (ProductOrder order : orders) {
            System.out.println("상품명: "+order.productname+", 가격: "+order.price+", 수량: "+order.quantity);
        totalAmount += order.price*order.quantity;
        }

        System.out.println("총 결제 금액: "+totalAmount);
    }
}
728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 변수와 초기화  (0) 2024.03.01
[JAVA] 기본형, 참조형/ Method 호출  (0) 2024.03.01
[JAVA] 메소드(Mathod)  (0) 2024.02.29
[JAVA] 배열 응용  (0) 2024.02.25
[JAVA] 배열, for-each문  (1) 2024.02.25
728x90

메소드 사용의 장점

  • 코드 재사용 - 특정 기능을 캡슐화 하므로, 재작성 필요없이 메소드를 호출함으로써 코드 재사용 가능
  • 코드 가독성 
  • 모듈성
  • 코드 유지 관리
  • 재사용과 확장성
  • 추상화
  • 테스트와 디버깅의 용이성

 

 

메소드 예시)

public static int add(int a, int b) {
 System.out.println(a + "+" + b + " 연산 수행");
 int sum = a + b;
 return sum;
}

 

메소드는 2가지로 크게 분류 할 수 있다.

 

1.메소드 선언

public static int add(int a, int b)

     접근제어자 ▶ public static

     반환 타입 ▶ int

     메소드이름 ▶ add

     매개변수(파라미터) ▶ (int a, int b)

 

반환할 타입이 없다면 void를 사용한다. cf) void print(String str)
입력값이 필요 없는 메소드는 매개변수를 지정하지 않아도 된다. cf) add()

 

2. 메소드 본문

{
 System.out.println(a + "+" + b + " 연산 수행");
 int sum = a + b;
 return sum;
}

 

메소드의 실행 결과를 반환하려면 return문을 사용하여야 한다

 

 

메소드를 호출 할 때는 메소드에서 넘기는 값과 매개변수 타입이 일치해야한다(순서와 갯수 모두)

호출: call("hello", 20)
메서드 정의: int call(String str, int age)

 

 

반환타입

 반환타입이 있으면 반.드.시 return을 사용해서 값을 반환해야한다
p.s)조건문과 함께 쓸 때 주의해야함

 

package mathod;

public class mathod1 {
    public static void checkAge(int age){
        if(age<18){
            System.out.println(age+"살, 미성년자는 출입이 불가능합니다.");
            return;
        }
        System.out.println(age+"살, 입장하세요.");

    }


    public static void main(String[] args) {

        checkAge(10);
        checkAge(18);
    }
}

 

 

메소드 호출과 값 전달

" 자바는 항상 변수의 값을 복사해서 대입한다 "

 

예시)

package mathod;

public class mathod1 {
    public static void changeNumber(int num2) {
        System.out.println("2. changeNumber 변경 전, num2: " + num2);
        num2 = num2 * 2;
        System.out.println("3. changeNumber 변경 후, num2: " + num2);
    }

    public static void main(String[] args) {
        int num1 = 5;
        System.out.println("1. changeNumber 호출 전, num1: " + num1);
        changeNumber(num1);
        System.out.println("4. changeNumber 호출 후, num1: " + num1);
    }
}

---------------------------------------

1. changeNumber 호출 전, num1: 5
2. changeNumber 변경 전, num2: 5
3. changeNumber 변경 후, num2: 10
4. changeNumber 호출 후, num1: 5

 

 

응용) 메소드를 활용해서 값 변환하기

package mathod;

public class mathod1 {
    public static int changeNumber(int num2) {
        num2 = num2 * 2;
        return num2;
    }

    public static void main(String[] args) {
        int num1 = 5;
        System.out.println("changeNumber 호출 전, num1: " + num1); // 출력: 5
        num1 = changeNumber(num1);
        System.out.println("changeNumber 호출 후, num1: " + num1); // 출력: 10
    }
}
--------------------------------

changeNumber 호출 전, num1: 5
changeNumber 호출 후, num1: 10

 

강제 형변환

package mathod;

public class mathod1 {
public static void printNumber (int n){ // 형변환 된 값을 대입
    System.out.println("숫자: " + n);
}
    public static void main(String[] args) {
        double number = 1.5;
        //printNumber(number);  double을 int에 대입하므로 컴파일 오류
        printNumber((int) number); // 강제 형변환

    }
}

자동 형변환

package mathod;

public class mathod1 {
public static void printNumber (double n){
    System.out.println("숫자: " + n);
}
    public static void main(String[] args) {
        int number = 100;
        printNumber(number); // int에서 double로 자동형변환

    }
}

 

 

메소드 오버로딩

이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩(Overloading)이라 한다

 

오버로딩 성공 예시)

add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다
참고로 반환 타입은 인정하지 않는다

 

 

오버로딩 실패 예시)

int add(int a, int b)
double add(int a, int b)

 

Why? 

메서드 이름과 매개변수의 타입이 같다! / 반환 타입은 인정X

 

 

 

메소드 예시)

 

메소드를 활용한 평균값 리펙토링하기

 

문)

package mathod;

public class mathod1 {
	 public static void main(String[] args) {
 		int a = 1;
 		int b = 2;
 		int c = 3;
	 	int sum = a + b + c;
 		double average = sum / 3.0;
 	System.out.println("평균값: " + average);
		 int x = 15;
		 int y = 25;
      	 	 int z = 35;
		 sum = x + y + z;
		 average = sum / 3.0;
 	System.out.println("평균값: " + average);
 }
}

 

답)

package mathod;

public class mathod1 {
    public static double average(int a, int b, int c) {
        int sum = a + b + c;
        return sum / 3.0;
    }

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        int sum = a + b + c;
        double average = sum / 3.0;
        System.out.println("평균값: " + average);
        int x = 15;
        int y = 25;
        int z = 35;
        sum = x + y + z;
        average = sum / 3.0;
        System.out.println("평균값: " + average);

    }
}

 

more simple)

package mathod;

public class mathod1 {
    public static double average(int a, int b, int c) {
        int sum = a + b + c;
        return sum / 3.0;
    }

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;

        System.out.println("평균값: " + average(a,b,c));
        
        int x = 15;
        int y = 25;
        int z = 35;

        System.out.println("평균값: " + average(x,y,z));

    }
}

 

best simple)

package mathod;

public class mathod1 {
    public static double average(int a, int b, int c) {
        int sum = a + b + c;
        return sum / 3.0;
    }

    public static void main(String[] args) {
       
        System.out.println("평균값: " + average(1,2,3));

        System.out.println("평균값: " + average(15,25,35));

    }
}

 

 

메소드를 활용한 반복 출력 리펙토링

 

문)

package mathod;

public class Method1 {
 public static void main(String[] args) {
 	String message = "Hello, world!";
 		for (int i = 0; i < 3; i++) {
		 System.out.println(message);
 	}
		 for (int i = 0; i < 5; i++) {
		 System.out.println(message);
	 }
		 for (int i = 0; i < 7; i++) {
		 System.out.println(message);
	 }
 }
}

 

답)

package mathod;

public class mathod1 {
    public static void printMessage(String message, int times) {
        for (int i = 0; i < times; i++) {
            System.out.println(message);
        }
    }
    public static void main(String[] args) {

            String message = "Hello, world!";

            printMessage(message,3);

            printMessage(message,5);

            printMessage(message,7);

        }
    }

 

 

입출금 리펙토링

문)

package mathod;

public class mathod1 {

    public static void main(String[] args) {

        int balance = 10000;
        // 입금 1000
        int depositAmount = 1000;
        balance += depositAmount;
        System.out.println(depositAmount + "원을 입금하였습니다. 현재 잔액: " + balance + "원");
        // 출금 2000
        int withdrawAmount = 2000;
        if (balance >= withdrawAmount) {
            balance -= withdrawAmount;
            System.out.println(withdrawAmount + "원을 출금하였습니다. 현재 잔액: " +
                    balance + "원");
        } else {
            System.out.println(withdrawAmount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }

        System.out.println("최종 잔액: " + balance + "원");
    }
}

 

답)

package mathod;

public class mathod1 {
    public static int deposit(int balance,int amount){
        balance+=amount;
        System.out.println(amount+"원을 입금하였습니다. 현재 잔액: " + balance + "원");
        return balance;
    }
    public static int withdraw(int balance, int amount){
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원을 출금하였습니다. 현재 잔액: " +
                    balance + "원");
        } else {
            System.out.println(amount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }
        return balance;
    }
    public static void main(String[] args) {

        int balance = 10000;
        // 입금 1000
        balance = deposit(balance, 1000);
        // 출금 2000
        balance = withdraw(balance, 2000);

        System.out.println("최종 잔액: " + balance + "원");
    }
}

 

 

은행계좌 입출금 리펙토링

 

예시)

---------------------------------
1.입금 | 2.출금 | 3.잔액 확인 | 4.종료
---------------------------------
선택: 1
입금액을 입력하세요: 10000
10000원을 입금하였습니다. 현재 잔액: 10000원
---------------------------------
1.입금 | 2.출금 | 3.잔액 확인 | 4.종료
---------------------------------
선택: 2
출금액을 입력하세요: 8000
8000원을 출금하였습니다. 현재 잔액: 2000원
---------------------------------
1.입금 | 2.출금 | 3.잔액 확인 | 4.종료
---------------------------------
선택: 2
출금액을 입력하세요: 3000
3000원을 출금하려 했으나 잔액이 부족합니다.
---------------------------------
1.입금 | 2.출금 | 3.잔액 확인 | 4.종료
---------------------------------
선택: 3
현재 잔액: 2000원
---------------------------------
1.입금 | 2.출금 | 3.잔액 확인 | 4.종료
---------------------------------
선택: 4
시스템을 종료합니다.

 

 

리펙토링)

package mathod;

import java.util.Scanner;

public class method2 {
    public static void main(String[] args) {

        int balance = 0;
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("---------------------------------:");
            System.out.println("1.입금 | 2.출금 | 3.잔액확인  |4.종료");
            System.out.println("---------------------------------:");
            System.out.println("선택 :");

            int choice = sc.nextInt();
            int amount;

            switch (choice) {
                case 1:
                    System.out.print("입금액을 입력하세요: ");
                    amount = sc.nextInt();
                    balance = deposit(balance, amount);
                    break;
                case 2:
                    System.out.print("출금액을 입력하세요: ");
                    amount = sc.nextInt();
                    balance = withdraw(balance, amount);
                    break;
                case 3:
                    System.out.println("현재 잔액: " + balance + "원");
                    break;
                case 4:
                    System.out.println("시스템을 종료합니다.");
                    return;
                default:
                    System.out.println("잘못 입력했습니다.");
                    break;
            }
        }
    }

    public static int deposit(int balance, int amount) {
        balance += amount;
        System.out.println(amount + "원을 입금하였습니다. 현재 잔액: " + balance + "원");
        return balance;
    }

    public static int withdraw(int balance, int amount) {
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원을 출금하였습니다. 현재 잔액: " + balance +
                    "원");
        } else {
            System.out.println(amount + "원을 출금하려 했으나 잔액이 부족합니다.");
        }
        return balance;
    }
}

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 기본형, 참조형/ Method 호출  (0) 2024.03.01
[JAVA] 클래스와 데이터  (2) 2024.03.01
[JAVA] 배열 응용  (0) 2024.02.25
[JAVA] 배열, for-each문  (1) 2024.02.25
[JAVA] Scanner  (1) 2024.02.25
728x90

1) 배열을 사용하여 코드를 개선하기

int student1 = 90;
 int student2 = 80;
 int student3 = 70;
 int student4 = 60;
 int student5 = 50;
 int total = student1 + student2 + student3 + student4 + student5;
 double average = (double) total / 5;
 System.out.println("점수 총합: " + total);
 System.out.println("점수 평균: " + average);
 }
}
package test;

public class studying {

	public static void main(String[] args) {
		
		int students [] = {90, 80, 70, 60, 50};

		int total = 0;
		for (int i=0;i<students.length;i++) {
			total+=students[i];
		}
		double avg = (double)total/students.length;
		System.out.println("점수 총합:" +total);
		System.out.println("점수 평균:" +avg);
	}
}

 

2) 5개의 정수를 입력받아서 배열에 저장하고, 입력 순서대로 출력

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		int[]numbers = new int[5];
		
		System.out.println("정수 5개를 입력하세요:");
		for(int i=0;i<numbers.length;i++) {
			numbers[i] = sc.nextInt();
		}
		System.out.println("출력");
		for(int i=0;i<numbers.length;i++) {
			System.out.print(numbers[i]);
		if(i<numbers.length-1) {
			System.out.print(", ");
		}
		}
		
	}
}

 

3) 사용자에게 5개의 정수를 입력받아서 배열에 저장하고, 입력받은 순서의 반대인 역순으로 출력

    (출력시 출력 포멧은 5, 4, 3, 2, 1과 같이 , 쉼표를 사용해서 구분하고, 마지막에는 쉼표를 넣지 않아야 한다.)

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		int[]numbers = new int[5];
		
		System.out.println("정수 5개를 입력하세요:");
		for(int i=0;i<numbers.length;i++) {
			numbers[i] = sc.nextInt();
		}
		System.out.println("역순으로 출력");
		for(int i=4;i>=0;i--) {
			System.out.print(numbers[i]);
		if(i>0) {
			System.out.print(", ");
		}
		}
		
	}
}

 

4) 사용자에게 5개의 정수를 입력받아서 이들 정수의 합계와 평균을 계산하는 프로그램을 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		int[]numbers = new int[5];
		int sum=0;
		double avg=0;
		
		System.out.println("정수 5개 입력:");
		for(int i=0;i<numbers.length;i++) {
			numbers[i]=sc.nextInt();
			sum+=numbers[i];
			
		}
	avg = (double)sum/5;
	
	System.out.println("합계:"+sum);
	System.out.println("평균"+avg);
		
	}
}

 

4-1) 이전 문제에서 입력받을 숫자의 개수를 입력받게하기

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		System.out.println("입력받을 숫자의 개수를 입력:");
		int cnt = sc.nextInt();
		
		int[]numbers = new int[cnt];
		int sum=0;
		double avg=0;
		
		System.out.println("정수 "+cnt+"개 입력:");
		for(int i=0;i<numbers.length;i++) {
			numbers[i]=sc.nextInt();
			sum+=numbers[i];
			
		}
	avg = (double)sum/cnt;
	
	System.out.println("합계:"+sum);
	System.out.println("평균"+avg);
		
	}
}

 

5) n개의 정수를 입력받아 배열에 저장한 후, 배열 내에서 가장 작은 수와 가장 큰 수를 찾아 출력하는 프로 그램을 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		System.out.println("입력받을 숫자의 개수를 입력:");
		int n = sc.nextInt();
		
		int[] numbers = new int[n];
		int maxnumber, minnumber;
		
		System.out.println(n+"개의 정수를 입력");
		for(int i=0;i<n;i++) {
			numbers[i]=sc.nextInt();
		}
		
		minnumber = numbers[0];
		maxnumber = numbers[0];
		
		for(int i=1;i<n;i++) {
			if(numbers[i]<minnumber) {
				minnumber = numbers[i];
			}
			if(numbers[i]>maxnumber) {
				maxnumber = numbers[i];
		}
	
		}
		
		System.out.println("가장 작은 정수="+minnumber);
		System.out.println("가장 큰 정수="+maxnumber);
	}
}

 

6) 2차원 배열을 사용하여 4명 학생의 국어, 수학, 영어 점수를 입력받아 각 학생의 총점과 평균을 계산하는 프로그램 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		
		Scanner sc=new Scanner(System.in);
		
		int[][]scores=new int[4][3];
		String[] subjects = {"국어","영어","수학"};
		
		for(int i=0;i<4;i++) {
			System.out.println((i+1)+"번째 학생 성적을 입력");
			for(int j=0;j<3;j++) {
				System.out.println(subjects[j]+"점수: ");
				scores[i][j]=sc.nextInt();
			}
		}
		
		for(int i=0;i<4;i++) {
			int total=0;
			for(int j=1;j<3;j++) {
				total+=scores[i][j];
			
			}
		double avg=(double)total/3;
		System.out.println((i+1)+"번째 학생의 총접:"+total+", 평균"+avg);
		}
		
	}
}

 

7) 상품관리 프로그램 만들기

이 프로그램은 다음의 기능이 필요하다:
 상품 등록: 상품 이름과 가격을 입력받아 저장한다.
 상품 목록: 지금까지 등록한 모든 상품의 목록을 출력한다.

다음과 같이 동작해야 한다:
> 첫 화면에서 사용자에게 세 가지 선택을 제시한다: "1. 상품 등록", "2. 상품 목록", "3. 종료"
> "1. 상품 등록"을 선택하면, 사용자로부터 상품 이름과 가격을 입력받아 배열에 저장한다.
> "2. 상품 목록"을 선택하면, 배열에 저장된 모든 상품을 출력한다.
> "3. 종료"를 선택하면 프로그램을 종료한다. 제약 조건 상품은 최대 10개까지 등록할 수 있다.

다음은 사용해야 하는 변수 및 구조이다:
> Scanner scanner : 사용자 입력을 받기 위한 Scanner 객체
> String[] productNames : 상품 이름을 저장할 String 배열
> int[] productPrices : 상품 가격을 저장할 int 배열
> int productCount : 현재 등록된 상품의 개수를 저장할 int 변수
package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
		int maxProducts = 10;
		String[] productNames = new String[maxProducts];
		int[] productPrices = new int[maxProducts];
		int productCount = 0;
		
		Scanner sc=new Scanner(System.in);
		
		while(true) {
			System.out.println("1.상품등록 | 2.상품등록 | 3.종료\n메뉴를 선택하세요:");
			int menu = sc.nextInt();
			sc.nextLine();
			
			if(menu==1) {
				
				if(productCount >= maxProducts) {
					System.out.println("더 이상 삼풍등록이 불가합니다.");
					continue;
				}
				
				System.out.print("상품이름을 입력하세요:");
				productNames[productCount] = sc.nextLine();
				
				System.out.print("상품가격을 입력하세요:");
				productPrices[productCount] = sc.nextInt();
				
				productCount++;
			}else if (menu==2) {
				if(productCount==0) {
					System.out.println("등록된 상품이 없습니다.");
					continue;
				}
				for(int i=0;i<=productCount;i++) {
					System.out.println(productNames[i]+": "+productPrices[i]+"원");
				}
			} else if (menu==3) {
				System.out.println("프로그램을 종료합니다.");
			break;
			}	else {
				System.out.println("없는 메뉴입니다.");
			}	
		}
		
	}
}
728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 클래스와 데이터  (2) 2024.03.01
[JAVA] 메소드(Mathod)  (0) 2024.02.29
[JAVA] 배열, for-each문  (1) 2024.02.25
[JAVA] Scanner  (1) 2024.02.25
[JAVA] 형(type)변환 = Casting  (1) 2024.02.25
728x90

배열 = 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것

배열을 쓰는 이유는 같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 해결한다

 

[ ] = 인덱스(index) 

배열의 위치를 나타내는 숫자( [ ] 사이에 숫자를 넣어주면 된다)

 

 

변수 선언과 생성

int[]student; //1. 배열 변수 선언
student = new int[5]; //2. 배열 생성
student = new int[]{90, 80, 70, 60, 50}; //3.배열 생성과 초기화
변수명.length = 배열의 길이를 제공 / 대입은 불가

 

예시1)

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

	int[] students;
 	students = new int[]{90, 80, 70, 60, 50}; //배열 생성과 초기화
    
    /*
    배열 생성 간략 버전, 배열 선언과 함께 사용시 new int[] 생략 가능
 	int[] students = {90, 80, 70, 60, 50};
    */
    
 	for (int i = 0; i < students.length; i++) {
	 System.out.println("학생" + (i + 1) + " 점수: " + students[i]);
 }
 
 }
}

 

ps) 아래와 같이 작성하면 오류발생

int[] students;
students = {90, 80, 70, 60, 50}; // 변수가 붙어있질않아서 처리 불가.

 

 

2차원 배열

int ary[][]= new int[i][j]; // i행 j열의 2차원배열 생성

 

행과 열 길이

	ary -> i.length
	ary -> j[i].length

 

예시1)

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
	
		 int ary[][] = new int[2][3];	// 2x3 2차원 배열, 초기화
		 int i = 1;
		 
		 // 순서대로 1씩 증가하는 값을 입력한다.
		 for (int i = 0; i < ary.length; i++) {
		 for (int j = 0; j < ary[i].length; j++) {
		 ary[i][j] = i++;
		 }
		 }
		 // 2차원 배열의 길이를 활용
		 for (int i = 0; i < ary.length; i++) {
		 for (int j = 0; j < ary[i].length; j++) {
		 System.out.print(ary[i][j] + " ");
		 }
		 System.out.println();
		 }
		 
		
	}
}

 

예시2) 문자열 출력

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
		
	String s[][]= {{"java"},
			{"c","c++"},
			{"html","pytion","css"}};

	for(int i=0;i<s.length;i++) {
	for(int j=0;j<s[i].length;j++) {
	System.out.println(s[i][j]);
}
}
	}
}

 

예시3) 배열과 반복문을 사용하여 프로그램 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		
		String ary[][] = {{"book","책"},
				  {"pen","펜"},
				  {"water","물"}}; //3행 2열
		
	for(int i=0;i<ary.length;i++) { //i=0,1,2
		System.out.println(ary[i][0]+"을 한글로");
		String str=sc.next();
		
		if(str.equals(ary[i][1])) {
			System.out.println("정답!");
		}
		else
			System.out.println(("오답!"));
	}

 

 

 

향상된 for문 = for-each문

for (변수 : 배열 또는 컬렉션) {
 // 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}

 

비교

 

int ary[] = {1, 2, 3, 4, 5};

 

일반 for문

for(int i = 0; i < ary.length; ++i) {
 int a = ary[i];
 System.out.println(a);
}

 

for-each문

for (int a : ary) {
 System.out.println(a);
}

 

사용이 불가한 for-each문

//for-each문을 사용할 수 없는 경우, 증가하는 index 값 필요
 for(int i = 0; i < ary.length; ++i) {
 System.out.println("a" + i + "번의 결과는: " +ary[i]);
 }

 

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 메소드(Mathod)  (0) 2024.02.29
[JAVA] 배열 응용  (0) 2024.02.25
[JAVA] Scanner  (1) 2024.02.25
[JAVA] 형(type)변환 = Casting  (1) 2024.02.25
[JAVA] 반복문(for)  (1) 2024.02.25
728x90

예시1) 문자열을 입력하고 반복종료

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

	String str;	
	Scanner sc=new Scanner(System.in);
	
	do {
		System.out.println("문자열 입력");
		str=sc.next();
		
		if(str.equals("exit")) {
			System.out.println("프로그램 종료");
		}
			else {
				System.out.println(str);
							}
	}while(!str.equals("exit"));
	
	}
}

 

예시2) 이름 나이 입력받고 출력하기

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("당신의 이름을 입력하세요: ");
		String name = sc.next();
		
		System.out.println("당신의 나이를 입력하세요: ");
		int age = sc.nextInt();
		
		System.out.println("당신의 이름은: "+name+"이고, 당신의 나이는: "+age+"입니다.");
		 
	}	
}

 

예시3) 정수를 입력하고 홀수,짝수를 구분하는 프로그램 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("숫자를 입력하세요: ");
		int num = sc.nextInt();
		
		if(num%2==0)
			System.out.println("짝수입니다.");
		else
			System.out.println("홀수입니다.");
		
		 
	}	
}

 

예시4) 음식점 주문 프로그램 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
	System.out.println("음식 이름을 입력해주세요: ");
	String name = sc.next();
	
	System.out.println("음식의 가격을 입력해주세요: ");
	int price = sc.nextInt();
	
	System.out.println("음식의 수량을 입력해주세요: ");
	int quantity = sc.nextInt();
	
	int total = price*quantity;
	
	System.out.println(name+"을 주문하셨습니다. "+"총 가격은: "+total+"입니다.");
	
			
	}	
}

 

변수값 교환하기

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

int a = 10;
int b = 20;
int temp;

temp = a;
a = b;
b = temp;

System.out.println(a);
System.out.println(b);
	}	
}

 

예시) 정수 2개를 입력받고, 이 두 정수 사이의 모든 정수를 출력

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		
		Scanner sc=new Scanner(System.in);
		
System.out.println("첫번째 숫자를 입력하세요:");		
int num1 = sc.nextInt();
System.out.println("두번쨰 숫자를 입력하세요:");
int num2 = sc.nextInt();

if(num1>num2) {
	int temp=num1;
	num1=num2;
	num2=temp;
}
System.out.println("두 숫자 사이의 모든 정수:");
for(int i=num1;i<=num2;i++) {
	System.out.print(i);
	if(i!=num2) {
		System.out.print(",");
	}
}
	}	
}

 

예시3) 상품 가격 계산

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		
		Scanner sc=new Scanner(System.in);
	
	while(true) {
System.out.println("상품의 가격(-1을 입력하면 종료): ");
int price = sc.nextInt();

if(price==-1) {
	System.out.println("프로그램종료");
	break;
}
System.out.println("구매수량(-1을 입력하면 종료):");
int quantity = sc.nextInt();

int total = price*quantity;
System.out.println("총 비용:"+total);

	}

	}
}

 

예시4) 입력한 숫자의 총합과 평균을 출력

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		
		Scanner sc=new Scanner(System.in);
	
		int sum=0;
		int count=0;
		int num=0;
		
		System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력: ");
		
		while(true) {
			num = sc.nextInt();
			
			if(num==-1) {
				break;
							}
		sum+=num;
		count++;
		}
        
        /* 위의 코드를 축약시키면 아래와 같이 할 수 있다.
        
        	while ((input = scanner.nextInt()) != -1) {
 			sum += input;
 			count++;
 			}
            
		*/
        
        
		double avg = (double)sum/count;
		System.out.println("총 합:"+sum);
		System.out.println("평균:"+avg);
			
	}

}

 

예시5) 상품구매 프로그램 작성

package test;
import java.util.Scanner;

public class studying {

	public static void main(String[] args) {

		
	Scanner sc=new Scanner(System.in);
			
	int total = 0;
		
	while(true) {
		System.out.println("1:상품 입력, 2:결제, 3:프로그램종료");
		int num=sc.nextInt();
	
		if(num==1) {
							
			System.out.println("상품명을 입력하세요:");
			String name=sc.next();
				
			System.out.println("상품의 가격을 입력하세요:");
			int price=sc.nextInt();				
				
			System.out.println("구매수량을 입력하세요:");
			int quantity=sc.nextInt();
				
			total+=price*quantity;
			System.out.println("상품명:"+name+"가격:"+price+"수량:"+quantity+"합계:"+price*quantity);
		
		}
		else if((num==2)) {
			System.out.println("총 비용:"+total);
            total = 0; // 결제 후 다음사용자 총 비용 초기화 <<< 코드 작성시 누락된 부분
	}
		else {
			System.out.println("프로그램종료");
			break;
		}
			
		
		}
	}
}
728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 배열 응용  (0) 2024.02.25
[JAVA] 배열, for-each문  (1) 2024.02.25
[JAVA] 형(type)변환 = Casting  (1) 2024.02.25
[JAVA] 반복문(for)  (1) 2024.02.25
[JAVA] 삼항 연산자, 반복문(while, do-while, Switch, break, continue)  (1) 2024.02.24

+ Recent posts