2023.04.14 null값 처리,
* 초기화 값이 없는 상태로 선언만 한경우, 정수는 0, 실수는0.0, 그외는 null값으로 초기화 된다.
*
* */
java에서도 null값이 존재 하는데 null값은 에러의 주된 원인이 되기도 한다.
null : 참조타입 변수는 객체를 참조하지 않는다(값이 없다)는 뜻
int[ ] intArray = null;
if(intArray != null) { //nullPointException에러가 발생하지 않도록 유도 해주면 좋다.
intArray[0] = 10;
}else {
System.out.println("intArray가 널값을 가지고있다.");
}
package kr.ac.busanit.ch03;
//메소드 - 실습
public class MethodExam02 {
public static void main(String[] args) {
//몸풀기 실습
//구구단 2~9단까지 출력을 메소드화 하여 소스코드를 작성해봅시다.
//구구단출력 메소드 호출
// gugudan();
//구구단을 특정단수~특정단수까지 출력하는 메소드를 생성하고 호출해봅시다.
//ex> 매개변수 3,6 -> 3단부터 6단까지 출력해주는 구구단 메소드
// System.out.println("구구단을 특정단수~특정단수까지 출력하는 메소드를 생성하고 호출해봅시다.");
// gugudan2(2,5);
//매개변수 두개를 받아서 시작단~종료단 출력을 하도록하는데
//반환값을 설정하여 문자열로 반환되도록 -> 반환된 문자열을 출력하도록 소스코드 작성을 해봅시다.
//메소드 호출 및 반환값인 문자열 출력하도록
String result = gugudan3(7,9);
System.out.println(result);
}
//구구단 메소드 생성
static void gugudan() {
for(int i=2;i<=9;i++) {
for(int j=1;j<=9;j++) {
System.out.println(i+"x"+j+"="+i*j);
}
}
}
//매개변수 두개를 받아서 특정단수~특정단수까지 출력하는 메소드를 생성
static void gugudan2(int a,int b) {
for(int i=a;i<=b;i++) {
System.out.println("======"+i+"단======");
for(int j=1;j<=9;j++) {
System.out.println(i+"x"+j+"="+i*j);
}
}
}
//매개변수 두개를 받아서 시작단~종료단까지 문자열로 저장후 반환하는 메소드 생성
//문자열에서 줄바꿈은 \n으로 표현 가능함.
static String gugudan3(int a,int b) {
String result2 = "";
for(int i=a;i<=b;i++) {
result2 += ("======="+i+"단시작======\n");
for(int j=1;j<=9;j++) {
result2 += (i+"x"+j+"="+i*j+"\n");
}
} return result2;
}
}
package kr.ac.busanit.ch03;
import java.util.Scanner;
//메소드 - 실습
// bmi(체질량지수)측정기 구현하기
// 공식 : 몸무게 / 키의제곱
// 사용되는 단위 : 몸무게(kg), 키(m)
// ex) 65 / (1.7x 1.7)
// 측정결과는 다음과 같이 나눌 수 있다.
/*
* <18.5 : 저체중
* 18.5~24.9 : 표준
* 25~29.9 : 과체중
* 30~34.9 : 비만
* 35 <= : 고도비만
*
* 키와 몸무게를 입력받도록 하고, 결과값은 다음과 같이 출력하도록 하자
* bmi 수치는 : 25입니다.
* 과체중 입니다.
* */
public class BmiTest {
public static void main(String[] args) {
//소수점 두자리까지만 표현을 하고 싶다.
// System.out.println(Math.round((1.1165*100))/100.0);
Scanner sc1 = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);
System.out.print("키를 입력하세요 :");
double h = sc1.nextDouble();
System.out.print("몸무게를 입력하세요 : ");
double w = sc2.nextDouble();
if(h>10) {
h= h/100;
}
double result1 = bmi(w,h);
double bmi = Math.round((result1*100))/100.0;
System.out.println(bmi);
String result2 = grade(result1);
System.out.println("bmi 수치는: "+bmi+"입니다.");
System.out.println(result2+"입니다.");
}
static double bmi(double w, double h) {
double result = w/(h*h);
// bmi의 결과값이 소수점자리 두자리까지 표현하도록 수정
// Math.round(); -> 실수를 정수로 변환해줌
return result;
}
static String grade(double a) {
String result = "";
if(a>=35) {
result = "고도비만";
}else if(a>=30) {
result = "비만";
}else if(a>=25) {
result = "과체중";
}else if(a>=18.5) {
result = "표준";
}else {
result = "저체중";
}
return result;
}
}
package kr.ac.busanit.ch03;
//메소드 오버로딩
//동일한 이름을 가지는 메소드를 만드는 행위
//매개변수의 타입, 개수, 순서 중 하나라도 달라야 오버로딩 성립
public class MethodExam03 {
public static void main(String[] args) {
// 메소드 오버로딩 활용예시 : System.out.print(혹은 println)메소드
// System.out.print(true);ㄴ
//오버로딩된 메소드를 호출 (매개변수의 갯수를 다르게하여 구성)
// gugudan(3,4);
// gugudan(7);
//오버로딩된 메소드를 호출 (매개변수의 타입을 다르게하여 구성)
add(1,2);
add("1","2");
//메소드의 매개변수는 순서가 중요하다.
// myIntroduce(0, "김서영"); -> 메소드생성단계에서 정해놓은 순서를 무시하면 에러발생
myIntroduce("김서영", 30);
myIntroduce(10,"홍길동");
//오버로딩된 메소드를 호출(매개변수의 순서를 다르게 하여 구성)
}
//같은 매개변수를 받을때도 타입이 다르면 순서를 다르게해서 오버로딩 구성 가능
static void myIntroduce(int age, String name) {
System.out.println("이름은 : "+name+"이고, 나이는"+age+"입니다.");
}
//매개변수는 여러타입을 넣어도 상관없다. 대신 사용을 할때 매개변수의 순서가 중요!
static void myIntroduce(String name, int age) {
System.out.println("이름은 : "+name+"이고, 나이는"+age+"입니다.");
}
//매개변수의 타입을 다르게 지정하여 오버로딩
static void add(int a, int b) { //산술연산 더하기를 해주는 add메소드
System.out.println(a+"+"+b+"="+(a+b));
}
static void add(String a, String b) { //문자열을 연결해주는 add메소드
System.out.println(a+"+"+b+"="+(a+b));
}
// 같은 gugudan메소드이지만 매개변수의 개수의 차이로 다른 메소드가 된다.
static void gugudan() {
for(int i=2;i<=9;i++) {
for(int j=1;j<=9;j++) {
System.out.println(i+"x"+j+"="+i*j);
}
}
}
static void gugudan(int target) {
System.out.println("======"+target+"단======");
for(int j=1;j<=9;j++) {
System.out.println(target+"x"+j+"="+target*j);
}
}
static void gugudan(int a,int b) {
for(int i=a;i<=b;i++) {
System.out.println("======"+i+"단======");
for(int j=1;j<=9;j++) {
System.out.println(i+"x"+j+"="+i*j);
}
}
}
}
package kr.ac.busanit.ch03;
//변수의 유효 범위
// 전역변수 지역변수로 나뉜다.
//전역변수 - 클래스 영역에서 선언
// 지역변수 - 클래스영역 외(메소드, 생성자, 조건문, 반복문 등)
public class VarScope {
//전역변수
static int global = 0; //클래스영역에서 생성된 변수
static boolean globalScope = true;
public static void main(String[] args) {
//지역변수
int local = 1; //메소드영역에서 생성된 변수
global = 1;
globalScope = false;
boolean localScope = true;
if(localScope) {
int num = 1;
System.out.println(num);
}else {
int num = 2;
System.out.println(num);
}
simple();
for(int num = 0; num <5; num++) {
// int num=0; -> 중복선언, 사용불가
}
}
static void simple() {
globalScope = false;
int num = 3;
System.out.println(num);
}
// local = 3; -> 사용가능한 범위를 벗어났기때문에 문법적 에러 발생
static void method1(int num) {
// int num = 0; -> 중복선언, 사용불가
}
}
package kr.ac.busanit.ch03;
//변수 유효범위 테스트
public class VarScope02 {
static int num = 10;
public static void main(String[] args) {
System.out.println(num); //사용되는 위치에 따라서 지역변수 혹은 전역변수로 인식된다.
int num = 20;
System.out.println(num);
temp();
}
static void temp() {
int num= 30;
System.out.println(num);
}
}