Dev/Java

[java] 전역/지역변수, 버블정렬,구구단만들기

창문닦이 2019. 1. 22. 10:10

전역변수와 지역변수


import java.util.Scanner;

public class Rect {

int w,h; //instance변수. 클래스 안 어디서나 사용 가능한 전역변수

//매개변수는 동시에 여러개 설정가능

public void input() {

Scanner sc = new Scanner(System.in); // Scanner객체생성. 매개변수가 반드시 필요함. api확인!!

//입력

System.out.print("가로?");//10

w = sc.nextInt();

System.out.print("세로?");//10

h = sc.nextInt();

//return; void라고 설정해놨기때문에 return 작성안해도됨

}

public int area(){//return값이 정수형

int result;//지역변수. 다른 메소드에서 인식할 수 없음

result = w*h;

return result;

}

public int length(){//return값이 정수형

return 2*(w+h); //지역변수를 만들어서 반환해도 되지만, 이렇게 return옆에 바로 결과값을 넣어도 문제는 없음

}

public void print(int a, int l){ //반환값없음, 매개변수 2개 필요, 메소드를 실행하고 끝남-프린트작업.

System.out.println("가로: "+w);

System.out.println("세로: "+h);

System.out.println("넓이: "+ a);

System.out.println("둘레: "+ l);

}

}//endclass


버블정렬 : 가장 이웃한 수와 비교하여 정렬 {30, 25, 20, 15, 7} : 초기값 25 30 20 15 7 25 20 30 15 7 25 20 15 30 7 25 20 15 7 30 ------ 1회전(가장 큰값 제일 끝으로) 20 25 15 7 30 20 15 25 7 30 20 15 7 25 30 ------ 2회전 15 20 7 25 30 15 7 20 25 30 ------ 3회전 7 15 20 25 30 ------ 4회전 j num i=1 0 1 1 2 2 3 3 4 ----- i=2 0 1 1 2 2 3 ----- i=3 0 1 1 2 ----- i=4 0 1 종료


public class Test1 {

public static void main(String[] args) {

//선언

int[] num = {30,27,20,15,7};

int temp, i, j;

System.out.print("Source data: ");

for(int su: num){

System.out.printf("%4d",su);

}

System.out.println();

//Bubble Sort : 이웃하는 수끼리 비교

for(i=1;i<num.length;i++){

for(j=0;j<num.length-i;j++){

//System.out.println(i +":"+ j); //인덱스 조회

if(num[j]>num[j+1]){

temp = num[j];

num[j] = num[j+1];

num[j+1] = temp;

}

}

}

//출력

System.out.print("Sorted data: ");

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

System.out.printf("%4d",num[i]);

}

}//endmain

}//endclass



배열의 배열



public class Test3 {

public static void main(String[] args) {

int[][] arr = new int[6][6]; //이렇게 만들게되면 배열안에는 모두 0이 들어있음

int i,j ;

int n=0;

for(i=0;i<5;i++){ //입력은 5*5

for(j=0;j<5;j++){

//System.out.println(i +":"+ j); // 자릿값 출력

n++;

arr[i][j] = n;

arr[i][5] += n; //[0,5] [1,5] [2,5] [3,5] [4,5]에 누적

arr[5][j] += n; //[5,0] [5,1] [5,2] [5,3] [5,4]에 누적

arr[5][5] += n; //전체누적합계

}

}

for(i=0;i<6;i++){ //출력은 6*6

for(j=0;j<6;j++){

System.out.printf("%4d", arr[i][j]);

}

System.out.println();

}

}

}



배열 ㄹ자 출력


public class Test4 {

public static void main(String[] args) {

//배열의 배열

//  1 2 3 4 5

// 10 9 8 7 6

// 11 12 13 14 15

//이렇게 출력되도록 만들기

int[][] arr = new int[6][6]; //이렇게 만들게되면 배열안에는 모두 0이 들어있음

int i,j = 0 ;

int n=0;

for (i = 0; i < 5; i++) {

switch(i){

case 0:

case 2:

case 4:

for(j=0; j<5; j++){

n++;

arr[i][j] = n;

arr[i][5] += n;

arr[5][j] += n;

arr[5][5] += n;

}break;

case 1:

case 3:

for(j=4; j>=0; j--){

n++;

arr[i][j] = n;

arr[i][5] += n;

arr[5][j] += n;

arr[5][5] += n;

}break;

}

}

//출력

System.out.println("switch문 사용한 방법");

for(i=0;i<arr.length;i++){ //출력은 6*6

for(j=0;j<arr.length;j++){

System.out.printf("%4d", arr[i][j]);

}

System.out.println();

}

//방법2

int a[][] = new int[6][6]; //숫자를 담을 배열

int k=0; //출력할 값을 담은 변수

int sw=1; //증가,감소 구분하기 위한 스위치변수

for(int x=0;x<5;x++){

for(int y=0;y<5;y++){

k++;

if(sw==1){

a[x][y] = k;

a[5][y] += k;

}else{

a[x][4-y] = k;

a[5][4-y] += k;

}

a[x][5] += k;

a[5][5] += k;

}

sw = sw*(-1);

}

//출력

System.out.println("sw변수를 사용한 방법");

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

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

System.out.printf("%4d", a[x][y]);

}

System.out.println();

}

}//endmain

}//endclass


구구단 출력


public class Test5 {

public static void main(String[] args) {

//구구단(2~5단) 가로로 나오도록 만들기 사이는 \t으로 띄우기

//구구단(6~9단)

//3중 for문으로 작성 - 방법 3가지 존재. 2중 for문도 가능함

//힌트:변수를 중간에 초기화시켜야 함

int i, j;

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

for(j=2;j<6;j++){

System.out.printf("%d * %d = %d\t",j,i,(i*j) );

}

System.out.println();

}

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

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

for(j=6;j<10;j++){

System.out.printf("%d * %d = %d\t",j,i,(i*j) );

}

System.out.println();

}

}

}


행렬 더하기


public class Test6 {

public static void main(String[] args) {

int[][] a = {{3,6,9},{1,2,3},{7,8,9}};

int[][] b = {{4,5,7},{1,3,3},{8,7,8}};

int[][] sum = new int[3][3];

int i,j;

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

for(j=0;j<b.length;j++){

sum[i][j]=a[i][j]+b[i][j];

System.out.printf("%4d",sum[i][j]);

}

System.out.println();

}

}

}


Class는 붕어빵 틀 클래스를 만드는 이유는 재사용성. 객체(object)를 만드는 기능 한 클래스안에 많은 내용이 있으면 메인메소드를 실행할 때 다 거친 후 진행하기 때문에 처리속도가 지연됨. 그래서 메소드 마다 분리시킴. 파티션을 만드는 것이라고 생각 '메소드명'은 무조건 모두 영소문자. 지역변수 : 각 메소드안에 속하는 변수. 해당 메소드만 사용 가능. 전역변수 : instance 변수. 메모리에 올라가야만 사용할 수 있는 변수. 메모리를 올려놓는 것 = 객체 생성. 즉 객체 생성을 진행해야 사용가능한 변수. 클래스안 어디서든 사용가능. 값이 바뀌면 모든 메소드에서 같이 변경됨 접근지정자 : 4가지 public private protected default return : 메소드를 실행한 후의 반환값. return값이 없을 경우 void로 표현 매개변수 : 8개 자료형 & string & void 가능 메소드에서 매개변수를 원하면 반드시 사용해야 함. 입력하지 않거나 자료형이 다르거나 순서가 틀리면 오류 발생


//같은 패키지 안에 Rect 클래스가 있기 때문에 import 해줄 필요 없음

public class Test7 {

public static void main(String[] args) {


Rect r1 = new Rect(); //같은 패키지 안에 있어서 import안함

Rect r2 = new Rect();

r1.input();

int aa = r1.area();

int ll = r1.length();

r1.print(aa,ll); //변수명은 클래스 생성시 이름과 달라도 문제없음. 자료형은 꼭 맞춰야함.

r1.input();

aa = r1.area();

ll = r1.length();

r1.print(aa,ll); //매개변수명은 상관없음. 데이터 타입만 맞으면 됨

r2.input();

int area = r2.area();

int length = r1.length();

r2.print(area, length);

}

}


클래스 - 재사용성


import java.util.Scanner;

//하나의 클래스에서 여러 클래스를 만들 경우 public 쓰면 안됨

// Hap h = new Hap(); -> Class 생성 후 새로운 객체를 만들어야 원본이 그대로 유지. 반복 생성 가능. 이게 바로 재사용성

class Hap{

int su, sum;

public void input(){

Scanner sc =new Scanner(System.in);

System.out.print("정수?");//100

su=sc.nextInt();

};

public int cnt(){

for(int i=1;i<=su;i++){

sum+=i; //sum을 초기화 안시켜도 오류안남. 전역변수는 0으로 초기화가 되어있음

}

return sum;

}

public void print(int sum){

System.out.println("1~"+su+ "까지의 합계: "+sum);

}

}


public class Test8 {

public static void main(String[] args) {

Hap h = new Hap();

h.input();

int sum = h.cnt();

h.print(sum);

}

}


클래스 - 재사용성


import java.util.Random;

import java.util.Scanner;

class Game{

int me, com;

String game[] = { "가위", "바위", "보" };

public int rd(){

Random rd = new Random();

com = rd.nextInt(3)+1;

return com;

}

public int input(){

Scanner sc = new Scanner(System.in);

do{

System.out.print("1:가위, 2:바위, 3:보 입니다. 숫자를 입력하세요. : ");

me = sc.nextInt();

}while(me<1||me>3);

return me;

}

public void output(int com, int me){

System.out.println("컴퓨터: " + game[com-1] + ", 사람: " + game[me-1]);

if (me == com) {

System.out.println("비겼습니다.");

} else if ((me == 1 && com == 3) || (me == 2 && com == 1)|| (me == 3 && com == 2)) {

System.out.println("당신이 이겼습니다.");

} else {

System.out.println("컴퓨터가 이겼습니다.");

}

}

}


public class Test9 {

public static void main(String[] args) {

// 1~3사이의 난수를 발생시켜 가위,바위,보 게임 프로그램 작성

// 1:가위, 2:바위, 3:보

Game g = new Game();

int computer = g.rd();

int user = g.input();

g.output(computer, user);

}

}