전역변수와 지역변수
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);
}
}
'Dev > Java' 카테고리의 다른 글
[java] 생성자, instance블럭, static블럭, 재귀함수, Call By Reference (0) | 2019.01.24 |
---|---|
[java] static변수, 변수 초기화 방법, Overloading (0) | 2019.01.22 |
[java] 선택정렬, 난수, 가위바위보 게임만들기 (0) | 2019.01.22 |
[java] 배열, 달력만들기 (0) | 2019.01.21 |
[java] for문, switch문 (0) | 2019.01.21 |