반응형

📖 다음 Java 프로그램의 실행결과는?

class Ref {
	int a;
    Ref(int x) {
    	a = x;
    }
    int sum(Ref obj) {
    	int k;
        k = obj.a - a;
        a = 10; obj.a = 20;
        return k;
    }
}

class PassRef {
	public static void main(String[] args) {
    	Ref obj1 = new Ref(3);
        Ref obj2 = new Ref(4);
        int k1 = obj2.sum(obj1);
        System.out.print(" k1= "+k1);
        System.out.print(" obj1.a= "+obj1.a);
        System.out.print(" obj2.a= "+obj2.a);
    }
}

 

💡 풀이

먼저 PassRef 클래스의 메인 함수 영역을 살핍니다.

Ref 형태의 obj1을 생성하였습니다.

생성자에 매개변수 3이 들어가 있어 위의 Ref 클래스에서 매개변수가 int인 생성자를 따라갑니다.

obj1에는 a 라는 변수에 3이 들어가 있습니다.

 

두번째 obj2를 생성하고 a에는 4가 들어가 있습니다.

 

k1 변수에는 obj2의 sum 함수를 실행합니다. 매개변수는 obj1이 들어가 있습니다.

 

sum 함수를 살펴보면

 

k라는 변수가 생성되고 k 변수에는 obj.a 에서 a를 뺀 값을 저장합니다.

 

여기서 obj.a는 obj1의 a 값을 의미합니다.

 

그리고 a는 obj2의 a 값을 의미합니다.

 

그래서 k 변수에는 3 - 4 인  -1이 저장됩니다.

 

그리고 아래 코드에서 변수 a의 값을 10으로 변경하는데 여기서 a는 obj2의 a를 의미합니다.

 

그리고 obj.a = 20의 의미는 obj1의 a 값에 20을 넣어라는 의미입니다.

 

그리고 return 값으로 k의 값인 -1이 리턴됩니다.

 

즉 k1 변수에는 -1이 저장됩니다.

 

출력은 다음과 같이 출력됩니다.

System.out.print(" k1= "+k1);
System.out.print(" obj1.a= "+obj1.a);
System.out.print(" obj2.a= "+obj2.a);

k1= -1 obj1.a = 20 obj2.a = 10

반응형

'Java > Java 연습문제' 카테고리의 다른 글

자료구조 연습문제 2  (0) 2023.09.26
자료구조 연습문제  (0) 2023.09.26
이름 붙은 반복문 심화예제  (0) 2023.08.12
이름 붙은 반복문  (0) 2023.08.12
break문과 continue 문 예제  (0) 2023.08.12
반응형

    // TODO: 연습문제) Map 자료구조에 값과 객체를 추가하고 아래와 같이 결과가 출력하도록
    //    실행 클래스를 코딩하세요
    //    힌트 : put(), get()
    //    입력 :  키         |    값
    //         currentPage      2
    //         totalNum         3
    //         dept             Dept{dno=10, dname='Sales', loc='부산'}
    //         sizePerPage      3
    //    결과 :
    //    2
    //    3
    //    Dept{dno=10, dname='Sales', loc='부산'}
    //    3

package chap12.sec01.verify.exam05;

/**
 * packageName : chap13.sec01.verify.exam01
 * fileName : Dept
 * author : kangtaegyung
 * date : 2023/04/05
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class Dept {
    private int dno;
    private String dname;
    private String loc;

//    생성자
    public Dept(int dno, String dname, String loc) {
        this.dno = dno;
        this.dname = dname;
        this.loc = loc;
    }

//    getter
    public int getDno() {
        return dno;
    }

    public String getDname() {
        return dname;
    }

    public String getLoc() {
        return loc;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "dno=" + dno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }
}
package chap12.sec01.verify.exam05;

import java.util.HashMap;
import java.util.Map;

/**
 * packageName : chap12.sec01.verify.exam05
 * fileName : DeptApplication
 * author : GGG
 * date : 2023-09-26
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class DeptApplication {
    public static void main(String[] args) {

        Map<String, Object> map = new HashMap<>();
        map.put("currentPage", 2);
        map.put("totalNum", 3);
        map.put("dept", new Dept(10,"Sales", "부산"));
        map.put("sizePerPage", 3);

        System.out.println(map.get("currentPage"));
        System.out.println(map.get("totalNum"));
        System.out.println(map.get("dept"));
        System.out.println(map.get("sizePerPage"));


    }
}

// TODO: 연습문제) Map 자료구조에 값과 객체를 추가하고 아래와 같이 결과가 출력하도록
//    실행 클래스와 Qna 객체를 디자인(코딩)하세요
//    힌트 : put(), get()
//    입력 :  키         |    값
//         currentPage      1
//         totalNum         8
//         qna             Qna{qno=1, question='질문', questioner='질문자', answer='답변', answerer='답변자'}
//         sizePerPage      4
//    결과 :
//    1
//    8
//    Qna{qno=1, question='질문', questioner='질문자', answer='답변', answerer='답변자'}
//    4

package chap12.sec01.verify.exam06;

/**
 * packageName : chap13.sec01.verify.exam06
 * fileName : Qna
 * author : kangtaegyung
 * date : 2023/04/06
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/06         kangtaegyung          최초 생성
 */
public class Qna {
    private int qno;
    private String question;
    private String questioner;
    private String answer;
    private String answerer;

    public Qna(int qno, String question, String questioner, String answer, String answerer) {
        this.qno = qno;
        this.question = question;
        this.questioner = questioner;
        this.answer = answer;
        this.answerer = answerer;
    }

    public int getQno() {
        return qno;
    }

    public String getQuestion() {
        return question;
    }

    public String getQuestioner() {
        return questioner;
    }

    public String getAnswer() {
        return answer;
    }

    public String getAnswerer() {
        return answerer;
    }

    @Override
    public String toString() {
        return "Qna{" +
                "qno=" + qno +
                ", question='" + question + '\'' +
                ", questioner='" + questioner + '\'' +
                ", answer='" + answer + '\'' +
                ", answerer='" + answerer + '\'' +
                '}';
    }
}
package chap12.sec01.verify.exam06;

import java.util.HashMap;
import java.util.Map;


/**
 * packageName : chap12.sec01.verify.exam06
 * fileName : QnaApplication
 * author : GGG
 * date : 2023-09-26
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class QnaApplication {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap();

        map.put("currentPage", 1);
        map.put("totalNum", 8);
        map.put("qna", new Qna(1, "질문", "질문자", "답변", "답변자"));
        map.put("sizePerPage", 4);


        System.out.println(map.get("currentPage"));
        System.out.println(map.get("totalNum"));
        System.out.println(map.get("qna"));
        System.out.println(map.get("sizePerPage"));
    }
}

// TODO: 연습문제) 실행클래스는 결과는 아래와 같다.
//    Student 객체의 속성 및 중복을 제거하기 위해 재정의해야할 함수를 포함하여
//    Student 객체를 디자인(코딩)하세요
//    결과 :
//       1:홍길동
//       2:신용권

package chap12.sec01.verify.exam07;

import java.util.Objects;

/**
 * packageName : chap12.sec01.verify.exam07
 * fileName : Student
 * author : GGG
 * date : 2023-09-26
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class Student {

    private int studentNum;
    private String name;

    public Student() {
    }

    public Student(int studentNum, String name) {
        this.studentNum = studentNum;
        this.name = name;
    }

    public int getStudentNum() {
        return studentNum;
    }

    public String getName() {
        return name;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return studentNum == student.studentNum && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(studentNum, name);
    }


}
package chap12.sec01.verify.exam07;


import java.util.HashSet;
import java.util.Set;

/**
 * packageName : chap13.sec01.verify.exam08
 * fileName : HashSetApplicaton
 * author : kangtaegyung
 * date : 2022/10/03
 * description : HashSet에 Student 객체를 저장하려고 합니다.
 *      학번이 같으면 동일한 Student라고 가정하고 중복 저장이 되지 않도록 하고 싶습니다.
 *      Student 클래스에서 재정의해야 하는 hashCode()와 equals() 함수를 내용을 채워보세요.
 *      Student의 해시코드는 학번이라고 가정합니다.
 * 요약 : 자바 기본 자료구조 ( List, Set, Map )
 *      
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2022/10/03         kangtaegyung          최초 생성
 */
public class HashSetApplication {
    public static void main(String[] args) {
        Set<Student> set = new HashSet<Student>();

//        HashSet : 키가 중복되었을때 자동으로 중복을 제거해주는 자료구조
//        HashSet : 기존에 값이 있으면 안들어감
        set.add(new Student(1, "홍길동"));
        set.add(new Student(2, "신용권"));
        set.add(new Student(1, "홍길동"));

        for(Student student : set) {
            System.out.println(student.getStudentNum() + ":" + student.getName());
        }
    }
}
반응형

'Java > Java 연습문제' 카테고리의 다른 글

객체생성 연습문제  (0) 2023.10.04
자료구조 연습문제  (0) 2023.09.26
이름 붙은 반복문 심화예제  (0) 2023.08.12
이름 붙은 반복문  (0) 2023.08.12
break문과 continue 문 예제  (0) 2023.08.12
반응형
// TODO: 연습문제) 실행 클래스의 결과가 다음과 같도록 DeptDao 의 createDept() 함수에
//         List 의 자료를 추가하는 로직을 작성하세요.
//    결과 :
//      10 Sales       부산
//      20 Marketing   서울
//      30 Research    대전

package chap12.sec01.verify.exam01;

/**
 * packageName : chap13.sec01.verify.exam01
 * fileName : Dept
 * author : kangtaegyung
 * date : 2023/04/05
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class Dept {
    private int dno;
    private String dname;
    private String loc;

//    생성자
    public Dept(int dno, String dname, String loc) {
        this.dno = dno;
        this.dname = dname;
        this.loc = loc;
    }

//    getter
    public int getDno() {
        return dno;
    }

    public String getDname() {
        return dname;
    }

    public String getLoc() {
        return loc;
    }

}
package chap12.sec01.verify.exam01;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : chap12.sec01.verify.exam01
 * fileName : DeptDao
 * author : GGG
 * date : 2023-09-25
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-25         GGG          최초 생성
 */

public class DeptDao {
    public List<Dept> createDept(){
        List<Dept> list = new ArrayList<>();
        list.add(new Dept(10,"sales","부산"));
        list.add(new Dept(20,"Marketing","서울"));
        list.add(new Dept(30,"Research","대전"));
        return list;
    }

}
package chap12.sec01.verify.exam01;

import java.util.List;

/**
 * packageName : chap13.sec01.verify.exam01
 * fileName : DeptApplication
 * author : kangtaegyung
 * date : 2023/04/05
 * description : 실행클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class DeptApplication {
    public static void main(String[] args) {
        DeptDao deptDao = new DeptDao();
        List<Dept> deptList = deptDao.createDept(); // 자료 생성

        for(Dept dept : deptList) {
            System.out.println(dept.getDno() + " " + dept.getDname()
                    + " " + dept.getLoc());
        }
    }
}

// TODO: 연습문제) 실행 클래스의 결과가 다음과 같도록
//       Emp 모델을 디자인하고 EmpDao의 createDept()
//       List 의 자료를 추가하는 로직을 작성하세요.
//    결과 :
//        1 Scott 3000 500 10
//        2 Mark 3500 0 20
//        3 Smith 5000 1000 30

package chap12.sec01.verify.exam02;

/**
 * packageName : chap13.sec01.verify.exam02
 * fileName : Emp
 * author : kangtaegyung
 * date : 2023/04/05
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class Emp {
    private int eno;
    private String ename;
    private int salary;
    private int comission;
    private int dno;

//    생성자
    public Emp(int eno, String ename, int salary, int comission, int dno) {
        this.eno = eno;
        this.ename = ename;
        this.salary = salary;
        this.comission = comission;
        this.dno = dno;
    }

//    Getter
    public int getEno() {
        return eno;
    }

    public String getEname() {
        return ename;
    }

    public int getSalary() {
        return salary;
    }

    public int getComission() {
        return comission;
    }

    public int getDno() {
        return dno;
    }
}
package chap12.sec01.verify.exam02;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : chap12.sec01.verify.exam02
 * fileName : EmpDao
 * author : GGG
 * date : 2023-09-25
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-25         GGG          최초 생성
 */
//        1 Scott 3000 500 10
//        2 Mark 3500 0 20
//        3 Smith 5000 1000 30
public class EmpDao {
    public List<Emp> createEmp(){
        List<Emp> list = new ArrayList<>();
        list.add(new Emp(1,"Scott",3000,500,10));
        list.add(new Emp(2,"Mark",3500,0,20));
        list.add(new Emp(3,"Smith",5000,1000,30));
        return list;
    }
}
package chap12.sec01.verify.exam02;

import java.util.List;

/**
 * packageName : chap13.sec01.verify.exam02
 * fileName : EmpApplication
 * author : kangtaegyung
 * date : 2023/04/05
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class EmpApplication {
    public static void main(String[] args) {
        EmpDao empDao = new EmpDao();

        List<Emp> empList =  empDao.createEmp();

        //        List 배열 내용 출력
        for(Emp emp : empList) {
            System.out.println(emp.getEno() + " "
                          + emp.getEname() + " "
                          + emp.getSalary() + " "
                          + emp.getComission() + " "
                          + emp.getDno());
        }
    }
}

// TODO: 연습문제) 실행 클래스의 결과가 다음과 같도록
//       Faq 모델을 디자인하고 실행클래스 FaqApplication 에서
//      다음과 같은 결과가 나오도록 코딩하세요
//    결과 :
//        1 제목1 내용1
//        2 제목2 내용2
//        3 제목3 내용3

package chap12.sec01.verify.exam03;

/**
 * packageName : chap12.sec01.verify.exam03
 * fileName : Faq
 * author : GGG
 * date : 2023-09-26
 * description : Faq 모델 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class Faq {
//    TODO : 속성
    private int fid;
    private String subject;
    private String text;

//    TODO : 기본 생성자, 풀 속성 생성자
    public Faq() {
    }

    public Faq(int fid, String subject, String text) {
        this.fid = fid;
        this.subject = subject;
        this.text = text;
    }

//    TODO : getter
    public int getFid() {
        return fid;
    }

    public String getSubject() {
        return subject;
    }

    public String getText() {
        return text;
    }
}
package chap12.sec01.verify.exam03;


import java.util.ArrayList;
import java.util.List;

/**
 * packageName : chap13.sec01.verify.exam03
 * fileName : FaqDao
 * author : kangtaegyung
 * date : 2023/04/05
 * description : MVC 디자인 패턴
 * 요약 :
 *          M : Model               - 속성, 생성자, getter/setter 함수 (정보 저장용 클래스)
 *              DAO(DB 접속용 클래스) - CRUD(Create(insert) Read(select) Update(Update) Delete(Delete) 함수만 존재함
 *          V : View
 *          C : Controller
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */
public class FaqDao {
    public List<Faq> createFaq() {
//        내용 완성
//        ArrayList 사용, .add()
        List<Faq> list = new ArrayList<>();
        list.add(new Faq(1, "제목1", "내용1"));
        list.add(new Faq(2, "제목2", "내용2"));
        list.add(new Faq(3, "제목3", "내용3"));

        return list;
    }
}
package chap12.sec01.verify.exam03;


import java.util.List;

/**
 * packageName : chap13.sec01.verify.exam03
 * fileName : FaqApplication
 * author : kangtaegyung
 * date : 2023/04/05
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/04/05         kangtaegyung          최초 생성
 */

public class FaqApplication {
    public static void main(String[] args) {
        FaqDao faqDao = new FaqDao();

        List<Faq> faqList =  faqDao.createFaq();

        //        List 배열 내용 출력

        for(Faq faq : faqList) {
            System.out.println(faq.getFid() + " "
                    + faq.getSubject() + " "
                    + faq.getText());
        }
    }
}

// TODO: 연습문제) BoardDao 의 createBoard() 함수에는 List 자료구조를 이용해
//       아래의 값이 추가되어 있다. Board 객체와 실행클래스 BoardApplication 를 작성해서 아래 결과가 나오도록 코딩하세요
//    단, Board 객체의 속성명은 아래의 이름을 사용하고, createBoard() 함수를 이용해서 자료를 생성하세요.
//       title // 제목 속성
//       content // 내용 속성
//    결과 :
//      제목1-내용1
//      제목2-내용2
//      제목3-내용3

package chap12.sec01.verify.exam04;

/**
 * packageName : chap12.sec01.verify.exam04
 * fileName : Board
 * author : GGG
 * date : 2023-09-26
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class Board {
    private String title;
    private String content;

    public Board() {
    }

    public Board(String title, String content) {
        this.title = title;
        this.content = content;
    }

    public String getTitle() {
        return title;
    }

    public String getContent() {
        return content;
    }
}
package chap12.sec01.verify.exam04;

import java.util.ArrayList;
import java.util.List;

/**
 * packageName : chap12.sec01.verify.exam04
 * fileName : BoardDao
 * author : GGG
 * date : 2023-09-26
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-09-26         GGG          최초 생성
 */
public class BoardDao {

    public List<Board> createDept(){

        List<Board> list = new ArrayList<>();
        list.add(new Board("제목1", "내용1"));
        list.add(new Board("제목2", "내용2"));
        list.add(new Board("제목3", "내용3"));

        return list;
    }

}
package chap12.sec01.verify.exam04;

import java.util.List;

/**
 * packageName : chap13.sec01.verify.exam07
 * fileName : ListApplication
 * author : kangtaegyung
 * date : 2022/10/03
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022/10/03         kangtaegyung          최초 생성
 */
public class BoardApplication {
    public static void main(String[] args) {
        BoardDao dao = new BoardDao();
//        List 배열 : Board 객체에 저장되어 있는 값이 들어감
        List<Board> list = dao.createDept();

//        List 배열 내용 출력
        for(Board board : list) {
            System.out.println(board.getTitle() + "-" + board.getContent());
        }
    }
}
반응형

'Java > Java 연습문제' 카테고리의 다른 글

객체생성 연습문제  (0) 2023.10.04
자료구조 연습문제 2  (0) 2023.09.26
이름 붙은 반복문 심화예제  (0) 2023.08.12
이름 붙은 반복문  (0) 2023.08.12
break문과 continue 문 예제  (0) 2023.08.12
반응형

package ch01;

 

import java.util.Scanner;

 

public class Ex4_20 {

public static void main(String[] args) {

int menu = 0, num = 0;

Scanner sc = new Scanner(System.in);

 

// while문에 outer라는 이름을 붙임

outer: while (true) {

System.out.println("(1) square");

System.out.println("(2) square root");

System.out.println("(3) log");

System.out.print("원하는 메뉴(1~3)을 선택하세요, 종료는 0번");

 

String tmp = sc.nextLine(); // 입력값을 tmp에 저장

menu = Integer.parseInt(tmp); // 입력받은 문자열 tmp를 숫자로 변환

 

if (menu == 0) {

System.out.println("계산을 종료합니다.");

break; // 계산종료 for문 벗어남

} else if (!(1 <= menu && menu <= 3)) {

System.out.println("잘못입력하셨습니다.");

continue;

}

 

for (;;) {

System.out.print("계산할 값을 입력하세요(계산종료 0, 전체종료 99)>");

tmp = sc.nextLine();

num = Integer.parseInt(tmp);

 

if (num == 0)

 

break;

 

if (num == 99)

 

break outer;

 

switch (menu) {

case 1:

System.out.println("result=" + num * num);

break;

 

case 2:

System.out.println("result=" + Math.sqrt(num));

break;

 

case 3:

System.out.println("result=" + Math.log(num));

break;

}

} // for(;;)

 

} // end of while

} // end of main

} // end of class

 


메뉴를 선택하면 해당 연산을 반복적으로 수행할 수 있게 for문을 추가하였다.

반복문만 떼어놓고 보면 무한 반복문인 while문안에 또 다른 무한반복문인 for문이 중첩된 구조인 것을 알 수 있다.

while문은 메뉴를 반복해서 선택할 수 있게 해주고, for문은 선택된 메뉴의 작업을 반복해서 할 수 있게 한다.

 

outer:

while(true) { // 무한 반복문

           ...

          for(;;) { // 무한 반복문

           ...

          if(num==0) // 계산 종료 for문을 벗어남

              break;

          if(num==99) // 전체 종료 for문과 while 문 모두 벗어난다.

              break outer;

          ...

            } // for(;;)

    } // while

 

 

 

반응형

'Java > Java 연습문제' 카테고리의 다른 글

자료구조 연습문제 2  (0) 2023.09.26
자료구조 연습문제  (0) 2023.09.26
이름 붙은 반복문  (0) 2023.08.12
break문과 continue 문 예제  (0) 2023.08.12
[JAVA] 매개변수의 다형성 연습  (0) 2023.08.11
반응형

  • break문은 근접한 단 하나의 반복문만 벗어날 수 있다.
  • 여러 개의 반복문이 중첩된 경우 break문으로 중첩 반복문을 완전히 벗어날 수 없다.
  • 중첩 반복문 앞에 이름을 붙이고 break, continue 문에 이름을 지정하면 하나 이상의 반복문을 벗어날 수 있다.

package ch01;

 

public class Ex4_19 {

public static void main(String[] args) {

// 이름 붙은 반복문

 

// for문에 Loop1 이라는 이름을 붙임.

 

Loop1 : for(int i=2; i <= 9; i++) {

for(int j = 1; j <= 9; j++) {

if(j == 5) {

break Loop1;

// break;

// continue Loop1;

// continue;

 

} System.out.println(i + "*" + j + "=" + i * j);

} System.out.println(); // end of for i

} // end of Loop 1

}

}

 

위의 예제는 구구단을 출력하는 예제이다.

제일 바깥에 있는 for문에 Loop1 이라는 이름을 부여했다. 그리고 j가 5일때 break문을 수행하도록 했다.

반복문의 이름이 지정되지 않는 break문은 자신이 속한 하나의 반복문만 벗어날 수 있다.

이 처럼 반복문에 이름을 부여하고 break 문에 반복문 이름을 붙여주면 하나 이상의 반복문도 벗어날 수 있다.

j가 5일 때 Loop1을 벗어나도록 했으므로 2단의 4줄 까지 출력된다.

만일 반복문에 이름이 부여되지 않은 break문 이었다면 2단 부터 9단까지 모두 네 줄씩 출력되었을 것이다.

// 반복문에 이름을 부여하지 않은 break 문

2*1=2

2*2=4

2*3=6

2*4=8

 

3*1=3

3*2=6

3*3=9

3*4=12

 

4*1=4

4*2=8

4*3=12

4*4=16

 

5*1=5

5*2=10

5*3=15

5*4=20

 

6*1=6

6*2=12

6*3=18

6*4=24

 

7*1=7

7*2=14

7*3=21

7*4=28

 

8*1=8

8*2=16

8*3=24

8*4=32

 

9*1=9

9*2=18

9*3=27

9*4=36

 

 

// 반복문에 Loop1이라는 이름을 부여한 break 문

2*1=2

2*2=4

2*3=6

2*4=8

 

반응형
반응형

메뉴를 보여주고 선택하게 하는 예제입니다. 메뉴를 잘못선택한 경우 continue문으로 다시 메뉴를 보여주고

종료(0)을 선택한 경우 break문으로 반복을 벗어나 프로그램을 종료하도록 설계하였다.


package ch01;

import java.util.*;

public class Ex4_18 {

public static void main(String[] args) {

// break문과 continue 문 예제

 

int menu = 0;

int num = 0;

 

Scanner scanner = new Scanner(System.in);

 

while(true) {

System.out.println("(1) square");

System.out.println("(2) square root");

System.out.println("(3) log");

System.out.print("원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>");

 

String tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장

menu = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환

 

if(menu == 0) {

System.out.println("프로그램을 종료합니다.");

break;

} else if(!(1 <= menu && menu <=3)) { // menu의 선택 번호가 1보다 같거나 크고 3보다 작거나 같은게 아닌 번호

System.out.println("잘못 입력하였습니다. 종료는 0번");

continue;

}

 

System.out.println("선택하신 메뉴는 " + menu + "번 입니다.");

}

 

} // end of main

} // end of class

 

(1) square

(2) square root

(3) log

원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>1

선택하신 메뉴는 1번 입니다.

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

(1) square

(2) square root

(3) log

원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>2

선택하신 메뉴는 2번 입니다.

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

(1) square

(2) square root

(3) log

원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>3

선택하신 메뉴는 3번 입니다.

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

(1) square

(2) square root

(3) log

원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>4

잘못 입력하였습니다. 종료는 0번

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

(1) square

(2) square root

(3) log

원하는 메뉴(1~3)을 선택하세요. (종료 : 0)>0

프로그램을 종료합니다.

 

반응형
반응형

package ch98;

 

public class Product {

 

int price; // 제품의 가격

int bonusPoint; // 제품구매시 제공하는 보너스 점수

 

Product(int price) {

this.price = price;

bonusPoint = (int) (price / 10.0); // 보너스 점수는 제품가격의 10% 제공

}

} // end of Product class

 

 

package ch98;

 

public class Tv1 extends Product{

Tv1() {

// 조상클래스(Product)의 생성자 Product(int price)를 호출

super(100); // TV가격을 100만원

}

// Object 클래스의 toString()을 오버라이딩

public String toString() {

return "Tv";

}

}

package ch98;

 

public class Computer extends Product {

 

Computer() {

super(200); // 컴퓨터의 가격을 200만원으로 한다.

}

// Object 클래스의 toString()을 오버라이딩

public String toString() {

return "Computer";

}

}

package ch98;

 

public class Buyer { // 고객

int money = 1000; // 가지고있는 금액

int bounsPoint = 0; // 가지고있는 보너스점수

 

void buy(Product p) {

if (money < p.price) {

System.out.println("잔액이 부족해 물건을 구매할 수 없습니다.");

return;

}

 

money -= p.price; // 가진돈에서 구입한 물건의 값을 뺀다

bounsPoint += p.bonusPoint; // 구입한 물건의 보너스점수를 추가

System.out.println(p + "을/를 구매하였습니다.");

}

}

package ch98;

 

public class MainTest {

 

public static void main(String[] args) {

Buyer b = new Buyer();

b.buy(new Tv1());

b.buy(new Computer());

 

System.out.println("현재 남은 돈은 " + b.money + "만원 입니다.");

System.out.println("현재 보너스 점수는 " + b.bounsPoint + "점 입니다.");

 

}

 

}

Tv을/를 구매하였습니다.

Computer을/를 구매하였습니다.

현재 남은 돈은 700만원 입니다.

현재 보너스 점수는 30점 입니다.

반응형
반응형

배열을 어떻게 활용해야 할까?


활용예제 1) 총합과 평균 - 배열의 모든 요소를 더해서 총합과 평균을 구한다.

package ch01;

 

public class Ex5_2 {

 

public static void main(String[] args) {

int sum = 0; // 총합을 저장하기 위한 변수 선언과 초기화

float average = 0f; // 평균을 저장하기 위한 변수 선언과 초기화

 

int[] score = { 100, 88, 100, 100, 90 };

 

for (int i = 0; i < score.length; i++) { // 반복문을 이용해 배열에 저장되어있는 값들을 모두 더한다.

sum += score[i];

}

average = sum / (float) score.length; // 계산결과를 float타입으로 얻기위해 형변환

 

System.out.println("총합 : " + sum);

System.out.println("평균 : " + average);

 

} // end of main

 

} // end of class

 

[결과]

총합 : 478

평균 : 95.6

 

활용예제 2) 최대값과 최소값 - 배열의 요소 중에서 제일 큰 값과 제일 작은 값을 찾는다.

package ch01;

 

public class Ex5_3 {

 

public static void main(String[] args) {

int score[] = { 79, 88, 91, 33, 100, 55, 95 };

 

int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화

int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화

 

for (int i = 1; i < score.length; i++) { // 배열의 두번째 요소부터 읽기 위해 변수i 값을 1로 초기화

if (score[i] > max) {

max = score[i];

} else if (score[i] < min) {

min = score[i];

}

} // end of for

System.out.println("최대값 : " + max);

System.out.println("최소값 : " + min);

} // end of main

 

} // end of class

 

  • 배열의 첫 번째 요소 'score[0]'의 값으로 최대값을 의미하는 변수 max 최소값을 의미하는 변수 min을 초기화
  • 반복문을 통해 배열의 두 번째 요소 score[1]부터 max와 비교
  • 만일 배열에 담긴 값이 max에 저장된 값보다 크면 이 값을 max에 저장
  • 배열의 마지막까지 비교하고 나면 max에는 배열에 담긴 값 중 가장 큰 값이 저장

[결과]

최대값 : 100

최소값 : 33

 

활용예제 3) 섞기 - 배열의 요소의 순서를 반복해서 바꾼다. (숫자 섞기, 로또 번호 생성)

package ch01;

 

import java.util.Arrays;

 

public class Ex5_4 {

 

public static void main(String[] args) {

int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

System.out.println(Arrays.toString(numArr));

 

for(int i = 0; i < 100; i++) {

int n = (int)(Math.random() * 10); // 0~9 중의 한 값을 임의로 받는다.

int tmp = numArr[0];

numArr[0] = numArr[n];

numArr[n] = tmp; // numArr[0]과 numArr[n]의 값을 서로 바꾼다.

}

System.out.println(Arrays.toString(numArr));

 

} // end of main

 

} // end of class

 

  • 만약 random()을 통해 얻은 n값이 3이라면 아래와 같다.

 

package ch01;

 

public class Ex5_5 {

 

public static void main(String[] args) {

// 로또 번호 만들기

 

int[] ball = new int[45]; // 45개의 정수값을 저장하기 위한 배열 생성

 

// 배열의 각 요소에 1~45의 값을 저장

for(int i = 0; i < ball.length; i++) {

ball[i] = i + 1; // ball[0]에 1이 저장됨

}

 

int tmp = 0; // 두 값을 바꾸는데 사용할 임시변수지정

int j = 0; // 임의의 값을 얻어서 저장할 변수

 

// 배열의 i번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.

// 0번째 부터 5번째 요소까지 모두 6개만 바꾼다.

 

for(int i = 0; i < 6; i++) {

j = (int)(Math.random() * 45); // 0 ~ 44 범위의 임의의 값을 얻는다.

tmp = ball[i];

ball[i] = ball[j];

ball[j] = tmp; // ball[i] 와 ball[j]의 값을 서로 바꾼다.

}

 

// 배열 ball의 앞에서부터 6개의 요소를 출력

for(int i = 0; i < 6; i++) {

System.out.printf("ball[%d]=%d%n", i, ball[i]);

}

 

}

 

}

 

반응형
반응형

위의 그래프를 참고하여 상속 구조로 클래스를 작성해보자

부모 클래스인 Hero 만들기

package ch03_1;

 

public class Hero {

 

String name;

int hp;

 

public Hero(String name, int hp) {

this.name = name;

this.hp = hp;

}

 

// 접근제어 지시자 - protected

// 상속을 받는 자식 클래스들은 접근할 수 있다.

 

protected void attack() {

System.out.println("기본 공격을 시작합니다.");

}

}

자식 클래스인 Warrior / Archer / Wizard 만들기

package ch03_1;

 

public class Warrior extends Hero {

 

// !! 부모 클래스에 사용자 정의 생성자가 있다면

// 자식 클래스에서 반드시 부모 생성자를 먼저 호출해야 한다.

public Warrior(String name, int hp) {

// super < -- 부모를 의미한다.

// System.out.println("asdasdasd"); << 부모가 태어나기 전에 먼저 일할 수 없다.

super(name, hp); // 부모 생성자를 먼저 호출해야한다.

}

 

public void comboAttack() {

System.out.println("전사가 2단 공격을 합니다.");

}

 

// 상속에서 오버라이드

@Override // 어노테이션

protected void attack() {

// super.attack(); // super.

System.out.println(super.name + "가 기본 공격을 합니다.");

// 부모(Hero)의 기능인 attack을 자식 클래스에서 재정의

}

}

package ch03_1;

 

public class Archer extends Hero {

 

public Archer (String name, int hp) {

super(name, hp);

}

 

// 메서드 오버라이드

@Override

protected void attack() {

// super.attack();

System.out.println(super.name + "가 기본 공격을 합니다.");

}

// 부모(Hero)의 기능인 attack을 자식 클래스에서 재정의

 

void fireArrow() {

System.out.println("불화살 공격을 합니다.");

}

}

package ch03_1;

 

public class Wizard extends Hero{

 

public Wizard (String name, int hp) {

super(name, hp);

}

 

// 메서드 오버라이드

@Override

protected void attack() {

// super.attack();

System.out.println(super.name + "가 기본공격을 합니다.");

}

// 부모(Hero)의 기능인 attack을 자식 클래스에서 재정의

 

 

void freezing() {

System.out.println("얼음공격을 합니다.");

}

}

기능 확인

public static void main(String[] args) {

Warrior war1 = new Warrior("전사", 100);

war1.attack();

war1.comboAttack();

 

Archer arc1 = new Archer("궁수", 80);

arc1.attack();

arc1.fireArrow();

 

Wizard wiz1 = new Wizard("마법사", 60);

wiz1.attack();

wiz1.freeZing();

}

실행결과

전사가 기본 공격을 합니다.

전사가 2단 공격을 합니다.

궁수가 기본 공격을 합니다.

불화살 공격을 합니다.

마법사가 기본공격을 합니다.

얼음공격을 합니다.

 

반응형
반응형
버스 클래스를 정의하고 및 속성을 부여하고 기능을 추가해 출력해보자

버스의 속성에는 개인에 따라 다르겠지만 이런 것들이 있다.

  • 버스번호
  • 승객수
  • 요금

그리고 버스 클래스의 기능을 추가해볼건데 기능에는 간단하게 두 가지를 추가해보았다.

  • 버스 승객 탑승시 승객 카운트 및 총 수입금 계산하는 기능
  • 버스 정보 출력 기능

package ch03;

 

public class Bus {

 

// 속성

int busNumber; // 버스 번호

int count; // 승객수

int money; // 수익금

 

// 기능

public void take(int m) {  // 승객이 버스를 타면 성인요금 1300원이 추가되는 기능

// 0 = 0 + 1300 >> 1300

// 1300 = 1300 + 1300 >> 2600

money += m;

count = count + 1;

}

 

public void showInfo () {

System.out.println(" ==== 상태 창 ====");

System.out.println("버스번호는 : " + busNumber);

System.out.println("승객 수는 : " + count);

System.out.println("현재 수익금은 : " + money);

 

}

}

package ch03;

 

public class BusMainTest {

 

public static void main(String[] args) {

 

Bus bus100 = new Bus();

Bus bus200 = new Bus();

// System.out.println(bus100);

bus100.busNumber = 100; // bus100의 번호는 100번

bus200.busNumber = 200; // bus200의 번호는 200번

 

for (bus100.count = 0; bus100.count < 1000; bus100.count++) { // 버스 승객이 1000명 탔을 경우의 수익금

bus100.money += 1300;

}

for (bus200.count = 0; bus200.count < 100; bus200.count++) {

bus200.money += 1300;

}

bus100.showInfo();

bus200.showInfo();

 

}

 

}

 

[출력값]

==== 상태 창 ====

버스번호는 : 100번

승객 수는 : 1000명

현재 수익금은 : 1300000원

==== 상태 창 ====

버스번호는 : 200번

승객 수는 : 100명

현재 수익금은 : 130000원

반응형
반응형

유저 클래스를 정의하고 이를 사용해보자

package ex_01;

 

public class User {

// 멤버 변수정의

 

int userAge;

String userId;

String userName;

String address;

String userTel;

 

// 기능 정의

public void logIn() {

System.out.println(userName + "님이 로그인하였습니다.");

}

 

public void logOut() {

System.out.println(userName + "님이 로그아웃하였습니다.");

}

 

public void userInfo() {

System.out.println("=== << " + userName + "님의 정보" + " >> ===");

System.out.println("회원 님의 ID : " + userId);

System.out.println("회원 님의 이름 : " + userName);

System.out.println("회원 님의 나이 : " + userAge + "세");

System.out.println("회원 님의 주소 : " + address);

System.out.println("회원 님의 연락처 : " + userTel);

System.out.println("==============================");

}

}

package ex_01;

 

public class UserMainTest {

 

public static void main(String[] args) {

 

User UserKim = new User();

UserKim.userName = "김철수";

UserKim.userId = "kimchulsoo1234";

UserKim.address = "부산광역시";

UserKim.userAge = 25;

UserKim.userTel = "010-1234-5678";

 

UserKim.logIn();

UserKim.logOut();

UserKim.userInfo();

 

User UserPark = new User();

UserPark.userName = "박민수";

UserPark.userId = "minsupark5555";

UserPark.address = "서울특별시";

UserPark.userAge = 30;

UserPark.userTel = "010-5555-4444";

 

UserPark.logIn();

UserPark.logOut();

UserPark.userInfo();

 

}

 

}

[출력값]

김철수님이 로그인하였습니다.

김철수님이 로그아웃하였습니다.

=== << 김철수님의 정보 >> ===

회원 님의 ID : kimchulsoo1234

회원 님의 이름 : 김철수

회원 님의 나이 : 25세

회원 님의 주소 : 부산광역시

회원 님의 연락처 : 010-1234-5678

==============================

박민수님이 로그인하였습니다.

박민수님이 로그아웃하였습니다.

=== << 박민수님의 정보 >> ===

회원 님의 ID : minsupark5555

회원 님의 이름 : 박민수

회원 님의 나이 : 30세

회원 님의 주소 : 서울특별시

회원 님의 연락처 : 010-5555-4444

==============================

반응형

'Java > Java 연습문제' 카테고리의 다른 글

[JAVA] 상속 구조로 클래스 만들어보기  (0) 2023.08.08
[JAVA] 클래스 정의 및 활용 실습  (0) 2023.07.28
[JAVA] 함수구현하기  (0) 2023.07.28
[JAVA] 클래스 코딩하기  (0) 2023.07.28
[JAVA] 랜덤게임문제  (0) 2023.07.27
반응형
두 개의 매개 변수를 받아 덧샘을 하는 함수를 작성해보자!

package ch02;

 

public class FunctionMainTest {

 

// 함수란?

// 두개의 매개 변수를 받아서 덧셈하는 기능을 만들기

// 함수를 선언하는 문법

public static int addNumber(int n1, int n2) {

// 결과를 담을 변수를 선언

int result;

result = n1 + n2;

return result;

}

 

public static double minusNumber(int n1, int n2) {

int result;

result = n1 - n2;

return result;

}

 

public static void main(String[] args) {

 

int returnValue = addNumber(10, 5); // 함수를 호출하는 문법

System.out.println(returnValue);

 

int returnValue2 = addNumber(100, 7895);

System.out.println(returnValue2);

 

// 함수 호출은 모양 맞추기이다.

double returnValue3 = minusNumber(5, 100);

System.out.println(returnValue3);

 

}

 

}

void 함수를 활용하여 인사말을 출력하는 함수를 만들어보자.

 

package ch02;

 

public class FunctionMainTest2 {

 

// 메인 함수

public static void main(String[] args) {

 

sayHello("안녕 좋은 아침이야");

sayHello("반가워~~");

int result = calcSum();

System.out.println(result);

 

} // end of main

 

// 함수에는 여러가지 종류가 있다. - 정수값을 반환하는 함수

public static int add(int n1, int n2, int n3) {

// 함수안에 사용하는 변수는 - 지역변수라고 한다.

// return 키워드 뒤에 바로 식을 사용할 수도 있다.

return n1 - n2 - n3;

}

 

// 아무것도 반환하지 않는 함수도 있다.

// void >> 텅 빈이라는 의미

public static void sayHello(String greeting) {

System.out.println(" ** " + greeting + " **^^ ");

 

}

 

// 매개변수는 반드시 없어도 된다.

public static int calcSum() {

int sum = 0;

int i = 1;

for (i = 1; i < 101; i++) {

sum += i;

}

return sum;

}

 

} // end of class

반응형

+ Recent posts