package sec02.exam01;

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int weight, height;
		double bmi = 0.0;
		String grad;
		
		
		System.out.print("키>");
		height = Integer.parseInt(scan.nextLine());
		System.out.print("몸무게>");
		weight = Integer.parseInt(scan.nextLine());
		
		bmi = weight / ((height * 0.01) * (height * 0.01));
		
		if( bmi < 18.5 ) {
			grad = "저체중";
		}else if (bmi < 23 ) {
			grad = "정상";
		}else if (bmi < 25) {
			grad = "과체중";
		}else if (bmi < 30) {
			grad = "비만";
		}else {
			grad = "고도비만";
					}
		
		
		System.out.println("당신의 키는 = " + height);
		System.out.println("당신의 몸무게는 = " + weight);
		System.out.println("BMI는 = " + bmi);
		System.out.println("BMI 지수는 = " + grad);
	}

}

 

결과

클래스의 구성 멤버

 

 

필드

 

필드 선언(클래스 멤버 변수 ) 

필드 선언은 클래스 중괄호 {} 블록 어디서든 존재 가능

생성자 선언과 메서드 선언의 앞과 뒤 어떤 곳에서도 필드 선언 가능

생성자와 메서드 중괄호{} 블록 내부에서는 선언 불가

생성자와 메소드 중괄호 블록 내부에 선언된 것은 모두 로컬 변수가 됨

선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지는 않음

타입 필드 = 초기값
필드 변수명 비슷..

타입은 필드에 저장할 데이터 종류를 결정 

기본타입, 참조타입( 배열, 열거, 인터페이스 ) 모두 가능

필드 초기값은 필드 선언 시 주어질 수도 있고 생략될 수도 있음

초기값이 지정되지 않은 필드는 객체 생성 시 자동으로 기본 초기값 설정

 

 

필드 사용

필드를 사용한다는 것은 필드값을 읽고 변경하는 작업

클래스 내부의 생성자나 메소드에서 사용할 경우 단순히 필드 이름으로 읽고 변경하면 되지만

클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드 사용

필드가 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문

위 그림을 보면 Car 클래스의 speed 필드는 생성자와 메소드에서 변경이 가능

변수는 자신이 선언된 생성자 또는 메서드 블록 내부에서만 사용할 수 있는 반면

필드는 생성자와 모든 메서드에서 사용이 가능

외부 Person 클래스에서 Car 클래스의 speed 필드값을 사용하려면

다음과 같이 Car 객체를 우선 생성

Car myCar = new Car();

myCar 변수가 Car 객체를 참조하게 되면 도트(.) 연산자를 사용해서 speed 필드에 접근 가능

도트(.)연산자는 객체 접근 연산자로 객체가 가지고 있는 필드나 메소드를 사용하고자 할 때 사용

 

밑에 코드는 Car 객체의 speed 필드값을 60으로 변경

 myCar.speed = 60;

 

Car 클래스 필드 선언

	//필드 ( 속성 ) 
	 //this 생성자의 오버로딩
	String comany = "현대자동차";
	String model = "그랜저";
	String color = "검정";
	int maxSpeed = 350;
	int speed;

 

외부 클래스에서 Car 필드값 읽기와 변경 

		//객체 생성
		Car myCar = new Car();
		
		//필드값 읽기
		System.out.println("제작회사:" + myCar.comany);
		System.out.println("모델명:" + myCar.model);
		System.out.println("색깔:" + myCar.color);
		System.out.println("최고속도:" + myCar.maxSpeed);
		System.out.println("현재속도:" + myCar.speed);
		
		//필드값 변경
		myCar.speed = 60;
		System.out.println("수정된 속도:" + myCar.speed);

 

 

 

생성자

생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당

객체 초기화란 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것

생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없음

new연산자에 의해 생성자가 성공적으로 실행되면 힙 영역에 객체가 생성되고 

객체의 번지가 리턴됨, 리턴된 객체의 번지는 클래스 변수에 저장

 

기본 생성자

모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있음

클래스 내부에 생성자 선언을 생략했다면 컴파일러는 다음과 같이 중괄호 {} 블록 내용이

비어 있는 기본생성자를 바이트 코드에 자동 추가 ( 생략 가능 하다는 말 ) 

[public] 클래스() {}

 

 

 

그러나 클래스에 명시적으로 선언한 생서자가 1개라도 있으면 컴파일러는 기본 생성자를 추가하지 않음

명시적으로 생성자를 선언하는 이유는 객체를 다양한 값으로 초기화하기 위해서

 

 

생성자 선언

명시적으로 선언하려면 아래 이미지 형태로 작성

 

생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일

일반적으로 필드에 초기값을 저장하거나 메서드를 호출하여 객체 사용 전에 필요한 준비를 함

매개 변수 선언은 생략할 수도 있고 여러 개를 선언해도 좋음

매개 변수는 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 함

Car myCar = new Car("그랜저", "검정", 300);
// Car 생성자를 호출할 때 3개의 매개값 제공 
// 2개의 매개값은 String타입, 마지막 매개값은 int 타입
Car myCar = new Car(); <- 기본생성자를 호출할 수 없음 
생성자를 호출해서 객체 생성할때는 그 밑에 기본생성자를 호출할 수 없음

public class Car {
	//생성자
	Car(String model, String color, int maxSpeed)
    }
    클래스에 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 
    호출해서 객체를 생성

 

 

필드 초기화

클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정

다른 값으로 초기화 방법은 두가지가 있음

1. 필드를 선언할 때 초기값을 주는 방법

2. 생성자에서 초기값을 주는 방법

필드를 선언할 때 초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 됨

	// 필드
	String nation = "대한민국";
	String name;
	String ssn;
	
    //생성자
	Korean k1 = new Korean();
    Korean k2 = new Korean();
    
    nation 필드를 "대한민국"으로 초기값
    k1, k2 객체를 생성하게 되면 둘 다 nation 필드에는 "대한민국"이 저장 되 있음
package sec02.exam01;

public class Korean {
	// 필드
	String nation = "대한민국";
	String name;
	String ssn;
	
	//생성자
public Korean(String n, String s) {
	name = n;
	ssn = s;
}
}
객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화되어야 한다면
생성자의 매개값으로 이 값들을 받아 초기화하는 것이 맞음

 

생성자에서 필드 초기화

package sec02.exam01;

public class Korean {
	// 필드
	String nation = "대한민국";
	String name;
	String ssn;
	
	//생성자
public Korean(String n, String s) {
	name = n;
	ssn = s;
}
}

 

객체 생성 후 필드값 출력

package sec02.exam01;

public class KoreanExample {

	public static void main(String[] args) {
		Korean k1 = new Korean("박자바", "011225-1234567");
		System.out.println("k1.name :" + k1.name);
		System.out.println("k1.ssn :" + k1.ssn);
		
		Korean k2 = new Korean("김자바", "93525-0654321");
		System.out.println("k2.name :" + k2.name);
		System.out.println("k2.ssn :" + k2.ssn);

	}

}

코드의 가독성을 높일라면 초기화시킬 필드 이름과 비슷하거나 동일한 이름을 사용하는 것이 좋음

일반적으로 필드와 동일한 이름을 갖는 매개 변수를 사용

그러나 이 경우 필드와 매개 변수 이름이 동일하기 때문에 생성자 내부에서 해당 필드에 접근 불가

왜냐하면 동일한 이름의 매개 변수가 사용 우선순위가 높기 때문에

해결 방법은 필드 앞에 'this.'를 붙이면 됨, this는 객체 자신의 참조

'this.필드'는 this라는 참조 변수로 필드를 사용하는 것과 동일

 

 

생성자 오버로딩

외부에서 제공되는 다양한 데이터들을 이용해서 객체를 초기화하려면 생성자도 다양화될 필요가 있음

생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 의미

매개 변수의 타입, 개수, 순서가 다르게 선언되어야 함

Car 클래스 생성자 오버로딩 예시
Car(){...}
Car(String company){...}
Car(String company, String model){...}
Car(String company, String model, String color){...}

오버로딩 주의할 점은 매개 변수타입과 개수 선언된 순서가 똑같을 경우 
매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아님

Car(String company, String model){...}
Car(String model, String company){...} <- 오버로딩 아님

 

생성자가 오버로딩되어 있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과

수에 의해 호출될 생성자가 결정 됨

Car car1 = new Car();
Car car2 = new Car("그랜저");
Car car3 = new Car("그랜저", "흰색");
Car car4 = new Car("그랜저", "흰색", 300);

 

생성자의 오버로딩

	생성자의 오버로딩
    
    package sec02.exam01;

	public class Car {
    
    String company = "현대자동차";
	String model;
	String color;
	int maxSpeed;
    
    Car(){ 
    } // 1.생성자
    
    Car(String model ){ 
		this.model = model; 
	} // 2.생성자
    
	Car(String model, String color){
		this.model = model;
		this.color = color;
	}//3. 생성자
	
	Car(String model, String color, int maxSpeed){
		this.model = model;
		this.color = color;
        this.maxSpeed = maxSpeed; 
	}//4. 생성자
    
    }
    }

객체 생성 시 생성자 선택

	package sec02.exam01;

	public class CarThis {

	public static void main(String[] args) {
        CarExamole car = new CarExamole(); //1.생성자 선택 
		System.out.println("car1.company:" + car.company);
		System.out.println();
		
		CarExamole car2 = new CarExamole("자가용");//2.생성자 선택
		System.out.println("car2.company:" + car2.company);
		System.out.println("car2.model" + car2.mode);
		System.out.println();
		
		CarExamole car3 = new CarExamole("자가용", "빨강");//3.생성자 선택
		System.out.println("car3.company:" + car3.company);
		System.out.println("car3.model:" + car3.model);
		System.out.println("car3.color:" + car3.color);
		System.out.println();
		
		CarExamole car4 = new CarExamole("택시", "검정", 200);//4.생성자 선택
		System.out.println("car4.company:" + car4.company);
		System.out.println("car4.model:" + car4.model);
		System.out.println("car4.color:" + car4.color);
        System.out.println("car4.maxSpeed:" + car4.maxSpeed);
		}
        }

 

 

다른 생성자 호출: this()

생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수있음

매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한 생성자에서 이러한 현상을 보임

이 경우에는 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고

나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선이 가능

생성자에서 다른 생성자를 호출할 때에는 다음과 같이 this() 코드를 사용

this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용 

this()의 매개값은 호출되는 생성자의 매개 변수에 맞게 제공해야 함

 

3개의 생성자 내용이 비슷하므로 앞에 2개의 생성자에서 this()를 사용해서 

마지막 생성자를 호출하도록 수정하면 중복 코드를 최소화할 수 있음

밑에는 this() 활용 실습

 

다른 생성자를 호출해서 중복 코드 줄이기

package sec02.exam01;

public class CarThis2 {
	//필드
	//다른 생성자 호출:this()
	//다른 생성자 호출해서 중복 코드 줄이기
	String color;
	int cc;
	String model;
	String company = "현대자동차";
	int maxSpeed;
	
	CarThis2(){  // 기본 생성자 생략 가능
		
	}
	
	CarThis2(String model){
		
		this(model, "은색", 250);
		
		
	}
	
	CarThis2(String model, String color){
		
		this(model, color, 250);
		
		
	}
	
	CarThis2(String model, String color, int maxSpeed){
		
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed; // 공통 실행 코드
		
		
	}
	
}

 

객체 생성 시 생성자 선택

package sec02.exam01;

public class CarThis {

	public static void main(String[] args) {
		CarThis2 car = new CarThis2();
		System.out.println("car1.company:" + car.company);
		System.out.println();
		
		CarThis2 car2 = new CarThis2("자가용");
		System.out.println("car2.company:" + car2.company);
		System.out.println("car2.model:" + car2.model);
		System.out.println();
		
		CarThis2 car3 = new CarThis2("자가용", "빨강");
		System.out.println("car2.company:" + car3.company);
		System.out.println("car2.model:" + car3.model);
		System.out.println("car2.model:" + car3.color);
		System.out.println();
		
		CarThis2 car4 = new CarThis2("택시", "검정", 200);
		System.out.println("car2.company:" + car3.company);
		System.out.println("car2.model:" + car3.model);
		System.out.println("car2.model:" + car3.color);
		
		
	}

}

 

실습

 

Swap

package sec02.exam01;

public class Swap {

	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int result = a;
		
		a = b;
		b = result;
		
//		swapData(a, b); call by value이어서 안됨
		System.out.printf("a = %d, b = %d\n" , a,b);

	}
	public static void swapData (int x, int y) {
		int result = x;
		x = y;
		y = result;
	}
}

 

Bubble sort ( 버블 정렬 ) for문, if문 사용 

package sec02.exam01;

public class Bubble {

	public static void main(String[] args) {
		
		// 정렬 bubble sort
		
//		정리하자면, 바깥쪽의 for 루프는 배열의 모든 인덱스를 순회하며 안쪽의 
//		for 루프를 실행하여 인접한 원소를 비교하고 필요한 경우 교환하는 과정을 반복
	
		int a[] = {10, 3, 1, 4, 2};
		
		for(int i=0; i<a.length-1; i++) {// 왼쪽 오른쪽 순서 인덱스 이동 -1은 뒤에 2는 빼고 안쪽 for문이 끝날때 마다 왼쪽에서 오른쪽으로 이동
			for (int j=a.length-1; j>i; j--) {// 오른쪽 왼쪽 순서 이동
				if(a[j] < a[j-1]) {// 오른쪽 왼쪽 값 비교 후 바꿔줌
					int tmp = a[j];
					a[j] = a[j-1];
					a[j-1] = tmp;
				}
				System.out.printf("i:%d, j:%d\n", i, j);
				
			}
			
		}
		for (int num : a) {
			System.out.println(num + ", ");
			
		}
	}

}

 

문제풀이 3번 this() 활용 중복 코드 제거하기

package sec02.exam01;

public class Board {
	// 3번 문제 this() 활용 중복 코드 제거 
	//this() 사용시 마지막 생성자 작성하고 작성하면 될듯
	
	String title;
	String content;
	String writer;
	String dete;
	int hitcount;
	
	Board(String title, String content){
	this(title, content, "로그인한 회원아이디", "현재 컴퓨터 날짜", 0);	
	}
	Board(String title, String content, String writer ){
	this(title, content, writer, "현재 컴퓨터 날짜", 0);	
	}
	Board(String title, String content, String writer, String dete ){
	this(title, content, writer, "현재 컴퓨터 날짜", 0);	
	}
	
	//공통 실행 코드
	Board(String title, String content, String writer, String date, int hitcount){
	this.title = title;
	this.content = content;
	this.writer = writer;
	this.dete = dete;
	this.hitcount = hitcount;
	}
	
	
}

 

JSP 배열활용 웹페이지에서 배열에 숫자 입력 후 합계, 최고점수, 평균점수 받아오기 ( static 활용 )

form 입력값 3개 -> 페이지 이동

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="testStatic.jsp">
<input type="text" name="num1" /><br/>
<input type="text" name="num2" /><br/>
<input type="text" name="num3" /><br/>
<input type="submit" />
</form>
</body>
</html>

 

배열에 입력값 받은 후 입력값 최고점수, 합계, 평균 구하기 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="static0525.*" %> 
<%--static0525 패키지 import --%>

<%
String num1 = request.getParameter("num1");
String num2 = request.getParameter("num2");
String num3 = request.getParameter("num3");
int score1 = Integer.parseInt(num1);
int score2 = Integer.parseInt(num2);
int score3 = Integer.parseInt(num3);



%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
TestStatic.arr[0] = score1;
TestStatic.arr[1] = score2;
TestStatic.arr[2] = score3;
int sum = 0;
int max = 0;
double avg = 0;



for(int i=0; i < TestStatic.arr.length; i++) {	
	sum += TestStatic.arr[i];
	
	if(TestStatic.arr[i]>max) {
		max = TestStatic.arr[i];			
	}
}
avg = (double)sum / TestStatic.arr.length;
out.println("최고점수: " + max);
out.println();
out.println("합계: " + sum);
out.println();
out.println("평균점수: " + avg);




%>
</body>
</html>

 

JSP 배열 값 4개 입력 받은 후 Bubble 정렬한 상태로 다음 페이지에 보이기

form 입력값 4개 -> 페이지 이동

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="sort.jsp">
<input type="text" name="num1" /><br/>
<input type="text" name="num2" /><br/>
<input type="text" name="num3" /><br/>
<input type="text" name="num4" /><br/>
<input type="submit" />
</form>
</body>
</html>

 

배열에 입력값 받은 후 입력값 Bubble 정렬

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
// 입력 받아온 값 
String num1 = request.getParameter("num1");
String num2 = request.getParameter("num2");
String num3 = request.getParameter("num3");
String num4 = request.getParameter("num4");
int score1 = Integer.parseInt(num1);
int score2 = Integer.parseInt(num2);
int score3 = Integer.parseInt(num3);
int score4 = Integer.parseInt(num4);
%>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
int[] a = new int[4];
a[0] = score1;
a[1] = score2;
a[2] = score3;
a[3] = score4;
// 각 인덱스에 변수 저장


for(int i=0; i<a.length-1; i++) {
	for (int j=a.length-1; j>i; j--) {
		if(a[j] < a[j-1]) {
			int tmp = a[j];
			a[j] = a[j-1];
			a[j-1] = tmp;
		}
		
		
	}
	
}
for (int num : a) {
	out.println(num + ", ");
	
}
%>
</body>
</html>

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-30 10일차  (0) 2023.05.30
2023-05-26 9일차  (1) 2023.05.26
2023-05-24 7일차  (2) 2023.05.24
2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
package choongang;

import java.util.Scanner;

public class IF001 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int kor = 0;
		int eng = 0;
		int math = 0;
		String grad = "";
		
		int tot = 0;
		double avg = 0;
		
		System.out.print("국어>");
		kor = Integer.parseInt(scan.nextLine());
		System.out.print("영어>");
		eng = Integer.parseInt(scan.nextLine());
		System.out.print("수학>");
		math = Integer.parseInt(scan.nextLine());
		
		tot = kor + eng + math;
		avg = tot / 3.0;
		
		grad = (kor >=60) ? "합격" : "불합격";
		System.out.printf("국어점수: %d (%s)\n", kor, grad);
		grad = (eng >=60) ? "합격" : "불합격";
		System.out.printf("영어점수: %d (%s)\n", eng, grad);
		grad = (math >=60) ? "합격" : "불합격";
		System.out.printf("수학점수: %d (%s)\n", math, grad);
		
		grad += tot;
		System.out.println("총점:" + tot);
		grad = (avg >=60) ? "합격" : "불합격";
		System.out.printf("평균: %.2f (%s)\n", avg, grad);
		
		
	}

}

 

다차원 배열

값들이 행과 열로서 구성된 배열을 2차원 배열이라고 함

2차원 배열은 수학의 행렬을 떠올리면 되는데, 가로 인덱스와 세로 인덱스 사용

자바는 2차원배열을 중첩 배열 방식으로 구현

int[][] scores = new int[2][3];

위에 코드는 아래 이미지처럼 메모리에 3개의 배열 객체를 생성

scores.length // 2(배열 A의 길이)
scores[0].length // 3(배열 B의 길이)
scores[1].length // 3(배열 C의 길이)

아래는 계단식 구조

scores.length // 2(배열 A의 길이)
scores[0].length // 2(배열 B의 길이)
scores[1].length // 3(배열 C의 길이)

 

계단식 배열에서 주의할 점은 배열의 정확한 길이를 알고 인덱스를 사용해야 함

위에 사진처럼 배열B의 길이는 0, 1이고 배열C의 길이는 0, 1, 2이기 때문에

scores[0][2]는 에러를 발생

만약 그룹화된 값 목록을 가지고 있다면 다음과 같이 중괄호{ } 안에 다시 중괄호를 사용

값 목록을 나열함 ( 밑에 참고 )

배열 생성
int[][] scores = { {95, 80}, {92, 96} };

읽는 법
int score = scores[0][0]; // 95
int score = scores[1][1]; // 96

 

 

배열 복사

배열은 한 번 생성하면 크기를 변경할 수 없음

더 많은 저장공간이 필요하다면 더 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야함

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src 매개값은 원본 배열, srcPos는 원본 배열에서 복사할 항목의 시작 인덱스

dest 매개값은 새 배열, destPos는 새 배열에서 붙여넣을 시작 인덱스, length는 복사 할 개수

 

아래와 같은 상황이 발생한다면, 복사되지 않은 항목은 배열의 타입 기본 초기값이 그대로 유지

int의 경우 0, String의 경우 null

 

참조 타입 배열이 복사되면 복사되는 값이 객체의 번지이므로

새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일

 

package sec03.exam02;

public class ArrayCopy {

	public static void main(String[] args) {
		// 배열 복사
		
		int[] oldIntArray = {1, 2, 3};
		int[] newIntArray = new int[5];
		
		System.arraycopy(oldIntArray, 0, newIntArray, 0, 
							oldIntArray.length);
		
		for(int i=0; i<oldIntArray.length; i++) {
		newIntArray[i] = oldIntArray[i];	
		
		
		}
		
		for(int i=0; i<newIntArray.length; i++) {
			
		System.out.print(newIntArray[i] + ", ");;	
		}

	}

}

 

 

향상된 for문

자바는 배열이나 컬렉션을 좀 더 쉽게 처리하기 위해 향상된 for문을 제공

이는 반복 실행을 하기 위해 루프 카운터 변수와 증감식을 사용하지 않음

for문의 괄호 ()에는 배열에서 꺼낸 항목을 저장할 변수 선언과 콜론(:) 그리고 배열을 나란히 작성

배열 및 컬렉션 항목의 개수만큼 반복하고, 자동적으로 for문을 빠져나감

package sec03.exam03;

public class ForEx1 {

	public static void main(String[] args) {
		// 향상된 for문
		String[] arr2 = {"가", "나", "다"};
		for(String ss : arr2) {// // 배열을 변수에 저장 ( 인덱스는 모름 )
			System.out.println(ss);
		}
		
		int sum = 0;
		int[] arr1 = {1,2,3,4,5};
		for(int aa : arr1) {// 배열을 변수에 저장 ( 인덱스는 모름 )
			sum += aa;
			System.out.println(aa);
		}
		System.out.println("합계:" + sum);
		
		
	}

}

 

열거 타입

열거타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입

이클립스에서 NEW -> Enum으로 생성 

package sec03.exam04;

public enum Week {
	//열거 타입 Enum2
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
package sec03.exam04;

public enum Enumreult {
	//열거 타입 Enum 1
SUCCESS, FAIL_ID, FAIL_PASSWORD
}
package sec03.exam04;

import java.util.Calendar;

public class EnumEx {

	public static void main(String[] args) {
		// 열거타입 1
		Week today;
		
		today = Week.수요일;
		System.out.println(today);

		int WEDNEDAY = 4;
		System.out.println(WEDNEDAY);
		
		Calendar calendar = Calendar.getInstance();
		int week = calendar.get(Calendar.DAY_OF_WEEK);
		System.out.println(week);
		
		switch (week) {
		case 1:
			today = Week.일요일;
			break;
		case 2:
			today = Week.월요일;
			break;
		case 3:
			today = Week.화요일;
			break;
		case 4:
			today = Week.수요일;
			break;
		case 5:
			today = Week.목요일;
			break;
		case 6:
			today = Week.금요일;
			break;
		case 7:
			today = Week.토요일;
			break;

		}
		System.out.println("오늘은: " + today);
		
		if(today == Week.일요일) {
			System.out.println("일요일에 쉽니다.");
		}else {
			System.out.println("자바 공부");
		}
		
		
	}

}

 

 

객체 지향 프로그래밍

객체지향 프로그래밍(OOP: Object - Oriented Programming)

객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고

있으면서 식별 가능한 것을 말함

 

 

객체의 상호작용

객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용(메소드)하면서 동작 

이때 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출

 

객체와 클래스

설계도 : 클래스, 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 함

클래스 선언 규칙

1. 하나 이상의 문자

2. 첫 글자에는 숫자가 올 수 없음

3. '$', '_'외의 특수문자는 사용 불가

4. 자바 키워드는 사용 불가

package sec01.exam01;
//설계도 ( 클래스 )
public class Student { // 설계도
	String name = "홍길동"; // 멤버 필드
	
	void printName() {		  // 메서드
		System.out.println(name);
	}
}
package sec01.exam01;

public class StudEx {

	public static void main(String[] args) {
		// 인스턴스
		Student student = null; // 클래스 변수 선언
		
		System.out.println(student);
		student = new Student(); // 객체 생성
		System.out.println(student.name); // name 속성(변수)
		student.name = "이순신"; // name 속성 변경
		System.out.println(student.name); 
		
		student.printName(); // 메서드 호출

	}

}

 

실습

배열 문제 풀이

package sec03.exam02;

import java.util.Iterator;

public class ArrayEx001 {
	public static void main(String[] args) {
		
		//문제 풀이
		
		// 4번 문제
//		int max = 0;
//		int [] array = {1,5,3,8,2};
//		
//		for (int i = 1; i < array.length; i++) {
//			if(array[i] > max) {
//				max = array[i];
//			}
//		}
//		System.out.println("max:" + max);

		//5번 문제
		int[][] array = {
				{95, 86},
				{83, 92, 96},
				{78, 83, 93, 87, 88}
		};
		int sum = 0;
		double avg = 0.0;
		
		int cnt = 0;
		
		for(int i = 0; i < array.length; i++) {
			for(int k=0; k <array[i].length; k++) {
				sum += array[i][k];
				cnt++; //0~10 만듬
			}
				
		}
		avg = sum / (double) cnt;
		
		System.out.println(sum);
		System.out.println(avg);
	}

}

 

다차원 배열 생성

package sec03.exam02;

import java.util.function.BiConsumer;

public class ArrayInArray01 {

	public static void main(String[] args) {
		// 다차원 배열
		
//		int[][] score = {{95,80}, 
//						 {92, 96, 100}, 
//						 {65}};
		int[][] score = new int[3][];
		score[0] = new int[2];
		score[1] = new int[3];
		score[2] = new int[1];
		
		score[0][0] = 95;
		score[0][1] = 80;
		score[1][0] = 92;
		score[1][1] = 96;
		score[1][2] = 100;
		score[2][0] = 65;
		
		int sum = 0;
		for(int i = 0; i < score.length; i++) {
			for (int j=0; j <score[i].length; j++) {
				for(int k=0; k<score[j].length; k++) {
					System.out.println(score[i][j]);
					
			
				}
				
			}
		}
		
	}

}

 

다차원 배열 가로, 세로 총점 

package sec03.exam02;

public class ArrayInArray02 {

	public static void main(String[] args) {
		
		// 다차원 배열 가로 세로 총점
		int[][] score = new int[3][];
		score[0] = new int[4];
		score[1] = new int[4];
		score[2] = new int[4];
		
		score[0][0] = 100;
		score[0][1] = 20;
		score[0][2] = 50;
		score[0][3] = 80;
		
		score[1][0] = 100;
		score[1][1] = 100;
		score[1][2] = 80;
		score[1][3] = 60;
		
		score[2][0] = 100;
		score[2][1] = 95;
		score[2][2] = 90;
		score[2][3] = 100;
		
		
		int korTot = 0;
		int mathTot = 0;
		int engTot = 0;
		int useTot = 0;
		for(int i = 0; i < score.length; i++) { // 행
			int sum = 0; // 초기화 위치에 따라 배열 값 틀려짐
			korTot += score[i][0];
			mathTot += score[i][1];
			engTot += score[i][2];
			useTot += score[i][3];
			for (int j=0; j <score[i].length; j++) { // 열
			int sum2 = 0;
					System.out.print(score[i][j]+", ");
				sum += score[i][j];
				
			}
			System.out.print("총점: " + sum);
			System.out.println();
			
		}
		System.out.println(korTot +"," + mathTot + ","+ engTot + "," + useTot);

	}

}

 

JSP 구구단 1 ( 단 입력하면 새로운 페이지에서 값 출력 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> 
<title>Insert title here</title>
</head>
<body>
<form action="forTest.jsp" onsubmit="return checkForWhiteSpace()">
<h1>구구단 입력 하기</h1>
<a> 단 입력 : </a><input type="text" name="gugu" id="gugu" oninput="validateInput()" />
<input type="submit" value="확인" />
</form> 
<%=request.getParameter("gugu") %>

</body>
</html>

 

JSP 구구단 2 ( 단 입력하면 새로운 페이지에서 값 출력 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css.css">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<%
int num = Integer.parseInt(request.getParameter("gugu"));
for (int i=1; i<=9; i++){
//	out.println(i+"<br/>");
%>
	<h2><tr><td><%=i %></td><td><%=i*num %></td></tr></h2>
<%
}
%>
</table>
</body>
</html>

 

자바스크립트 알고리즘 1 ( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
var a = [1,3,10,2,8];
var sum = 0;
for (var i=0; i < a.length; i++) {
	
	sum += a[i];
	
}
avg = sum / a.length;
console.log(sum);
console.log(avg);
</script>
</body>
</html>

 

자바스크립트 알고리즘 2 ( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
var a = [1,3,10,2,8];
var max = a[0];
for (var i=0; i < a.length; i++) {
	if(max < a[i]){
		
		max = a[i];
	}
	
	
}
document.writeln(max);
</script>

</body>
</html>

 

자바스크립트 알고리즘 3( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
var a = [1,3,10,2,8];
var search = 2;
var findId = -1;

for (var i=0; i < a.length; i++) {
	if( search == a[i]){
		findId = i;
		break;
	}

	}
document.writeln("인덱스:",findId,"값",a[findId]);


</script>

</body>
</html>

 

for문 별찍기 ( 연습용 코드 ) for문 값만 바꿔서 연습

		for(int i=1; i<=4; i++) {
			for(int y=4; y>=1; y--) {
				if (i < y) {
					System.out.print(" ");
				}else {
					System.out.print("*");
				}

			}
			System.out.println();
		}

 

Sanner 활용 학생 수 학생들 점수(배열이용) 최고점수, 평균 점수

package p201;

import java.util.Scanner;

public class Prob1 {

	public static void main(String[] args) {
		boolean run = true;
		int studentNum = 0;
		int[] scores = null;
		Scanner scanner = new Scanner(System.in);
		
		while(run) {
			System.out.println("----------------------------------------------");
			System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
			System.out.println("----------------------------------------------");
			System.out.print("선택>");
			
			int selectNo = Integer.parseInt(scanner.nextLine());
			
			if (selectNo == 1) {
				System.out.print("학생수>");
				studentNum = Integer.parseInt(scanner.nextLine());
				scores = new int[studentNum];
			} else if(selectNo == 2) {
				
				for(int i=0; i < scores.length; i++){
				System.out.print("scores["+ i +"]");
				scores[i] = Integer.parseInt(scanner.nextLine());
			}
			}else if (selectNo == 3) {
				for(int i=0; i < scores.length; i++){
					System.out.println("scores["+ i +"]" + scores[i]);
			} 
 			
			}else if (selectNo == 4) {
				int sum = 0;
				int max = 0;
				double avg = 0;
				
				
				
				for(int i=0; i < scores.length; i++) {	
					sum += scores[i];
					
					if(scores[i]>max) {
						max = scores[i];			
					}
				}
				avg = (double)sum / scores.length;
				System.out.println("최고점수: " + max);
				System.out.println("평균점수: " + avg);
			}else if(selectNo == 5) {
				run = false;
			}
				
				
		}
		System.out.println("프로그램 종료");
	}
				
}

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-26 9일차  (1) 2023.05.26
2023-05-25 8일차  (0) 2023.05.25
2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
2023-05-19 4일차  (0) 2023.05.19

참조 타입과 참조 변수

 

기본 타입과 참조 타입

기본 타입 변수와 참조 타입 변수의 차이점은 저장되는 값이 무엇인지에 따라 결정

기본 타입은 실제 값을 변수에 저장, 참조타입은 메모리의 번지를 변수에 저장

 

메모리 사용 영역

 

메소드 영역

JVM이 시작할 때 생성, 모든 스레드가 공유하는 영역

메소드 영역에는 코드에서 사용되는 클래스(~class)들을 클래스 로더로 읽어 클래스별로

정적 필드(static field)와 상수(constant), 메소드 코드, 생성자 코드 등을 분류해서 저장

힙 영역

객체와 배열이 생성되는 영역, 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의

필드에서 참조, 만일 참조하는 변수나 필드가 없다면 의미 없는 객체가되기 때문에 JVM에서

가비지컬렉터를 실행시켜 자동으로 제거, 개발자는 객체를 제거하기 위해 별도 코드 작성 X 

 

JVM 스택 영역

JVM 스택은 메소드를 호출할 때마다 프레임을 추가(PUSH)하고

메소드가 종료되며 해당 프레임을 제거(POP) 

 

참조 변수의 ==. != 연산

참조 타입 변수의 값은 힙 영역의 객체 주소이므로 ==, != 연산은 결국 번지 값을 비교하는 것

동일한 번지 값을 갖고 있다면 동일한 객체를 참조하는 것 

 

refVar1 == refVar2 // false
refVar1 != refVar2 // true

refVar2 == refVar3 // true
refVar2 != refVar3 // false

 

==, != 연산자로 객체를 비교하는 코드는 일반적으로 if문에서 많이 사용

변수 refVar2와 refVar3이 같은 객체를 참조할 경우 if블록을 실행하도록 코딩한 것

if ( refVar2 == refVar3 ) {....}

 

 

null과 NullPointerException

참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있음

null 값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성

참조 타입 변수가 null 값을 가지는지 확인하려면 ==, =! 연산 수행

refVar1 == null // false
refVar1 != null // true

// null값 가진 refVar2
refVar2 == null // true
refVar2 != null // false

 

 참조변수가 null을 가지고 있을 경우, 참조 객체가 없으므로 변수를 통해 객체를 사용할 수 없음

만약 null 상태에서 있지도 않은 객체의 데이터(필드)나 메소드를 사용하는 코드를 실행하면

NullPointerException 발생

int[] intArray = null;
intArray[0] = 10; // NullPointerException 에러

위 코드에서 intArray는 배열 변수이므로 참조 변수, null로 초기화 가능

하지만 이상태에서 intArray[0]에 10을 저장하려고하면 NullPointerException 발생

intArray 변수가 참조하는 배열 객체가 없기 때문에

 

String str = null;
System.out.println("총 문자수:" + str.length());//NullPointerException 에러

String은 클래스이므로 참조 타입, str 변수도 null로 초기화할 수 있음

String 객체의 length()라는 메소드를 호출하면 NullPointerException 발생

이유는 str 변수가 참조하는 String 객체가 없기 때문에

 

 

String 타입

자바는 문자열을 String 변수에 저장하기 때문에 다음과 같이 String 변수를 우선 선언

String 변수;

 

String 변수에 문자열을 저장하려면 큰따옴표로 감싼 문자열 리터럴을 대입

변수 선언과 동시에 문자열을 저장할 수도 있음

String name;
name = "김가네";
String hobby = "자바";

 

자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어 있음

다음과 같이 name1과 name2 변수가 동일한 문자열 리터럴인 "신용권"을 참조할 경우

name1과 name2는 동일한 String 객체를 참조하게 됨

String name1 = "신용권";
String name2 = "신용권";

 

일반적으로 변수에 문자열을 저장할 경우에는 문자열 리터럴을 사용하지만

new 연산자를 사용해서 직접 String 객체를 생성시킬 수도 있음

new 연산자는 힙 영역에 새로운 객체를 만들 때 사용하는 연산자로 "객체 생성 연산자"라고 함

 

String name1 = new String("신용권");
String name2 = new String("신용권");

위 코드의 경우 name1과 name2는 서로 다른 String 객체를 참조

 

동일한 문자열 리터럴로 String 객체를 생성했을 경우 == 연산의 결과는 true가 나오지만

new 연산자로 String 객체를 생성했을 경우 == 연산의 결과는 false

( == 연사자는 변수에 저장된 객체의 번지가 동일한지를 검사하기 때문에 ) 

String name1 = "신용권";
String name2 = "신용권";
String name3 = new String("신용권");

name1 == name2; // true
name1 == name3; // false

 

내부 문자열을 비교하고 싶을 때에는 String객체의 equals() 메소드를 사용 

equals() 메소드는 원본 문자열과 매개값으로 주어진 비교 문자열이 동일한지 비교

한 후 true 또는 false를 리턴

boolean result = str1.equals(str2);
// str1 = 원본 문자열
// str2 = 비교 문자열

 

String 변수는 참조 타입이므로 초기값으로 null을 대입할 수 있는데

이때 null은 String 변수가 참조하는 String 객체가 없다는 뜻

String hobby = null;

 

다음 코드처럼 hobby 변수가 String 객체를 참조하였으나 null을 대입함으로써 더 이상

String객체를 참조하지 않도록 할 수도 있습니다.

String hobby = "여행";
hobby = null;

 

 

 

 

배열

배열이란?

배열은 같은 타입의 데이터를 연속된 공간에 나열, 각 데이터에 "인덱스"를 부여해놓은

자료구조, 밑에 사진은 학생들의 성적을 score 배열로 생성한 것

 

score 배열의 각 인덱스는 각 항목의 데이터를 읽거나 저장하는데 사용되며

배열 이름옆에 대괄호 [ ]에 기입, 인덱스는 0부터 시작

scre[인덱스];

 

성적을 배열로 만들면 성적의 평균값은 배열의 인덱스를 이용해서 for문으로 쉽게 구할수있음

int sum = 0;
for(int i=0; i<30; i++) {
    sum += score[i];
}
int avg = sum / 30;

for문이 30번 반복 실행하면서 i가 0~29 까지 변하고 있음

sum 변수에는 score[0]~score[29]까지 더해지고, 마지막으로 얻은 sum을 30으로 나누어

평균 avg를 얻음

학생 수가 30명이 아니라 수백 명이 되어도 for문의 조건식 i<30만 변경하면 되므로 

많은 양의 데이터를 적은 코드로 손쉽게 처리 가능

 

배열은 같은 타입의 데이터만 저장 가능하며 선언과 동시에 저장할 수 있는 타입이 결정

한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음

 

배열 선언

배열을 사용하기 위해서는 우선 배열 변수를 선언해야 함 선언은 두 가지 형식으로 가능

//1번
타입[] 변수;

//2번
타입 변수[];
// 형식 1
int[] intArray;
double[] doubleArray;
String[] strArray;

//형식 2
int intArray[];
double doubleArray[];
String strArray[];

배열 변수는 참조 변수에 속합니다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의

배열 객체를 참조하게 됨

참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화될 수 있음

 

 

배열 생성

배열 객체를 생성하려면 값 목록을 이용하거나 new 연산자를 이용하는 방법이 있음

값 목록으로 배열 생성

값의 목록이 있다면 다음과 같이 간단하게 배열 객체를 생성할 수 있음

타입[] 변수 = { 값0, 값1, 값2, 값3, … };

String[ ] names = { “신용권”, “홍길동”, “감자바” };

이렇게 생성된 배열에서 “신용권”는 names[0], “홍길동”은 names[1],

“감자바”는 names[2]로 읽을 수 있음

names[1] = “홍삼원”;

names[1]의 “홍길동”을 “홍삼원”으로 바꾸고 싶다면 위와 같이 대입 연산자를 사용

 

 

값의 목록으로 배열 객체를 생성할 때 주의할 점

배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않음

타입[] 변수;
변수 = { 값0, 값1, 값2, 값3, … }; ← 컴파일 에러

 

 

배열 변수를 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면

다음과 같이 new 연산자를 사용해서 값 목록을 지정

new 연산자 바로 뒤에는 배열 변수 선언에서 사용한 “타입[ ]”를 붙여주고 중괄호 { }에는 값들을 나열

변수 = new 타입[] { 값0, 값1, 값2, 값3, … };

배열 names를 다음과 같이 생성할 수 있음

String[] names = null;
names = new String[] { “혼공자”, “혼공족장”, “자바맨” };

 

 

 

메소드의 매개값이 배열일 경우에도 마찬가지

int add(int[] scores) { … }

int result = add( {95, 85, 90} ); // 컴파일 에러
int result = add( new int[] {95, 85, 90} );

 

 

 

new 연산자로 배열 생성

값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면

new 연산자로 다음과 같이 배열 객체를 생성

타입[] 변수 = new 타입[길이];

 

이미 배열 변수가 선언된 경우에도 new 연산자로 배열을 생성할 수 있음

타입[] 변수 = null;
변수 = new 타입[길이];

 

다음은 길이가 5인 int[ ] 배열을 생성

int[] intArray = new int[5];

 

scores 배열은 int 배열이므로 다음과 같이 scores[0] ~ scores[29]까지 모두 기본값 0으로 초기화

int[] scores = new int[30];

 

tring 배열을 생성했다면 names 배열의 경우 names[0] ~ names[29]까지 모두 null 값으로 초기화

String[] names = new String[30];

 

 

배열이 생성되고 나서 특정 인덱스 위치에 새로운 값을 저장하려면 다음과 같이 대입 연산자를 사용

변수[인덱스] = 값;

 

배열 scores의 0, 1, 2 인덱스에 각각 83, 90, 75를 저장하는 코드

int[] scores = new int[3];
scores[0] = 83;
scores[1] = 90;
scores[2] = 75;

 

 

 

배열 길이

배열의 길이란 배열에 저장할 수 있는 전체 항목의 개수

배열의 길이를 얻으려면 다음과 같이 배열 객체의 length 필드를 읽음 

( 필드는 객체 내부의 데이터를 뜻함 ) 

 

배열 변수.length;

 

intArray가 3개의 값을 가지고 있기 때문에 변수 num에는 3이 저장

int[] intArray = {10, 20, 30};
int num = intArray.length;

 

 

 

실습

 

짝수 구하기

package sec01.exam01;

import java.util.Iterator;

public class BreakContinu {
	public static void main(String[] args) {
		// 짝수 구하기
		for(int i=1; i<=10; i++) {
			if (i%2 != 0) {
				continue;
			}
			System.out.println(i);
		}
		
	}

}

 

do-while

package sec01.exam01;

public class DoWhile {

	public static void main(String[] args) {
		int i = 0;
		int j = 1;
		
		while (j < 3) {
			System.out.println(j);
			j++;
		}
		
		do {
			
			System.out.println(i);
			i++;
		}while (i > 3); // 조건에 안맞아도 1번은 실행

	}

}

 

참조변수 / 참조변수 비교, 문자열 비교

package sec01.exam01;

public class TestEx {

	public static void main(String[] args) {
		
		//참조변수
//		int[] scores = {10, 20, 30};
//		scores[0] = 20;
//		System.out.println(scores[0]);
//		for( int i = 0; i < 3; i++) {
//			if (scores[i] != 10)
//			System.out.println(scores[i]);
//			
//		}
		String name1 = "홍길동";
		String name2 = "홍길동";
		String name3 = new String("홍길동");
		String name4 = new String("홍길동");
		
		if (name3 == name4) {// 참조변수 비교
			System.out.println("같다");
		}else {
			System.out.println("다르다");
		}
		if (name3.equals(name4)) {// 문자열 비교 
			System.out.println("같다");
		}else {
			System.out.println("다르다");
		}
		
		
	}

}

 

배열 타입별

package sec02.exam01;

public class ArrayEx {

	public static void main(String[] args) {
		// 배열
//		int acores[] = {1,2,3,4};
//		int[] acores = new int[3];
//		for (int i=0; i < 3; i++) {
//			System.out.println(acores[i]);
//		0
//		0
//		0
//		}
		
//		String[] acores = new String[3];
//		for (int i=0; i < 3; i++) {
//			System.out.println(acores[i]);
//			null
//			null
//			null
//		}
//		double[] acores = new double[3];
//		for (int i=0; i < 3; i++) {
//			System.out.println(acores[i]);
//			0.0
//			0.0
//			0.0
//		}
		char[] acores = new char[3];
		for (int i=0; i < 3; i++) {
			System.out.println(acores[i]);
		
		}
	}

}

 

참조형 배열 메서드

package sec02.exam01;

public class ArrayEx03 {

	//참조형 배열 메서드
	public static void main(String[] args) {
		int[] scores = {70, 80, 90, 60};
		int sum = method(scores);
		for (int i=0; i < scores.length; i++) {
			System.out.println(scores[i]);
		}
		System.out.println("총점:" + sum);

	}
	public static int method(int[] nums) {
		int sum = 0;
		for (int i=0; i<nums.length; i++) {
			nums[i] += 10; 
			sum += nums[i];
			
		}
		return sum;
	}
}

 

배열 이름, 전화번호, 주소 저장

package sec02.exam01;

public class ArrayEx2 {

	public static void main(String[] args) {
		int[] score = {1,2,3,4};
		int[] socres = new int[4];
		socres[0] = 1;
		socres[1] = 2;
		socres[2] = 3;
		socres[3] = 4;
		
		String[] header = {"성명", "전화번호", "주소"};
		String[] content = new String[3];
		content[0] = "홍길동";
		content[1] = "010-1234-2345";
		content[2] = "서울 서대문구";
		
		for (int i=0; i<3; i++) {
			System.out.print(header[i]+"\t");
		}
		System.out.println();
		
		for (int i=0; i<3; i++) {
			System.out.print(content[i]+"\t");
		}
		System.out.println();
		
		
	}

}

 

배열 두 수의 합

package sec02.exam01;

import java.lang.reflect.Method;
import java.util.jar.Attributes.Name;

public class ArrayExTotall {

	public static void main(String[] args) {
		int sum = add(3, 5);


		
	}
	public static int add(int a, int b) {
		int sum = a+b;
		System.out.println("두 수의 합은" + sum + "입니다.");
		return sum;

		
} 
	}

 

배열 1부터 100까지 합계

package sec02.exam01;

public class ArrayMethodEx {

	public static void main(String[] args) {
//		aaa(100); // 호출 // c = 100
//		int num = bbb(); // int -> double로 바꿀시 double로 출력
//		System.out.println("main()" + num);
		sum(100);// ccc(100); -> ccc(i <= n)
		
		int num = 100;
//		int tot = sum(num);
		sum(num);
		System.out.println("1부터 "+num+"까지의 합계:");

	}
//	public static void aaa(int c) { // int = c 매개변수
//		System.out.println("aaa()");
//	}
//	public static int bbb() {
//		System.out.println("bbb()");
//		return 100; // 14줄 int type만 return 가능
//	}
	
	public static void sum(int n) { 
		int sum = 0;
		for (int i=1; i <= n; i++) {
			sum += i;
		}
		System.out.println("1부터 "+n+"까지의 합계:" + sum);
		
	}
		
}

 

maing( ) 메소드의 매개 변수 1, 2 번째 데이터 받기

package sec02.exam01;

public class ArreayEx04Main {

	public static void main(String[] args) {
		//main() 메소드의 매개 변수
		if(args.length != 2) {
			System.out.println("값의 수가 부족합니다.");
			System.exit(0); // 프로그램 강제 종료
		}
		String strNum1 = args[0];//첫번째 데이터 받기
		String strNum2 = args[1];//두번째 데이터 받기
		
		int num1 = Integer.parseInt(strNum1);//문자열을 정수로 변환
		int num2 = Integer.parseInt(strNum2);
		
		int result = num1 + num2;
		System.out.println(num1 + " + " + num2 +" = " + result);
	}

}

 

JSP 자바스크립트 Login

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="res.jsp" onsubmit="return checkForWhiteSpace()">
	<h1>로그인 하기</h1>
<a> 아이디 : </a><input type="text" name="kor" id="kor" oninput="validateInput()" /> 
		<div></div>
<a> 패스워드 :</a>		<input type="password" name="eng" id="eng" /> 
		<input type="submit" value="확인" />
		<script>
			function checkForWhiteSpace() {
				var kor = document.getElementById("kor").value; // "kor" id값
				var eng = document.getElementById("eng").value; // "eng" id값
				if (kor.trim() == "") {
					alert("공백은 입력할 수 없습니다.");
					return false;
				}
				if (eng.trim() == "") {
					alert("공백은 입력할 수 없습니다.");
					return false;
				}
				return true;
			}
			function validateInput() {
				  var input = document.getElementById("kor").value;
				  var pattern = /^[a-zA-Z0-9!@#$%^&*()]*$/; // 영문자, 숫자, 특수 기호만 허용하는 정규표현식
				  
				  if (!pattern.test(input)) {
					  document.getElementById("kor").value = input;
				    alert("영문자, 숫자, 특수 기호만 입력해주세요.");
				  }
				}
		</script>
	</form>
</body>
</html>

 

JSP 자바스크립트 Login 값 넘기는 곳

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("kor") %>
<%=request.getParameter("eng") %>
</body>
</html>

 

JSP 자바스크립트 css 파일

h1 {
  color : blue;
}

h2 {
  color : green;
}

p {
  margin-left: 10px;
}

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-25 8일차  (0) 2023.05.25
2023-05-24 7일차  (2) 2023.05.24
2023-05-22 5일차  (0) 2023.05.22
2023-05-19 4일차  (0) 2023.05.19
2023-05-18 3일차  (0) 2023.05.18

+ Recent posts