자바를 공부해 보자

[중첩 클래스 및 상속, 다형성, 추상화, 인터페이스] 상속

자바

상속

 

1) 개요

 

상속이란?

*기존 클래스를 재 사용하여 새로운 클래스를 작성

*두 클래스를 부모와 자식으로 관계를 맺어주는

*자손은 부모의 모든 멤버를 받아옴

*키워드는 extends

 

 

 

 

(extends Object) 상속, 생략이 되어 있는 것

 

 

2) Object class

조상이 없는 클래스

*모든 클래스는 Object클래스를 직.간접적으로 상속

*모든 클래스의 최고 조상

 

 

 

메소드

 

 

 

 

 

에러 안나고 출력이 잘 됨

extends Object가 생략되어 있기 때문에

ap = 참조변수, 주소를 가지는 변수

 

 

int a=10;

 

힙-> 가비지 컬렉터

 

 

 

(5분부터 다시 들을 것)

(17분 시작)

 

 

07. super, super 메소드

 

1)this

객체 자신을 가리키는 참조변수

객체의 주소가 저장되어 있으며 숨겨진 채로 존재

 

2)super

조상의 멤버와 자신의 멤버를 구별하는데 사용되는 키워드 , this와 같음

 

 

3)super메소드

*조상의 멤버의 초기화를 위해 조상클래스의 생성자를 호출하기 위해 만든 메소드

*반드시 자식생성자의 첫 문장에서 호출해야

(super, this 둘 중 하나만 사용해야 한다.)

 

 

parent멤버와 child멤버가 겹쳤을 떄, parent멤버에 super 키워들 붙힌다.

 

 

 

 

 

 

 

 

[중첩클래스 및 상속, 다형성, 추상화, 인터페이스] 중첩클래스의 개요 및 종류

자바

1. 중첩클래스의 개요 및 종류

 

 

(1) 개요

하나의 클래스 내부에 또 다른 클래스를 사용 하는 것

 

종류

일반, 정적, 지역, 익명(무명) 클래스

static / 지역변수

 

자바 안에 들어가는 구성 요소!

 

class A {

//멤버 필드

 

int a;

//생성자

 

A(){}

//멤버메소드

 

class B{

}

//중첩클래스

 

public void disp(){

 

 

 

 

2) 일반 중첩 클래스

 

일반 멤버 필드와 접근 방법이 동일

 

외부 클래스의 객체가 반드시 필요

 

내부에서 클래스의 사용이 빈번할 때 사용

 

 

 

 

 

 

 

3) 정적 중첩 클래스

static

 

*static메소드와 접근 방법이 동일            // static 멤버만 사용가능

*외부 클래스의 객체가 필요하지 않음

*인터페이스의 멤버로 사용이 가능함

 

 

 

 

 

static -> 객체생성 필요없음 , 클래스 이름으로 생성이 가능하다.

 

 

 

 

 

 

 

outer2$Inner2.class

 

$ -> 중첩클래스구나..

 

 

 

 

4) 지역중첩클래스 -> 지역변수(매개변수)

 

 

 

other3$1Inner3

other3$2Inner3

 

 

지역구분해주는 숫자/인덱스 번호

 

 

 

5) 익명(무명)중첩클래스 -> GUI구현

 

 

 

 

Exam_04$1.class

 

 

 

 

 

 

 

package ch08;
class Outer1{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer1(){
  a=10;
 }
 public void disp() {
  System.out.println("a="+a);
  System.out.println("b="+b);
  //System.out.println("c="+Inner1.class); //아예 불가함
 }
 class Inner1{
  private int c;
  Inner1(){
   c =30;
  }
  public void disp2() {
   System.out.println("a="+a);
   System.out.println("b="+b);
   System.out.println("c="+c);
  }
  class Inner1_Inner1{}
 }
 
}
public class Exam_01 {
 public static void main(String[] args) {
  Outer1 ot =new Outer1();
  Outer1.Inner1 oi = ot.new Inner1();
  oi.disp2();
  
 }
}

 

 

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

a=10
b=20
c=30

 

 

 

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

 

 

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

 

 

 

 

 

 

package ch08;
class Outer2{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer2(){
  a=10;
 }
 public void disp() {
  System.out.println("a="+a);
  System.out.println("b="+b);
  
 }
 static class Inner2{
  private int c;
  Inner2(){
   c =30;
  }
  public void disp2() {
   //System.out.println("a="+a);
   System.out.println("b="+b);
   System.out.println("c="+c);
  }
  
 }
 
}
public class Exam_02 {
 public static void main(String[] args) {
  Outer2 ot = new Outer2();
  Outer2.Inner2 oi = new Outer2.Inner2();
  oi.disp2();
  
 }

}

 

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

 

 

b=20
c=30

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

 

 

 

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

 

package ch08;
class Outer3{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer3(){
  a=10;
 }
 public void disp() {
  class Inner3{
   private int c;
   Inner3(){
    c = 30;
   }
   public void disp_in() {
    System.out.println("a="+a);
    System.out.println("b="+b);
    System.out.println("c="+c);
   }
  }
  Inner3 in = new Inner3();
  in.disp_in();
 }
}
public class Exam_03 {
 public static void main(String[] args) {
  Outer3 ot = new Outer3();
  ot.disp();
 }

}

 

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

 

a=10
b=20
c=30

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

 

 

 

 

package ch08;
class Outer4{
 public void aaa() {
  System.out.println("aaa메소드");
 }
 public void bbb() {
  System.out.println("bbb메소드");
 }
}
public class Exam_04 {
 public static void main(String[] args) {
  Outer4 ot = new Outer4() {
   public void bbb() {
    System.out.println("안녕하세요bbb메소드입니다");
   }
  };
  
  ot.bbb();
 }

}

 

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

 

 

출력값: 안녕하세요bbb메소드입니다

 

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

 

 

 

 

 

메소드를 오버라이드해서 올리겠다.

인터페이스를 활용한 방법

 

 

 

익명중첩페이스

 

 

 

 

 

[중첩클래스 및 상속, 다형성, 추상화, 인터페이스] 클래스기초2

자바

클래스기초2

 

1) 접근제한자

접근을 목적으로 하는 단어

 

 

종류

private , package(default) , protexted , public

 

왜 접근을 제한해야 하는가?

 

예시, 커피자판기가 잠겨있지 않다면?

자판기 주인이 생각하는 대로 사람들이 행동하지 않으므로 장사에 차질이 생기게 됨!

 

 

 

접근허용자

[1]private (내부에서만 접근가능, 멤버끼리만 접근)

*해당 클래스 안의 멤버에서만 접근이 가능

*외부객체에서는 절대로 접근을 할 수 없음

*멤버의 은닉화를 시킬 때 사용 -> 은닉, 감추는게 은닉,

*거의 대부분의 멤버필드에 적용

 

 

[2]default

*접근제한자를 명시하지 않은 경우에는 디폴트 접근제한자가 생김

*같은 패키지(폴더)내의 클래스들은 접근을 허용하고, 다른 곳에서는 접근 불가

 

[3] protected

*클래스 멤버를 자신과 같은 패키지(폴더), 상속받은 클래스에서만 접근을 허용

*상속 받는 클래스가 다른 패키지여도 상관없음

 

상속관계클래스 = > public

상속관계아닌 클래스 => private

 

 

[4]public

*다른 클래스에서 해당 멤버를 사용할 수 있음

*보통 멤버 메소드, 생성자에 사용을 함

 

접근 허용자

 

멤버필드 private

 

2) 접근 허용 범위

 

 

 

public > private

 

 

3)은닉화

멤버필드(변수)를 다른 곳에서 직접 접근 못하게 함

*멤버에 접근을 못하게 하기 위해 private을 사용

*접근을 하기 위해 접근 메소드를 만들어 줌

*값을 설정할 때는 sette메소드,

값을 가져올 때는 getter메소드를 사용함

*보통 멤버필드 값을 은닉화해서 값을 보호하는데 이용

 

 

package aaa;


class Sung{
 String name;
 int kor;
}
public class DSD {
 public static void main(String [] args) {
  Sung s = new Sung();
  s.name ="홍길동";
  s.kor = 1000;
 }

}

 

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

 

 

 

package aaa;


class Sung{
 private String name;
 private int kor;
 public Sung(String name) {
  this.name = name;
 }
 public void setKor(int kor) {
  if(kor<0 || kor>100) return;
  this.kor = kor;
 }
 public int getKor();{
 return kor;

}
 public String getName() {
  return name;
 }
}
public class DSD {
 public static void main(String [] args) {
  Sung s = new Sung();
  s.name ="홍길동";
  //이름을 바꿀수 없다
  s.kor = 1000;
  //국어값을 직접 바꿀 수 없다
  s.setKor(1000);
  //값의 범위가 벗어나 입력이 안된다
 }

}

 

캡슐화 되었다.

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

 

 

package aaa;
import java.io.*;
import java.util.Scanner;

class SungJuk{
 private String name;
 private int kor,eng, mat;
 private int tot,rank;
 
 public void setName(String name) { //매개변수 반드시 하나 존재 //set 하고 필드명, 필드명은 대문자가 셋업메소드임
  this.name = name;
 }
 public boolean setKor(int kor) {
  if ( kor<0 || kor>100) return false;
  this.kor = kor;
  return true;
 }
 public boolean setEng(int eng) {
  if ( eng<0 || eng>100) return false;
  this.eng = eng;
  return true;
 }public boolean setMat(int mat) {
  if ( mat<0 || mat>100) return false;
  this.mat = mat;
  return true;
 }
 public void sumTot() {
  tot = kor +eng +mat;
  
 }
 public int getTot() {
  return tot;
 }
 public void clearRank() {
  rank =1;
 }
 public void plusRank() {
 
 rank++;
}
 public void disp() {
  System.out.print(name+"\t");
  System.out.print(kor+"\t");
  System.out.print(eng+"\t");
  System.out.print(mat+"\t");
  System.out.print(tot+"\t");
  System.out.print(rank+"\t");
 }
}

public class Exam_07s {
 public static void main(String [] args) {
  System.out.print("인원수를 입력:");
  Scanner sc = new Scanner(System.in);
 
  int inwon = sc.nextInt();
 
 SungJuk sj[] = new SungJuk[inwon];
 for (int i = 0 ; i <inwon ; ++i) {
  sj[i] =new SungJuk();
  System.out.print("이름을 입력:");
  sj[i].setName(sc.next());
  do {
   System.out.print("국어점수를 입력:");
  }while(!sj[i].setKor(sc.nextInt()));
  do {
   System.out.print("영어점수를 입력:");
   }while(!sj[i].setEng(sc.nextInt()));
  do {
   System.out.print("수학점수를 입력:");
  }while(!sj[i].setMat(sc.nextInt()));
  
  sj[i].sumTot();
  sj[i].clearRank();
   }
 for (int i =0 ; i<inwon ; ++i) {
  for(int j=0 ; j<inwon ; ++j) {
   if(sj[i].getTot() <sj[j].getTot()) sj[i].plusRank();

  }
 }
 System.out.print("이름\t국어\t영어\t수학\t총점\t순위\n");
 for (int i=0; i<inwon;i++) {

  sj[i].disp();
 }
 }
}

 

 

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

 

4)지정예약어

멤버나 클래스의 성질을 지정하는 단어

 

종류 : static , final, static , final, transient, abstract, synchronized, native

 

 

 

 

 

 

 

 

[1] static (공통의, 공용의)

*하나의 클래스로 발생된 모든 객체가 공유하는 필드를 선언할 때 사용

*클래스 명으로 접근

*메모리에 프로그램 시작 후 바로 올라감

*메소드에 선언이 되면 static멤버만 사용 가능

 

 

 

-> 메소드 파트 다시 보기 ㅜ_ㅜ

 

 

 

 

은행에제

 

 

package aaa;

class Bank{
 private String name;
 private double money;
 private float iyul;
 
 public Bank(String name,double money,float iyul) {
  this.name = name;
  this.money = money;
  this.iyul = iyul;
 }
 public void setIyul(float iyul) {
  this.iyul = iyul;
 }
 public void disp() {
  System.out.println(name+"님의 잔액은"+money +"원이고,"+"현재 적용되는 이율은"+iyul*100+"%입니다.");
 }
}
public class Exam_0222222 {
 public static void main(String []  args) {
  Bank aaa= new Bank("aaa",1000,0.02f);
  System.out.println("=====================");
  aaa.disp();
  Bank bbb = new Bank("bbb",1000,0.01f);
  System.out.println("=====================");
  aaa.setIyul(0.01f);
  aaa.disp();
  bbb.disp();
  Bank ccc = new Bank("ccc",1000,0.03f);
  System.out.println("=====================");
  aaa.setIyul(0.03f);
  aaa.disp();
  bbb.setIyul(0.03f);
  bbb.disp();
  ccc.disp();
  
 }
}

 

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

 

 

=====================
aaa님의 잔액은1000.0원이고,현재 적용되는 이율은2.0%입니다.
=====================
aaa님의 잔액은1000.0원이고,현재 적용되는 이율은1.0%입니다.
bbb님의 잔액은1000.0원이고,현재 적용되는 이율은1.0%입니다.
=====================
aaa님의 잔액은1000.0원이고,현재 적용되는 이율은3.0%입니다.
bbb님의 잔액은1000.0원이고,현재 적용되는 이율은3.0%입니다.
ccc님의 잔액은1000.0원이고,현재 적용되는 이율은3.0%입니다.

 

 

 

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

 

 

package aaa;

class Bank{
 private String name;
 private double money;
 private static float iyul;
 
 public Bank(String name,double money,float iyul) {
  this.name = name;
  this.money = money;
  this.iyul = iyul;
 }
 public void setIyul(float iyul) {
  this.iyul = iyul;
 }
 public void disp() {
  System.out.println(name+"님의 잔액은"+money +"원이고,"+"현재 적용되는 이율은"+iyul*100+"%입니다.");
 }
}
public class Exam_0222222 {
 public static void main(String []  args) {
  Bank aaa= new Bank("aaa",1000,0.02f);
  System.out.println("=====================");
  aaa.disp();
  Bank bbb = new Bank("bbb",1000,0.01f);
  System.out.println("=====================");
  aaa.setIyul(0.01f);
  aaa.disp();
  bbb.disp();
  Bank ccc = new Bank("ccc",1000,0.03f);
  System.out.println("=====================");
  //aaa.setIyul(0.03f);
  aaa.disp();
  //bbb.setIyul(0.03f);
  bbb.disp();
  ccc.disp();
  
 }
}

 

 

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

 

그래도 똑같은 값이 나온다. static에 저장되었기 때문에

 

 

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

 

 

package aaa;

class Bank{
 private String name;
 private double money;
 private static float iyul;
 static {
  iyul = 0.02f;
 }
 
 public Bank(String name,double money,float iyul) {
  this.name = name;
  this.money = money;
  Bank.iyul = iyul;
 }
 public void setIyul(float iyul) {
  Bank.iyul = iyul;
 }
 public void disp() {
  System.out.println(name+"님의 잔액은"+money +"원이고,"
 +"현재 적용되는 이율은"+Bank.iyul*100+"%입니다.");
 }
}
public class Exam_0222222 {
 public static void main(String []  args) {
  Bank aaa= new Bank("aaa",1000,0.02f);
  System.out.println("=====================");
  aaa.disp();
  Bank bbb = new Bank("bbb",1000,0.01f);
  System.out.println("=====================");
  aaa.setIyul(0.01f);
  aaa.disp();
  bbb.disp();
  Bank ccc = new Bank("ccc",1000,0.03f);
  System.out.println("=====================");
  //aaa.setIyul(0.03f);
  aaa.disp();
  //bbb.setIyul(0.03f);
  bbb.disp();
  ccc.disp();
  
 }
}

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

 

 

[2] final(마지막 값 x)

 

변수에 사용되면 상수

 

 

public class FinalTest1{

public static void main(String[] args){

final int MAX SPEED = 100;

MAX_SPEED = 150;

 

에러발생! final 변수는 값을 바꿀 수 없다

}

}

 

 

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

 

메소드에 사용되면 메소드 변경 불가

 

class Test1{

public fianal void (String[] args){

System.out.println("바꿀 수 없지롱!!");

 

}

}

 

class Test2 extends Test1{

public void disp(){

System.out.println("에러가 발생하네!!");

 

 

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

 

 

클래스에 설정하면 상속 불가

 

final class Test1{

public void disp(){

System.out.println("이클래스는 상속 못받아!");

}

}

class Test2 extends Test1{

}

 

 

(3) static final

 

*static 기능과 final기능을 합쳐놓은 것

*객체(인스턴스)가 여러개가 되더라도 모든 객체가 값을 따로 가질 필요가 없고

그 값을 상수처럼 사용하고자 할 때 사용하는 키워드

 

 

 

자바의 상수 선언

public static final  멤버필드 ;

 

 

 

 

 

 

 

(4) transient

*직렬화 (serializing), 역직렬화(deserializing)를 하지 않겠다는 뜻

*자바 I/O를 배운 후 공부해 보자

 

 

 

 

 

 

(5) abstract

*추상화를 의미

*추상화메소드가 존재하면 그 클래스는 추상화클래스

*추상화클래스를 상속받으면 반드시 추상화메소드를 구현하여야 함

*추상화클래스는 객체를 생성할 수 없음

 

 

 

 

 

 

(6) synchronized (멀티스레드)

*동기화를 의미

*2개 이상의 스레드가 실행될 때 사용

*스타크래프트의 미네랄을 캐논 것을 생각하면 됨

 

 

 

 

 

 

 

static 프로그램 시작시 1번만 올라감

 

일반구분            //공통의 멤버필드의 초기값

 

A04( )

 

일반구분            //

 

A04(int a)

 

 

 

 

[중첩 클래스 및 상속, 다형성, 추상화, 인터페이스 ] 클래스 기초 1

자바

1. 클래스 기초 1

클래스란?

-> 학교에 최동수, 김순호등 많은 학생들이 있음

- 이때, 공통으로 묶을 수 있는 것은 학생이고, 이것을 클래스라고 함

 

 

-> 한마디로 일반화된 속성과 메소드로 객체를 기술한 것을 클래스라고 함

 

 

 

2) 클래스의 기본 구성

 

형식)

[접근제한자]    [ 지정예약어 ]    CLASS (예약어)    CLASS이름(사용자 명칭)

extends클래스        implements인터페이스 {            //상속관계도

멤버필드     멤버메소드     생성자        중첩클래스}                                        //4가지가 올 수 있음

 

 

* 클래스 밖에 쓰일 수 있는 것은 package, import,(한 글자 입력 받을 때, throws IOException) 또 다른 클래스

 

 

 

 

 

접근제한자 , 지정예약어 생략가능

import

클래스 안에 필드 : 멤버 필드

 

car : 맴버 메소드

 

 

 

 

 

 

 

 

 

2) 클래스의 기본 구성 (4가지)

 

포함 멤버

 

[1] Field

데이터 저장 공간 (멤버변수 - 클래스 안에 있는 멤버)

참고) 메소드 안에서 선언한 변수는 지역 변수라고

 

[2] Method

특정 행위의 기술 영역(멤버메소드)

 

 

[3] Construct

객체 생성 및 초기화를 시켜주는 생성자 메소드

 

[4] Nested Class

중첩클래스

 

 

 

3) 객체(Objext)

 

객체란?(쓸 수 있는 상태)

-> 정수, 실수 또는 문자 등과 같이 단순한 데이터나 자동차, 비행기 등과 같은 복잡한 사물뿐만 아니라

기업에의 공헌도, 이성간의 사랑 등의 추상적 개념에 이르기까지,

인간이 하나의 개념으로 파악하는 모든 것들을 일컫는 것으로 일반적으로 인간에게 인지되는 개념적인 한 단위를 의미함

 

 

 

 

 

 

-1) 객체는 항상 클래스로부터 생성됨

즉, 클래스는 객체를 생성하는 형판 (template)

 

 

-2) 클래스는 두 개의 구성요소 (member)인 자료구조(필드)와 연산 (메소드)을 가짐

 

-3) 클래스로부터 생성된 객체를 instance(인스턴스)라 함

즉, 객체 =instance

 

 

 

-4) 정보처리의 주체는 클래스가 아니라 객체

 

 

-5) 객체지향 프로그래밍의 시작은 클래스의 생성

 

 

3) 객체(Object)

 

프로그래밍에서의 객체란?

사애와 행위의 집합체이다.. 즉 속성(필드, 데이터)와 메소드(함수, 행위)의 집합체임

 

속성(필드)

객체의 정적 특성으로 객체가 가지고 있는 정보를 보관하는 기억장소로 사용되는 데이터 영역

 

 

 

 

메소드 (기능)

객체의 동적 특성으로서 객체의 데이터를 엑세스하거나 또는 객체가 가지고 있는 속성을 변경하는 일을

 

int a[] ;                                 a=new int[5];                                int a [] = new int[5];

 

 

 

 

4) 클래스와 객체

 

객체지향 프로그램은 3단계로 진행됨

-> 자동차 객체를 예를 들어 설명하면 추상화 작업은 프로그램에 적합하게 자동차 객체를 설계 하는 것임

 

 

 

 

 

new 연산자가 힙 영역에 메모리 할당 할당 후

되돌려 주는 주소는 참조 변수에 저장됨

 

 

car01 참조 변수                         시제자료->힙                Car ( ); - > 생성자

 

 

 

 

 

 

 

 

참조 변수와 객체 -> 힙에 저장

 

 

 

 

 

 

닷(.) 멤버 참조 연산자로 필드에 접근

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5) 클래스 사용법

 

 

 

객체 생성

 

 

사람으로썬 같으나 속성은 다 다르다.

 

 

 

 

 

 

 

6) 생성자

 

 

 

생성자 정의

 

생성자 : 클래스로부터 객체가 생성될 때 초기화 과정을 기술하는 특수한 메소드

 

-클래스명과 동일한 메소드

-결과형 리턴값이 없음

-객체 생성 시 반드시 하나의 생성자 호출

-생성자를 없으면 자동으로 default생성자가 생김 ->JVM(자바 가상 기계) 이 만든다

-생성자 오버로딩 할 수 있음

-멤버 필드 값 초기화를 위해 만든 메소드

-객체를 생성할 때만 사용이 가능

 

 

 

 

 

 

 

 

 

 

객체 생성하기

 

class Person{

String name;

int age;

}

public class Exam_01{

public static void main(String [] args){

Person p1 = new Person();

p1.name="태연";

p1.age=25;

}

}

 

 

 

 

 

 

 

 

 

 

 

생상자의 오버로딩

 

 

 

 

 

 

 

7) this, this메소드

 

* 객체를 선언한 후, 객체 자신을 의미

*this 뒤에 참조연산자(.)를 붙여 멤버 접근 가능

*this(매개변수)를 하면 객체가 가지고 있는 생성자 호출

*this() 사용시 반드시 생성자의 첫 번째 줄에 써야 함

 

 

 

 

 

 

 

 

 

8) 객체의 사용

 

객체참조변수는 해당 객체의 멤버변수와 메소드를 사용할 수 있음

 

사용법

객체참조변수.메소드이름();

객체참조변수.멤버변수이름;

 

 

 

 

 

 

9) 객체로 변환하기

 

기존에 만들었던 방 관리 프로그램을 클래스로 변환하여 만들어보자

 

package ch06;

import java.io.IOException;
import java.util.Scanner;

class Room{
 boolean room[];
 Scanner sc;
 int roomsu;
 Room(){
  sc = new Scanner(System.in);
  System.out.print("방의 갯수를 입력:");
  roomsu = sc.nextInt();
  room = new boolean[roomsu];
 }
 
 Room(int roomsu){
  room = new boolean[roomsu];
  //배열은 맨처음 선언해주면 boolean의 초기값은 false로 만들어진다.
  sc = new Scanner(System.in);
  this.roomsu = roomsu;
 }
 public void input() {
  int roomNumber;
  do {
  System.out.print("입실하실 방의 번호:");
  roomNumber = sc.nextInt();
  }while(roomNumber<1 || roomNumber>roomsu);
  //if (roomNumber<1 || roomNumber>roomsu) input();
  
  if(room[roomNumber-1]) {
   System.out.println(roomNumber+"호실은 사용중입니다");
  }else {
   System.out.println(roomNumber+"호실에 입실하셨습니다");
   room[roomNumber-1] = true;
   
  }
 }
 public void output() {
  int roomNumber;
  do {
  System.out.print("퇴실하실 방의 번호:");
  roomNumber = sc.nextInt();
  }while(roomNumber<1 || roomNumber>roomsu);
  //if (roomNumber<1 || roomNumber>roomsu) input();
  
  if(!room[roomNumber-1]) {
   System.out.println(roomNumber+"호실은 빈 방입니다");
  }else {
   System.out.println(roomNumber+"호실에 퇴실하셨습니다");
   room[roomNumber-1] = false;
   
  }
 }
 public void view() {
  for(int i =0 ; i<roomsu; ++i) {
   if(room[i]) {
    System.out.println(i+1+"호실은 사용중입니다");
   }else {
    System.out.println(i+1+"호실은 빈방입니다");
   }
  }
 }
 
  
 public void exit() {
  System.out.print("프로그램을 종료합니다");
  System.exit(0); //프로그램을 영구히 종료합니다.
 }
}
public class Exam_01 {
 public static void main(String[] args) throws IOException {
  Scanner sc = new Scanner(System.in);
  Room room = new Room();
  while(true) {
   System.out.print("1.입실 2.퇴실 3.방보기 4.종료:");
   int select = System.in.read()-48; // 1,\r, \n //0에 대한 아스키코드값 48
   sc.nextLine(); //엔터키가 들어올때까지 입력을 받겠다.
   switch(select) {
   case 1:
    room.input(); break;
   case 2:
    room.output(); break;
   case 3:
    room.view(); break;
   case 4:
    room.exit(); break;
   default :
    System.out.println("잘못 입력하셨습니다");
    
   }
   
  }
 }

}

 

 

 

 

10) 클래스 배열

 

클래스 배열 만들기

 


 

 

클래스를 배열로 만들 때는 먼저 배열을 만들어 준 후, 각각의 배열마다 객체를 선언해 줘야 함

 

 

11) 클래스 배열 문제 풀이

 

성적관리 프로그램을 클래스로 바꾸어 만들어 보자

 

 

package ch06;

import java.util.Scanner;

class SungJuk{
 String name;
 int kor,eng,mat;
 int tot,rank;
 
 public void sumTot() {
  tot = kor+ eng+mat;
 }
 public void disp() {
  System.out.print(name+"\t");
  System.out.print(kor+"\t");
  System.out.print(eng+"\t");
  System.out.print(mat+"\t");
  System.out.print(tot+"\t");
  System.out.print(rank+"\t");
  
 }
}
public class Exam_02 {
 public static void main(String[]args) {
  System.out.print("인원수를 입력:");
  Scanner sc = new Scanner(System.in);
  int inwon = sc.nextInt();
  
  SungJuk sj[] = new SungJuk[inwon];
  
  for (int i=0 ; i<inwon ; i++) {
   sj[i] = new SungJuk();
   System.out.print("이름을 입력:");
   sj[i].name = sc.next();
   System.out.print("국어점수를 입력:");
   sj[i].kor = sc.nextInt();
   System.out.print("영어점수를 입력:");
   sj[i].eng = sc.nextInt();
   System.out.print("수학점수를 입력:");
   sj[i].mat = sc.nextInt();
   sj[i].sumTot();
   sj[i].rank=1;
   
   
   
  }
  for(int i =0 ; i<inwon ; i++) {
   for (int j=0 ; j<inwon ; j++) {
    if (sj[i].tot <sj[j].tot)sj[i].rank++;
   }
  }
  
  System.out.print("이름\t국어\t영어\t수학\t총점\t순위\n");
  for(int i=0 ; i<inwon ; i++) {
   sj[i].disp();
  }
 }
 
}

 

[배열과 메소드] 메소드의 개요

자바

1. 메소드의 개요

1) 메소드를 사용하는 이유

 

만약 전교생 10000명의 국어 점수를 입력해야 한다면?

코드가 굉장히 지저분해 질것임

 

 

[1] 코드를 간결하게 만들고자 할 때

여러번 실행해야 하는 코드가 있다면 메소드를 만들어 놓고 호출하여 사용

 

[2] 기능을 만들고자 할 때

기능별로 나누어서 프로그램을 작성하면, 나중에 그 기능별로 따로 가져다 사용 할 수 있음

 

2) 메소드의 형식

 

[접근제한자 ]    [지정예약어]    반환형    메소드명    (매개변수)

예외전가{.....} -> throws IOException

 

 

[1] 접근 제한자

private (자신의 클래스에서만 사용되도록 제한)

default(동일한 폴더에서만 사용되도록 제한)

protected (동일한 폴더 + 상속받은 클래스로 제한)

public (객체가 선언된 곳이면 어디에서든 사용)

 

 

 

[2] 지정예약어

class편에서 자세히 알아보자

static : 지금 수업에선 static만 알아두자

final

static final

abstract

synchronized

native

 

[3] 반환형

기본자료형            int     double

참조자료형            class를 객체화 -> class 보고 나서

void - 반환형이 없을 때 사용

 

 

[4] 메소드명

사용자 정의 명칭으로 형식에 맞게 입력

첫글자는 영문 소문자,_,$

 

[5] 매개변수

메소드 사용시 필요한 값을 받을 수 있는 곳

 

[6] 예외전가        throws IOException

예외가 발생하여 전가를 시키고자 할 때

 

 

 

 

3) 메소드 사용 예

 

 

 

 

 

4) 메소드의 4가지 형식

 

 

5) main 메소드 구성

 

main=> public static메소드만 호출 가능

 

6) 메소드 예제

두수를 입력 받아 그 합을 구하는 프로그램

 

package aaa;
import java.io.IOException;
import java.util.*;
public class methodTest1 {
 public static void main(String[] args) throws IOException{
  int su1 = input();        //input 매개변수 없었음
  int su2 = input();
  int sum = plus (su1,su2);    //두 수의 합이니깐 두수를 넣어 주어야 함
  output(sum);
 }
  public static int input() {
   Scanner sc = new Scanner(System.in);
   System.out.print("임의의 수를 입력:");
   int su = sc.nextInt();
   return su;
  }
  public static int plus(int su1, int su2) {
   return su1+su2;
 }
  public static void output(int sum) {
   System.out.println("입력하신 수의 합:"+sum);
  }

}

 

 

 

^메인을 복잡하게 만들지 않습니다

 

7) 메소드 오버로드

메소드 오버로드 : 메소드의 이름을 여러번 사용 할 수 있는 기능

 

메소드의 이름이 같고, 매개변수가 틀린 메소드 집합

매개변수가 틀린다는 말은, 자료형이 다르거나, 매개변수의 개수가 다르거나, 자료형 순서가 다른 것을 말함

반환형은 조건에 해당하지 않음

 

 

 

 

c언어 함수이름

객체지향 언어 함수이름+매개변수

 

 

 

 

 

 

 

 

8) 메소드 오버로딩

두 수를 입력 받아 그 합을 알려주는 프로그램

 

 public byte add(byte a, byte b) {
  return (byte)(a+b);
 }
 public int add (int a, int b) {
  return a+b;
 }
 public double add(double a, double b) {
  return a+b;
 }
}

 

 

 

 

9) 메소드 재귀호출

-> 메소드 내에서 자신을 또 호출 할 때 주의 할점은 반드시 종료 시점이 있어야 함

 

 

public static void disp(){

disp();

}

 

단점 : 끝나는 시점이 없음 , 오버플로우가 됨

 

 

 

팩토리얼 계산 프로그램

5! =120 이라는 결과가 나올 수 있도록 메소드 작성

 

 

 

(사람풀이) 5! = 5 *4 *3 *2 *1 =120

(컴퓨터의 풀이) 5! = 5*4!; 4!=4*3! = 3*2! ; 2! = 2*1! ; 1!=1

 

실습 : 피보나치 수열을 알아보고 프로그램을 작성

 

 

package aaa;
import java.util.*;
import java.io.*; // 한글자 입력
public class dd43 {
 public static void main(String[] args)throws IOException {
  // 두개의 수와 한개의 산술연산자를 입력받아 그 연산자 대로 하는 프로그램
  //단, 연산자가 뺼셈일 떄는 큰수에서 작은 수를 빼서 결과를 알려주세요
  //단, 나눗셈일 때는 2번째 수가 0이면 1로 고쳐서 결과를 알려주세요
  
  //메소드를 이용하여 만들기
  Scanner sc = new Scanner(System.in);
  
  int su1 = input();
  int su2 = input();
      System.out.print("산술연산자를 입력:");
          char op =(char)System.in.read(); //한글자 입력
  int result =0;
      switch(op) {
          case '+':
               result = plus(su1,su2);
               break;
              case '-':
           result = min(su1,su2);
                   break;
          case '*':
              result = mul(su1,su2);
               break;
          case '/':
               result = div(su1,su2);
                   break;
   
       default :
            System.out.println("연산자를 잘못 입력 하셨습니다." );
  }
  System.out.println("결과:"+result);
 }
 public static int plus(int a ,int b) {
  return a+b;
 }
 public static int min(int a, int b) {
  if(a>b) return a-b;
  else return b-a;   //큰수에서 작은 수 빼야하니깐
 }
 
 
 public static int mul (int a, int b) {
  return a*b;
 }
 public static int div(int a, int b) {
  if(b==0) b=1; //만약 b가 0이면 b를 1로 바꿔줘라
  return a/b;
 }
 public static int input() {
  Scanner sc = new Scanner(System.in);
  System.out.print("임의의 수를 입력:");
  int su = sc.nextInt();
  return su;
  
  
  
 }
}

 

 

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

 

package aaa;
import java.util.*;
public class Exam_02 {
 public static void main(String [] args) {
  //팩토리얼 구하기
  Scanner sc =new Scanner(System.in);
  System.out.print("팩토리얼의 수를 입력:");
  int facSu = sc.nextInt();
  
  System.out.printf("%d의 팩토리얼 결과값은 %d입니다.\n", facSu , factorial(facSu));
  
 }
 public static int factorial(int n) {
  if(n==1) return 1;
  return n* factorial(n-1);
  
 }
}

 

 

 

 

팩토리얼의 수를 입력:5
5의 팩토리얼 결과값은 120입니다.

 

 

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

 

package aaa;

public class Exam_03 {
  public static void main(String[] args) {
   //피보나치 수열 구하기
   //1,1,2,3,5,8,13,21,34,55,89,........
   
   for ( int i =1 ; i <10 ; ++i) {
      System.out.print(Pivo(i)+" , ");
   }
   System.out.println(Pivo(10));
   
  }
  public static int Pivo(int n) {
   if(n<=2) return 1;
   return Pivo(n-2) + Pivo(n-1);
  }
}

 

 

1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55

 

 

 

 

 

 

 

[배열과 메소드]배열의 개요

자바

1. 배열의 개요

1) 배열을 사용하는 이유

 

예시 학생 5명의 성적을 저장해야 한다면

int s1 , s2, s3 , s4 , s5;

 

 

 

만약 전교생 (10000명) 의 저장해야 한다면?

 

같은 종류의 데이터(자료형)를 저장하기 위한 자료 구조

 

* 배열을 객체로 취급

* 배열을 선언할 때 배열의 크기를 명시하지 않음

* [ ] (배열첨자연산자) 는 앞에 오나 뒤에 오나 상관이 없음

 int []a = new(할당연산자) int [5]

 int a[] = new int[5]'

 int a[];a = new int[5];

* 어떤 형으로 사용할 것인가를 정하고 배열변수를 정해줌

 

 

2) 1차원 배열의 선언

 

자바에서의 배열순서

배열의 선언 -> 배열의 메모리 할당 (배열의 생성) -> 배열 요소(원소)의 이용

 

 

배열 : 자료형이 동일한 여러개의 값을 연이어 저장할 수 있도록 하는 기억 공간의 집합체(모임) 

 

원소: 배열에 저장된 각각의 값

 

인덱스 : 배열의 원소에 접근하기 위한 첨자

a[0] , a[1] ...

-> 자바에서의 인덱스는 0부터 시작

 

 

3) java메모리 구조

 

힙:동적메모리

 

4) 배열의 생성

래퍼런스 변수란?

기본 데이터를 값으로 갖는 것이 아니고, 메모리상이 다른 객체나 배열을 가리키고 있는 변수임

 

 

int [] a =new(동적 메모리 할당 연산자) int [5]

 

 

5) 1차원 배열 초기값

초기 값을 콤마로 구분하여 여러 번 기술하고 이들을 중괄호 {} 로 감싸줌

 

int [ ] a (원소 갯수 쓰면 큰일난다.. 절대 쓰지 마..) = {10,20,30,40,50};

int [ ] a = new int[ ] {10,20,30,40,50};

 

 

6) 1차원 배열의 원소 입력, 출력

[배열의 원소 값들을 입력하기]

 

int a[] = new int[5];

 

for (i=0 ; i<a.length ; i++)

a[i] = (i+1)*2;

 

 

* a.length

배열명. -> 배열명이 가지고 있는 갯수가 몇입니까?

* 배열의 개수를 알아 낼 수 있음

 

 

[배열의 원소 값들을 출력하기]

 

 

10개의 수를 입력 받아 입력한 수와 합을 출력하는 프로그램

 

 

 

package aaa;
import java.util.*;
public class aa13 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  int arr[] = new int[10]; //메모리에 10개를 저장할 공간을 확보
  int sum =0;
  for (int i=0 ; i<arr.length ; ++i) {
   System.out.print(i+1+"번째 수를 입력:");
  arr[i] = sc.nextInt();
  sum+=arr[i];
 }
  for (int i=0 ; i<arr.length-1 ; ++i) { //8번방 까지 나타내주세요.
   System.out.print(arr[i]+"+");
  }
  System.out.println(arr[9]+"="+sum); //9번방만,,
}
}

 

 

1번째 수를 입력:3
2번째 수를 입력:1
3번째 수를 입력:5
4번째 수를 입력:7
5번째 수를 입력:9
6번째 수를 입력:2
7번째 수를 입력:6
8번째 수를 입력:1
9번째 수를 입력:0
10번째 수를 입력:6
3+1+5+7+9+2+6+1+0+6=40

 

 

 

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

 

7) 배열 예제

 

10개의 수를 입력 받아 낮은 수부터 출력하기 (정렬)

 

 select sort

 

 

 

package aaa;
import java.util.*;
public class aa14 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  int arr[] = new int[10];
  
  for (int i =0 ; i<arr.length ; i++) { //++i 둘 다 사용 해도 됨
   System.out.print(i+1+"번째 수를 입력:"); //컴퓨터는 0부터 시작하니깐
   arr[i] = sc.nextInt();
   
  }
  
  for(int i=0 ; i<arr.length -1 ; i++) { //오름차순
   //select sort에서 비교할 때는 비교 대상은 마지막 자리는 안한다.
   
   for(int j=i+1 ; j<arr.length ; j++) { //기준보다 하나 큰 위치 부터 시작한다.
    if (arr[i] >arr[j]) {
     int imsi = arr[i];
     arr[i] = arr[j];
     arr[j] = imsi;
    }
   }
   
   
  }
  for (int i = 0 ; i<arr.length ; i++) {
   System.out.print(arr[i]+",");
  }
  System.out.println(arr[9]); //마지막,해주지 않기 위해 
 }
}

 

 

 

 

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

 

8) 배열의 동적 할당

 

배열은 선언 후, 나중에 변수 값으로 할당 받을 수 있음

 

 

int arr [] ;

int inwon = 5;

arr = new int[inwon];

 

-> inwon값이 변경되면 배열의 수도 변경됨

 

 

 

9) 동적할당 예제

 

 

인원수를 입력받고, 그 인원수 만큼 이름과 전화번호를 입력받아 출력해주세요

 

package aaa;

import java.util.Scanner;

public class dd6 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("인원수를 입력:");
  int inwon = sc.nextInt();
  
  
  String name[] = new String[inwon]; //문자열 형식 string
  String tell[] = new String[inwon];
  
  for (int i=0 ; i<inwon ; ++i) {
   System.out.print("이름을 입력:");
   name[i] = sc.next();
   System.out.print("전화번호를 입력:");
   tell[i] = sc.next();
  }
  for (int i =0 ; i<inwon ; i++) {
   System.out.println(name[i]+"님의 전화번호는"+tell[i]+"번입니다.");
  }
 }
}

 

 

 

 

 

 

인원수를 입력:3
이름을 입력:홍길동
전화번호를 입력:1234
이름을 입력:유재석
전화번호를 입력:2345
이름을 입력:박명수
전화번호를 입력:3456
홍길동님의 전화번호는1234번입니다.
유재석님의 전화번호는2345번입니다.
박명수님의 전화번호는3456번입니다.

 

 

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

 

인원을 설정하고 이름, 국어, 영어, 수학, 점수를 입력 받아 총점과 순위까지 출력해주는 프로그램

 

 

package aaa;
import java.util.*;
public class dd77 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("인원수를 입력:");
  int inwon = sc.nextInt();
  
  
  String name [] = new String[inwon];
  int kor[] = new int[inwon];
  int eng[] = new int[inwon];
  int mat[] = new int[inwon];
  int tot[] = new int[inwon];
  int rank[] = new int[inwon];
  
  for ( int i =0 ; i<inwon ; ++i) {
   System.out.print(i+1+"번째 학생 이름:");
   name[i] = sc.next();
   System.out.print(i+1+"번째 학생 국어 점수:");
   kor[i] = sc.nextInt();
   System.out.print(i+1+"번째 학생 영어 점수:");
   eng[i] = sc.nextInt();
   System.out.print(i+1+"번째 학생 수학 점수:");
   mat[i] = sc.nextInt();
   tot[i] = kor[i] +eng[i] + mat[i];
   rank[i] = 1; // 제일 성적이 좋으면 1등이다.
  }
  
  //전체를 1등으로 만들고 내 성적 다른사람 성적보다 떨어지면 내순위를 1등씩 올린다
  for (int i =0 ; i<inwon ; ++i) {
   for (int j =0 ; j<inwon ; ++j) {
    if (tot[i] <tot[j])rank[i]++;
   }
  }
  System.out.print("이름\t국어\t영어\t수학\t총점\t순위\n");
  for(int i=0 ; i<inwon; ++i) {
   System.out.print(name[i] +"\t");
   System.out.print(kor[i] +"\t");
   System.out.print(eng[i] +"\t");
   System.out.print(mat[i] +"\t");
   System.out.print(tot[i] +"\t");
   System.out.print(rank[i] +"\n");

   
  }
 }
}

 

 

 

 

인원수를 입력:3


1번째 학생 이름:유재석
1번째 학생 국어 점수:33
1번째 학생 영어 점수:44
1번째 학생 수학 점수:55
2번째 학생 이름:박명수
2번째 학생 국어 점수:33
2번째 학생 영어 점수:22
2번째 학생 수학 점수:55
3번째 학생 이름:정준하
3번째 학생 국어 점수:77
3번째 학생 영어 점수:66
3번째 학생 수학 점수:44


이름 국어 영어 수학 총점 순위
유재석 33 44 55 132 2 
박명수 33 22 55 110 3 
정준하 77 66 44 187 1 

 

 

 

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

10) Random

 

컴퓨터가 난수를 발생시키는 방법

 

Math.random()

Random(클래스)

 

 

System.out.println("난수=" + Math.random());

 

1~10 사이의 정수값 뽑기

int ran = (int)(Math.random()*10)+1;

 

11) Math.random() 예제

 

up, down게임 만들기

 

예를 들어 컴퓨터가 75를 선택했다고 가정

(컴퓨터수를 random수로 한다)

 

1~100 사이의 수를 선택 :50

up

1~100 사이의 수를 선택 : 70

up

1~100사이의 수를 선택 :80

down

1~100사이의 수를 선택

 

 

 

 

package aaa;
import java.util.*;
public class sfsdf {
 public static void main(String[]args) {
  int comsu=(int)(Math.random()*100)+1; //1부터 시작이니깐.. 정수이니깐
  int count = 0 ;
  Scanner sc = new Scanner(System.in);
  
  
  while(true) {
   System.out.print("1~100사이의 수를 입력:");
   int selectSu = sc.nextInt();
   count++;
   
   if ( comsu == selectSu)break;
   else if ( comsu>selectSu) System.out.println("up");
   else System.out.println("down");
  }
  System.out.println(count+"번만에 맞추셨습니다");
 }
}

1~100사이의 수를 입력:50
up
1~100사이의 수를 입력:80
down
1~100사이의 수를 입력:70
up
1~100사이의 수를 입력:77
down
1~100사이의 수를 입력:75
down
1~100사이의 수를 입력:76
down
1~100사이의 수를 입력:73
up
1~100사이의 수를 입력:74
8번만에 맞추셨습니다

 

 

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

 

로또 게임 만들기 프로그램

 

컴퓨터가 6개의 임의의 수를 선택하게 한 후, 사용자가 6개의 수를 입력하여 맞춘 개수를 알려주는 프로그램

단, 6개를 다 맞추면 축하한다는 메시지도 같이 출력해주자

 

 

중복되지 않은 6개의 수

1~45번 중 선택을 해야 함

 

 

 

 

package aaa;

import java.util.*;

public class afafds {
 public static void main(String [] args) {
  
  int comsu [] = new int[6]; // 배열 선언
  int yousu[] = new int[6]; //사용자 수 선언
  
  for (int i =0 ; i<comsu.length ; i++) {
   comsu[i] = (int)(Math.random()*45)+1; // 1~45까지
   
   for (int j=0 ; j<i ; ++j) { //중복되는 경우 빼기
    if(comsu[i] == comsu[j]) {
     i--; break;
    }
   }
  }
  //사용자 수 받기
  Scanner sc = new Scanner(System.in);
  
  //컴퓨터수 받기
  for (int i =0 ; i<comsu.length ; i++) {
   do {                    //do while 무조건 1번만 값을 받을 떄
       System.out.print(i+1+"번째 수를 입력:");
       yousu[i]=sc.nextInt();
   }while(yousu[i]<1 || yousu[i]>45);
   for (int j=0 ; j<i ; ++j) { //중복되는 경우 빼기
    if(yousu[i] == yousu[j]) {
     i--; break;
 }
}
  }
  
  int count = 0 ;
  for (int i=0 ; i<comsu.length ; i++) {
   for (int j=0; j<yousu.length ; ++j) {
    if (comsu[i] == yousu[j]) {
     count++;
     
     break;
     
    }
   }
  }
  if (count == 6) System.out.println("축하합니다. 전부 다 맞추셨습니다.");
  else System.out.println(count+"개를 맞추셨습니다.");
 }
}

 

 

1번째 수를 입력:22
2번째 수를 입력:25
3번째 수를 입력:40
4번째 수를 입력:12
5번째 수를 입력:44
6번째 수를 입력:21
1개를 맞추셨습니다.

 

 

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

 

 

12) 2차원 배열

2차원 배열은 1차원 배열을 여러개 묶어서 사용한 형태로 이해

 

 

 

데이터형 배열 변수명 [] [] ; 혹은 데이터형 [] []

 

 

14) 배열의 생성

array-name = new type[size];

 

 

int name [] [] = new int[4][5]; (정적)

 int name [] [] = new int[3][ ]; (동적)

 

 

 

 

int name[5] , int name = new int[ ] [3] 은 가능하지 않음

 

 

15) 2차원 배열 예제

 

 

 

package aaa;

public class dsfsafsd {
 public static void main(String [] args) {
  int arr1[][];
  int[][] arr2;
  int[] arr3[];
  
  
  int arr4[][] = new int[3][4];
  int arr5[][] = new int[3][];
  arr5[0] = new int[2];
  arr5[1] = new int[3];
  arr5[2] = new int[4];
  
  
//  int arr4[][][];
//  int[][][] arr5;
//  int[][] arr6[];
//  int[] arr7[][];
  
 }
}

마방진 만들기

 

시작점은 첫 번 쨰줄 가운데

오른쪽 대각선으로 이동

이동한 곳에 행의 값이 음수이면 그 열의 최대값으로 이동

이동한 곳에 열의 값이 배열을 벗어나면 그 행의 최소값으로 이동

이동한 곳에 데이터가 있다면 원래 위치로 이동 후 행을 하나 증가

 

 

package aaa;

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

  //홀수 마방진, 5의 마방진
  //가로, 세로, 대각선의 합이 모두 같은 진
  
  int arr[][] = new int[5][5];
  int i=0, j=2; // 1.첫번 째 줄 가운데 열에서 시작
  int co =1;
  while (co<=25) {
   arr[i][j] = co ;
   int oldI=i;
   int oldJ =j;
   i--; j++; // 2. 오른쪽 대각선 위로 이동
   if (i<0) i =4; // 3.행이 음수가 되면 그 열의 최대행으로 이동
   if (j>4) j=0; // 4.열이 배열의 값을 벗어나면 0열로 이동
   if (arr[i][j] !=0) { // 5. 이동할 곳에 데이타가 존재하면 
    i = oldI;
    j = oldJ;    //원래ㅐ 위치로 이동하고
    i++;        //행을 하나 증가시킨다.
   }
   co++;
  }
  for(i=0 ; i<5 ; ++i) {
   for (j=0 ; j<5 ; ++j) {
    System.out.printf("%2d",arr[i][j]);
   }
   System.out.println();
  }
 }
}

 

 

 

  17  24   1   8  15
  23   5   7  14  16
   4   6  13  20  22
  10  12  19  21   3
  11  18  25   2   9

 

 

 

 

 

'자바' 카테고리의 다른 글

[중첩 클래스 및 상속, 다형성, 추상화, 인터페이스 ] 클래스 기초 1  (0) 2018.09.10
[배열과 메소드] 메소드의 개요  (0) 2018.09.10
반복문  (0) 2018.09.10
제어문  (0) 2018.09.10
자바 연산자  (1) 2018.09.09

반복문

자바

2. 반복문

 

1) 반복문 - while문

제일 많이 사용하는 문

 

 

* 조건 잘 못 주면 무한 반복

 

* 항상 조건의 값은 true, false임

 

* 실행문이 한줄일 떄에는 {} 생략 가능

 

 

while(조건)

{

조건이 참이면 실행한다.

}

 

//1부터 10까지의 합을 구한다.

package aaa;

public class WhileTest1 {
 public static void main(String [] args) {
   int sum=0;
   int i=1;
   
   while(i<=10) {
    sum+=i;
    i++;
   }System.out.println(sum);
 }
}

 

 

->55

 

 

sum             i

0                1

1                2

3                3

6                4

10                5

15                6

45                10

55                11

 

 

 

 

 

package aaa;

public class Exam_06 {
 public static void main(String [] args) {
  int sum=0;
  int i=1;
  
  
  while(i<=10) {
   sum += i; //sum=sum+i;
     System.out.printf("i가 %d일 때, 결과는 %d 입니다\n", i,sum);
   i++;
  }
 }
}

 

i가 1일 때, 결과는 1 입니다
i가 2일 때, 결과는 3 입니다
i가 3일 때, 결과는 6 입니다
i가 4일 때, 결과는 10 입니다
i가 5일 때, 결과는 15 입니다
i가 6일 때, 결과는 21 입니다
i가 7일 때, 결과는 28 입니다
i가 8일 때, 결과는 36 입니다
i가 9일 때, 결과는 45 입니다
i가 10일 때, 결과는 55 입니다

 

 

 

 

 

 

2) do - while문

 

 

while문과 거의 비슷하지만

일단 먼저 한번은 실행문을 실행하고 비교를 함

 

do{

실행문;

}

while(조건)

 

 

 

 

 

 

1.수를 입력 받아 그 수까지의 합을 구하는 프로그램

 

package aaa;
import java.util.*;
public class aa08 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("수입력:");
  int su = sc.nextInt();

  
  int i =1;
  int sum=0;
  
  while(i<=su) {
   sum+=i;
   i++;
  }
  
  System.out.printf("1~%d까지의 합:%d\n",su,sum);
 }
}

 

수입력:10
1~10까지의 합:55

 

 

 

2.국어 점수를 입력 받아 값이 0~100 사이의 값이 아니라면 계속해서 입력 받는 프로그램

package aaa;
import java.util.*;
public class aa09 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  

  
  int kor; // 지역변수 (자신의 지역에서만 사용가능)
  
  do {
   System.out.print("국어 점수입력:");
   kor = sc.nextInt();
  }while (kor<0 || kor>100);
  System.out.print("입력하신 국어 점수"+kor);
 }
}

 

3. 임의의 수를 입력 받아 그 합과 평균을 구하는 프로그램 ( 단, 음수나 0을 입력 하면 입력을 종료)

 

package aaa;
import java.util.*;
public class aa10 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  
  int sum = 0;
  int count = 0; //몇번 입력하는지 세는 카운트
  
  while(true) {
   System.out.print("임의의 수 입력:");
   int su = sc.nextInt();
   
   if (su<=0) break;
   sum+=su;
   count++;
  }System.out.printf("입력하신 횟수: %d , 총합:%d , 평균 : %6.2f\n", count, sum, sum/(float)count);    //소수점 2자리를 나타낼수 있게
 }
}

 

 

임의의 수 입력:10
임의의 수 입력:20
임의의 수 입력:30
임의의 수 입력:-1
입력하신 횟수: 3 , 총합:60 , 평균 :  20.00

 

 

 

 

4) 반복문 for 문

반복횟수를 정해주어서 정해진 횟수만큼 반복을 하는 문

-> 아주 유용하게 잘 쓰이는 문

 

 

for( 반복변수 초기화 ; 반복변수 조건검사 ; 반복변수의 값 변화)

1                    2,5,8                      4,7

{

실행문

3,6

}

 

 

0    3    6    9    

for (int i=0; i<=10 ; i+=3)

 

 

 

1    6    11    16

for(int i=1; i<=20; i+=5)

 

 

 

2    4    8    16    32    64

for ( int i=2 ; i<=100 ; i*2)

 

 

 

 

//1부터 100까지의 홀수의 합을 구하시요

 

 

package aaa;

public class ForTest1 {
 public static void main(String [] args) {
  int sum = 0;
  for (int i=0 ; i<=100 ; i+=2) { i++ if(i%2!=0) { 2가지 방법


  sum +=i;
   System.out.println("i가 "+i+"일때 sum은"+sum+"이다");
  }
 }
}

 

 

i가 0일때 sum은0이다
i가 2일때 sum은2이다
i가 4일때 sum은6이다
i가 6일때 sum은12이다
i가 8일때 sum은20이다
i가 10일때 sum은30이다
i가 12일때 sum은42이다
i가 14일때 sum은56이다
i가 16일때 sum은72이다
i가 18일때 sum은90이다
i가 20일때 sum은110이다
i가 22일때 sum은132이다
i가 24일때 sum은156이다
i가 26일때 sum은182이다
i가 28일때 sum은210이다
i가 30일때 sum은240이다
i가 32일때 sum은272이다
i가 34일때 sum은306이다
i가 36일때 sum은342이다
i가 38일때 sum은380이다
i가 40일때 sum은420이다
i가 42일때 sum은462이다
i가 44일때 sum은506이다
i가 46일때 sum은552이다
i가 48일때 sum은600이다
i가 50일때 sum은650이다
i가 52일때 sum은702이다
i가 54일때 sum은756이다
i가 56일때 sum은812이다
i가 58일때 sum은870이다
i가 60일때 sum은930이다
i가 62일때 sum은992이다
i가 64일때 sum은1056이다
i가 66일때 sum은1122이다
i가 68일때 sum은1190이다
i가 70일때 sum은1260이다
i가 72일때 sum은1332이다
i가 74일때 sum은1406이다
i가 76일때 sum은1482이다
i가 78일때 sum은1560이다
i가 80일때 sum은1640이다
i가 82일때 sum은1722이다
i가 84일때 sum은1806이다
i가 86일때 sum은1892이다
i가 88일때 sum은1980이다
i가 90일때 sum은2070이다
i가 92일때 sum은2162이다
i가 94일때 sum은2256이다
i가 96일때 sum은2352이다
i가 98일때 sum은2450이다
i가 100일때 sum은2550이다

 

 

 

 

 

 

구구단 만들기

 

package aaa;
import java.io.*;
public class Exam_10 {
 public static void main(String [] args) throws IOException{
  System.out.print("단수를 입력:");
  
  
  int dan = System.in.read()-48;
  
  
  for (int i=1 ; i<=9 ; ++i) {
   System.out.println(dan+"*"+i+"="+dan*i);
  }
 }
}

 

 

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

 

 

package aaa;
import java.io.*;
public class Exam_10 {
 public static void main(String [] args) throws IOException{

  
  for(int dan=2 ; dan<=9 ; dan++)
      for (int i=1 ; i<=9 ; ++i) {
   System.out.println(dan+"*"+i+"="+dan*i);
   }
  

 }
}

 

 

다중for문

 

 

 

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

 

 

package aaa;

public class Exam_11 {
 public static void main(String[] args) {
  for ( int i =1 ; i<=9 ; ++i) {
   for ( int dan =2 ; dan<=9 ; ++dan) {
    System.out.printf("%d*%d=%2d   ",dan,i,dan*i );
   }
   System.out.println(); //줄갱
  }
 }
}

 

 

 

2*1= 2   3*1= 3   4*1= 4   5*1= 5   6*1= 6   7*1= 7   8*1= 8   9*1= 9  
2*2= 4   3*2= 6   4*2= 8   5*2=10   6*2=12   7*2=14   8*2=16   9*2=18  
2*3= 6   3*3= 9   4*3=12   5*3=15   6*3=18   7*3=21   8*3=24   9*3=27  
2*4= 8   3*4=12   4*4=16   5*4=20   6*4=24   7*4=28   8*4=32   9*4=36  
2*5=10   3*5=15   4*5=20   5*5=25   6*5=30   7*5=35   8*5=40   9*5=45  
2*6=12   3*6=18   4*6=24   5*6=30   6*6=36   7*6=42   8*6=48   9*6=54  
2*7=14   3*7=21   4*7=28   5*7=35   6*7=42   7*7=49   8*7=56   9*7=63  
2*8=16   3*8=24   4*8=32   5*8=40   6*8=48   7*8=56   8*8=64   9*8=72  
2*9=18   3*9=27   4*9=36   5*9=45   6*9=54   7*9=63   8*9=72   9*9=81  

 

 

 

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

 

 

for문을 이용한 *모양 만들기

 

 

*

**

***

****

*****

 

 

 

package aaa;

public class aa11 {
 public static void main(String[] args) {
  for (int i=1 ; i<=5 ; i++) {
   for (int j=1 ; j<=i ; j++) {
    System.out.print("*");
   }
   System.out.println(" ");
  }
 }
}

 

 

 

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

 

 

****

***

**
*

 

package aaa;

public class aa11 {
 public static void main(String[] args) {
  for (int i=1 ; i<=5 ; i++) {
   for (int j=5 ; j>=i ; j--) {
    System.out.print("*");
   }
   System.out.println(" ");
  }
 }
}

 

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

 

 

    *

   **

  ***

 ****

*****

 

 

package aaa;

public class aa11 {
 public static void main(String[] args) {
  for (int i=1 ; i<=5 ; i++) {
   for (int j=1 ; j<=5-i ; j++)
   System.out.print(" ");
    for(int z=1 ; z<=i ; z++)
     System.out.print("*");
   
    System.out.println(" ");
  }
 }
}

 

 

 

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

 

 

 

*****
 ****
  ***
   **
    *

 

 

 

package aaa;

public class aa11 {
 public static void main(String[] args) {
  for (int i=1 ; i<=5 ; i++) {
   for (int j=1 ; j<i ; j++)
   System.out.print(" ");
    for(int z=1 ; z<=6-i ; z++)
     System.out.print("*");
   
    System.out.println(" ");
  }
 }
}

 

 

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

 

 

5) 제어문 - break문

 

반복문을 빠져나오게 하는 문이고

반복문 내의 어떤 곳에 위치 할 수도 있음

 

 

 

 

break 한 번 밖에 빠져 나오지 못함

 

6) 제어문 continue문

 

7) 제어문 label문 (무조건 분기)

프로그램 만들 때 안 좋음

잘 안씀

사용 하지 말자

 

 

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

 

    *
   ***
  *****
 *******
*********

 

 

package aaa;

public class aa12 {
 public static void main(String [] args) {
  for (int i=1 ; i<=5 ; ++i) {
   for(int k=1 ; k<=5-i ; ++k) {
    System.out.print(" ");
   }
   for(int j=1 ; j<=(i*2)-1 ; ++j) {
    System.out.print("*");
   }
   System.out.println();
  }
 }
}

 

 

 

 

 

 

 

 

 

 

 

'자바' 카테고리의 다른 글

[배열과 메소드] 메소드의 개요  (0) 2018.09.10
[배열과 메소드]배열의 개요  (0) 2018.09.10
제어문  (0) 2018.09.10
자바 연산자  (1) 2018.09.09
자바 기본 입출력  (0) 2018.09.08

제어문

자바

1. 제어문 (= 분기문)

 

1) if 문

조건에 만족할 경우 실행되는 문장;

 

2) if 문 예제 - 절대값 구하기

 

절대 값에서는 부호가 무시되고 크기만 언급됨

-> 즉, -5에 대한 절대 값은 5이고 7에 대한 절대값은 7

 

 

3) if~else문

if~else 문은 참일 때와 거짓일 때 각각 다른 문장을 수행하도록 지정

 

4) if~else 문 예제 -5보다 작은지 비교하기

 

중괄호 안 칠 때는 한개일 때 안 쳐도 됨

 

 

5) if~else ~ if 문

 

둘이 아닌 셋 이상에서 하나를 선택해야 할 경우

 

^ 만족할 값이 나올 때까지 쓴다

 

 

6) if~else~if 문 예제 - 두 수 중 큰 수 찾기

 

 

 

 

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

 

주민번호 2번 째 자리에 첫번 쨰 자리는 성별을 뜻함, 1-남성, 2-여성 , 2000년도에 태어난 남성 3-남성, 4-여성

두 번 째 자리는 태어난 곳

 

 

어디서 태어난 지 아는 프로그램을 만드세요

 

package aaa;
import java.io.*;
public class aa01 {
 public static void main(String [] args)throws IOException{
  System.out.print("두번 째 두번째 자리=");
  int su = System.in.read()-48;                    // 한자리수 받을 때 시스템.인.리드 하고 아스키코드 0 인 -48 뺴주어야 함
  if (su ==1) System.out.println("당신은 서울 출생이시군요!");
  else if (su ==2) System.out.println("당신은 경기, 인천출생이시군요!");
  else if (su ==3) System.out.println("당신은 강원도 출생이시군요!");
  else if (su ==4) System.out.println("당신은 충청북도 출생이시군요!");
  else if (su ==5) System.out.println("당신은 전라북도 출생이시군요!");
  else if (su ==6) System.out.println("당신은 전라남도, 광주 출생이시군요!");
  else if (su ==7) System.out.println("당신은  경상북도, 대구 출생이시군요!");
  else if (su ==8) System.out.println("당신은 경상남도, 부산 출생이시군요!");
  else if (su ==9) System.out.println("당신은 제주도 출생이시군요!");
  else System.out.println("잘못 입력 하셨습니다.");
 }
}

 

 

 

 

 

 

7) 분기문 - switch문

 

package aaa;
import java.util.*;
public class aa02 {
 public static void main(String [] args) {
  Scanner sc =new Scanner(System.in);
  int money = sc.nextInt();
  
  switch(money) {
  case 500:
   System.out.println("버스를 타시오"); break;
   
  case 5000:
   System.out.println("일반 택시를 타시오"); break;
   
  case 50000:
   System.out.println("모범 택시를 타시오");break;
   
  default :
   System.out.println("걸어 가시오");
  }
 }

}

 

스위치 문에서는 break가 반드시 들어감!

 

 

 

 

 

 

1.한 개의 수를 입력 받아 입력 받은 수가 짝수인지, 홀수 인지 알려주는 프로그램

 

 

 

package aaa;
import java.util.*;
public class aa03 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  System.out.print("수 입력:");
  int su = sc.nextInt();
  

  
  
  if (su%2==0)
   System.out.println("짝수");
  else
   System.out.println("홀수");
  
  
 }
}

 

 

2. 세개의 수를 입력 받아 큰 수대로 나열하기

 

 

package aaa;
import java.util.*;
public class aa04 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("첫 번 째 수를 입력 :");
  int su1= sc.nextInt();
  
  System.out.print("두 번 째 수를 입력 :");
  int su2= sc.nextInt();
  
  System.out.print("세 번 째 수를 입력 :");
  int su3= sc.nextInt();
  
  
  //큰수를 찾아 su1에 넣기
  if ( su2>su1 && su2>su3) {
   int imsi = su1;
   su1=su2;//su1에 su2를 집어 넣겠다
   su2=imsi;
   
  
  }else if (su3>su1 && su3>su2) {
   int imsi = su1;
   su1 = su3;
   su3= imsi;
  }
  
  //중간 수를 찾아 su2에 넣기
  if (su2<su3) {
   int imsi = su2;
   su2 = su3;
   su3 =imsi;
  }
  
  
  System.out.printf("%d>=%d>=%d\n", su1, su2, su3);
  
 }
}

 

 

 

 

3. 국어 점수를 입력 받아 평균값이 60이상이면 합격, 60점 미만이면 불합격을 알려주는 프로그램

 

package aaa;
import java.util.*;
public class aa05 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  

  System.out.print("국어점수입력:");
  int kor = sc.nextInt();
  
  
  if ( kor >=60) {
   System.out.println("합격");
  }else
   System.out.println("불합격");
 }
}

 

 

 

 

4. 한개의 수를 입력 받아 그 수가 3의 배수인지, 5의 배수인지, 3과 5의 배수인지, 아니면 아닌지를 알려주는 프로그램

 

package aaa;
import java.util.*;
public class aa06 {
 public static void main(String [] args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("수입력:");
  int su = sc.nextInt();
  
  if ( su%3 ==0) { //3의배수인지
   if ( su%5==0) { //5의 배수인지
    System.out.println("3과 5의 배수입니다");
   
   }else {
   System.out.println("3의 배수입니다");
   }
 }else if (su%5==0) {
  System.out.println("5의 배수입니다");
 }else
 System.out.println("3과 5의 배수가 아닙니다");
}
}

 

 

 

 

 

 

 

5. 국어점수를 입력 받아 90점 이상이면 A,

80-89이면 B, 70-79점 이면 C, 60-69이면 D, 60점 미만이면 F를 알려주는 프로그램

 

 

package aaa;
import java.util.*;
public class aa07 {
 public static void main(String []args) {
  Scanner sc = new Scanner (System.in);
  
  System.out.print("국어 점수입력:");
  int kor = sc.nextInt();
  
  
  //정수 /정수 = 정수 10/3 => 3
  // 정수/실수 = 실수  10/(float)3 =>3.3333.....
  switch(kor/10) {
  case 10:
   System.out.println("A학점입니다"); break;
   
  case 9:
   System.out.println("A학점입니다"); break;
   
   
  case 8:
   System.out.println("B학점입니다"); break;
   
   
  case 7:
   System.out.println("C학점입니다"); break;
   
   
  case 6:
   System.out.println("D학점입니다"); break;
   
   
  default:
   System.out.println("F학점입니다"); break;
   
   

   
  }
 }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'자바' 카테고리의 다른 글

[배열과 메소드]배열의 개요  (0) 2018.09.10
반복문  (0) 2018.09.10
자바 연산자  (1) 2018.09.09
자바 기본 입출력  (0) 2018.09.08
자료형, 변수 및 상수 소개  (0) 2018.09.08

자바 연산자

자바

3. 자바 연산자

 

1) 최우선 연산자

 

(  ) 괄호 연산자

. 참조 연산자

[ ] 배열 첨자 연산자

 

 

 

+ - 부호연산자 / 부호값을 나타냄

! 논리 부정 연산자 / true, false 간의 값을 부정

~ 비트 부정 연산자 / 숫자 데이터의 비트 부정

 

 

 

2) 단항 연산자

 

++ /++a / 전위 증가 / 연산 전에

 

 

 

4) shift 연산자

 

<<                 Left shift                    a<<b            a를 b만큼 왼쪽으로 shift

 

int a = 10;

int b =3;

a*2^b

 

 

>>                Right shift                   a>>b            a를 b만큼 오른쪽으로 shift

 

int a = 80 ;

int b =3 ;

a>>b

 

a*1/2^b

 

>>>            부호없는 Right shift        a>>>b            a를 b만큼 오른쪽으로 shift

 

 

5) 비교 관계 연산자

 

== / a==b / a와 b가 같음

!= / a!=b / a와 b가 같지 않음

> / a>b / a가 b보다 큼

< / a<b / a가 b보다 작음

>= / a>=b / a가 b보다 크거나 같음

 

 

 

 

 

6) 비트 연산자

^ 0하고 1로만 나타내는 것

 

 

&     /    AND연산자     / 연산자 좌우 값이 모두 참일 경우 => 참

|        / OR 연산자         / 연산자 좌우 값이 하나라도 참인 경우 => 참

^     / XOR 연산자     / 연산자 좌우 값이 서로 다른 경우=> 참

 

 

 

1= 참

 

 

7) 논리 연산자

&&     / a && b    /    a와 b 모두 참인 경우 true 그렇지 않을 경우 false 반환

||    /

?:    / a>b ? A:B    / a와 b의 결과에 따라 참이면 A가 실행, 거짓이면 B가 실행

 

 

 

 

9) 배정대입 연산자

 

=     /    a =10    /    a에 10이라는 값 대입

+=    / a+= 5    /    a=a+5

-=    /a-=5    / a=a-5

*=

/=

%=

 

 

<<= , >>= , >>>= 등도 존재

 

 

 

 

10) 연산자의 우선순위

 

 

 

11) 연산 주의사항

 

 

자바에서의 연산에러는 오로지 0으로 나누거나 나머지를 구할 때 일어남

 

 

 

 

 

'자바' 카테고리의 다른 글

반복문  (0) 2018.09.10
제어문  (0) 2018.09.10
자바 기본 입출력  (0) 2018.09.08
자료형, 변수 및 상수 소개  (0) 2018.09.08
2. Java 개발 환경 구축  (0) 2018.09.08

자바 기본 입출력

자바

1) 기본 출력

 

출력을 위한 메소드

 

System.out.println : 출력 후 위치를 다음 행으로 이동

System.out.print : 출력 후 위치 이동 안 함

System.out.printf : 형식을 지정하여 출력

 

 

* 정수형 : %d

* 실수형 : %f

* 문자열 : %s

* 한문자 : %c

 

*형식지정자와 영문자 사이에 부호로써 위치 조절 가능

 

 

 

정수형 상수의 출력 형식 지정자

 

음수 왼쪽 정렬

 

양수 오른쪽 정렬

 

 

 

println은 \r\n과 같은 역할을 한다.

줄갱을 하겠다?

 

\n : 한줄 띄어 라.

 

\t : 일정한 거리 띄어쓰기

 

\r : 인쇄 위치 또는 커서 표시 위치를 같은 줄(행) 맨 앞의 위치로 복귀 시키는 것

 

캐리지 리턴과 라인 피드는 타자기에서 따온 것

 

   System.out.print("즐거운 자바 공부!!");
   System.out.println("KG ITBANK입니다\r\n\t");
   //\n -> 줄갱?
   //\t -> 일정한 거리를 띄어쓰게 된다.
   
   System.out.println("재미있게 공부합시다.");
   //println은 \r \n과 같은 역할을 한다

 

 

  String str1="안녕";
  String str2="자바";
  String str3="반갑다";
  
  int age=2011-1990+1;
  
  System.out.print(str1+str2+str3);
  System.out.println("나이:"+age+"살");
  System.out.printf("\n%5d", 16);
  System.out.printf("\n%05d\n", 16);

 

 

 

2) 한글자 입력

 

한글자 입력을 위한 메소드

-System.in.read()

 

*한글자만 입력을 받고자 할 떄는 read()메소드를 이용하는 데,

이때는 예외처리를 반드시 해줘야 함

 

 

 

 

 

한글자 입력받는 코드가 있을 때는 반드시 예외 처리를 해주어야 함.

 

 

 

3) 문자열 입력

 

문자열 입력 받을 때는 2개의 클래스를 이용함

 

-BufferedReader

-Scanner

 

 

 

String name = in.readLine();

enter 값이 쳐지면 끝납니다.

 

 

 

 

 

 

 

 

 

 

int kor = Integer.parselnt(in.readLine(); -> 무조건 String

 

 

 

 

 

  byte a =10; // 1byte-128 ~127
  short b = 10000; // 2byte-2^15 ~ 2^15-1 ( 0 이 기 때문에 한개를 뺴줌)
  int c = 420000; // 4byte -2^31 ~ 2^31-1 , 기본 자료형
  
   long d = 1000l; (L을 꼭 써줌) //8 byte -2^63 ~ 2^63-1
  
   char e = 'A'; // 2byte 0 ~2^16-1
  
   float f = 10.23f; //4bte
  
   double g = 10.23; // 8byte, 기본 자료형
  
   boolean h = true; // 1byte true , false 논리형
  
   String i ="자바 공부"; //문자열 자료형
   
   전체 주석 만들기 : ctrl +shift +/

  

 

 


  
  
byte a =10;
   int b =a;
   byte c=(byte)b; //형 변환 반드시 해야 한다. 
  
   
   
   byte a =10;
   char b = (char)a;            // char는 0부터니깐 강제변환해주어야 한다
   short c =(short)b;
   char d =(char)c;
  
  
  
  
  
  
  
 }
}

 

 

 

 

 

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

 

 

package aaa;
import java.io.*;
public class cc05 {
 public static void main(String [] args) throws IOException{
  //int c = System.in.read(); //아스키코드표로만 만들어짐
  System.out.print("아무키나 누르세요");
  char c = (char)System.in.read(); // 문자열로 바꾸고 싶을 때
  
  System.out.println("입력하신 문자=" + c );
 }
}

 

 

 

 

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

 

 

package aaa;
//한개의 수를 입력 받아 그 제곱값을 구하는 프로그램을 짜세요.
import java.io.*;
public class CC06 {
 public static void main(String[] args)throws IOException {
  System.out.print("수를 입력하세요:");
  int su =System.in.read()-48; //0의 아스키코드 값
  
  int result =su*su;
  
  System.out.printf("%d의 제곱값은 %d입니다.\n",su,result);
  
 }
}

 

 

 

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

 

package aaa;
//두개의 수를 입력받아 그 합을 구하는 프로그램
import java.io.*;
public class cc07 {
 public static void main(String [] args) throws IOException{
  System.out.print("첫번째 수를 입력:");
  int su1 = System.in.read()-48;
  System.in.read(); // \r
  System.in.read(); // \n
  System.out.print("두번째 수를 입력:");
  int su2 = System.in.read()-48;
  
  int result = su1 +su2;
  
  System.out.printf("%d+%d=%d\n", su1 ,su2 , result);
 }
}

 

 

 

 

 

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

 

package aaa;

import java.util.Scanner;

public class TT1 {
 public static void main(String []args) {
  Scanner sc = new Scanner(System.in);
  
  System.out.print("이름을 입력:");
  String name = sc.next();
  System.out.print("국어점수입력:");
  int kor = sc.nextInt();
  
  System.out.println(name+"님의 국어점수는"+kor+ "점입니다. ");
 }
}

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

 

 

 

 

 

 

 

'자바' 카테고리의 다른 글

제어문  (0) 2018.09.10
자바 연산자  (1) 2018.09.09
자료형, 변수 및 상수 소개  (0) 2018.09.08
2. Java 개발 환경 구축  (0) 2018.09.08
JAVA 프로그래밍 소개  (0) 2018.09.08