본문 바로가기
코딩/수업 정리

자바 자습

by 6^6 2020. 11. 28.
728x90

20.11.28 [005]

문제 - 두 개의 주사위를 던졌을 때 나오는 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성하시오.

public class Hello {
	public static void main(String[] args) {       
		while(true){
        	int num1 =(int)(Math.random()*6)+1;
            	int num2 = (int)(Math.random()*6)+1;
        	System.out.println(num1+","+num2);
       		 if(num1+num2==5)
          	 break;
         }
    }
}

 

나의 답 - 오류:무한루프로 실행됨

public class Hello {
	public static void main(String[] args) {		
 
		int num1 =(int)(Math.random()*6)+1; 
		int num2 = (int)(Math.random()*6)+1;
        
		while(num1+num2==5){
			System.out.println(num1+","+num2);
			break;
      	 	 }
		if(num1+num2==5) {
			System.out.println(num1+","+num2);
		}
	}
}

 

의문점

public class Hello {
	public static void main(String[] args) {       
			//이걸 왜 이부분에 넣으면 안되는지?
		//int num1 =(int)(Math.random()*6)+1; 
		//int num2 = (int)(Math.random()*6)+1;
        
        while(true){	//꼭 while안에 true를 넣어야 되는건지!??
	        int num1 =(int)(Math.random()*6)+1; 
			int num2 = (int)(Math.random()*6)+1;
        System.out.println(num1+","+num2);
        if(num1+num2==5)
        break;
        }
    }
}
 

블로그에서 긁어옴

while 문에서 조심해야 할 점은, 카운터로 사용되는 변수의 선언과 초기화의 위치를 유의해야한다. while 안에서 변수의 초기화가 이루어지면 매 반복마다 변수의 값이 해당 값으로 초기화 되어지므로 증가나 감소된 결과를 얻을 수 없다.

내 생각 + 블로그글
★반복문 안에서 변수의 초기화를 하게되면 초기화도 반복된다!! 그래서 while문 안에서 변수의 초기화를 넣어줘어야 원하는 값이 나올때까지 반복한다. 그리고 그 밖에서 초기화를 하게되면 그 조건이 만족할때 무한으로 반복된다.-for문, while문 둘다 해당. (출처 : langand.tistory.com/30)

 

 

20.11.28 [005]

문제-1부터5까지 더해라.

 

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

나의 답 - 오류 : while문 안에서 후위연산자를 넣어줄때 생기는 오류

public class Hello {
	public static void main(String[] args) {		
 
		 int num =0; 
		 int sum =0; 
		 while((num++) <= 5){ 	//num이 여기서 5까지 나오고
         				//다음에 빠져나올때 6이 더 추가되어서 6까지 더해진다.
			 System.out.println(num);//여기서 몇까지 출력되는지 알 수 있다.
			 sum+=num;
		} 
		 System.out.println(sum); 
	}
}//1~6까지 더해짐

의문점

public class Hello{
	public static void main(String[] args){
    	int x=10;
    	int y=20;
        int z=(++x)+(--y); //x는 먼저 증가, y는 연산부터 참가. 그 후 감소
        System.out.println(z);
	}
} //11+20=31

왜 그런지 블로그에서 긁어옴

 

for문에서는 전위형이나 후위형 증가값이 의미가 없다.  for(a; b; c;) a의 값을 셋팅하고 b의 조건을 비교한 후 내부로직을 실행한 다음 c를 증가 시키기 때문이다.

while문에서도 역시 전위형이나 차이가 있다. // 후위형은 먼저 비교후 값을 증가 시키기 때문에 // 전위형 (1~9), 후위형 (1 ~ 10)이 찍힌다


 i++(후위형)과 ++i(전위형)은 단독으로 쓰일때는 동일한 결과값을 같지만, 다른 메서드나 변수와 같이 쓰일 경우 값을 넣어준 후 증가(후위형), 값을 증가 후 넣어줌(전위형)처럼 사용 가능 하다. 

 

20.11.30 

return값 있는 메소드에서-

void 가 수정가능한곳, syso있는곳. 파라미터 함수를 한번더 정의해주고 숫자넣어줌.

파라미터있는 함수는 고정임.

public class Hello {
	public static void main(String[] args) {       
//매개변수 하나를 받아 원의 넓이를 리턴하는 함수를 작성하시오.
		//double sum = circle(5.5);		//둘중하나 다 가능임.
		System.out.println(circle(5.5));
	}
	
	public static double circle(double r) {
		final double PI = 3.14;
		
		return r*r*PI;
	}		
}

 

 

20.12.02

public class TV {
	String brand;
	int year;
	int inch;
	
	public TV(String brand,int year,int inch) { //왜 public void TV는 안되고,
		this.brand=brand;		// public TV나 TV()만 되는지?
		this.year=year;
		this.inch=inch;
	}	
	public void show() {
		System.out.println(brand+"에서 만든 "+year+"년"+inch+"인치");
	}
	
}
public class Hello {
		public static void main(String[] args) {
			
			TV myTV = new TV("LG", 2017, 32); //TV라는 클래스를 만들어라
			myTV.show();       
		}
	}//LG에서 만든 2017년 32인치

↑의문점 - 왜 public void TV 는 안되는지?

내생각 - show()는 값이 없어서 일단 void. TV는 값은 있으니까 void없앤듯??

 

 

 

public class Prac {
	public static void main(String[] args) {
		
		int math, science, english;
		math = 90;
		science = 100; 
		english = 80;

		Grade me = new Grade(math, science, english);

		System.out.println("평균은 " + me.average());
	}

}
package org.opentutorials.javatutorials.method;

public class Grade {
	double math, science, english;

	public Grade(double math, double science, double english) {
		this.math = math;
		this.science = science;
		this.english = english;

	}

	public double average() { //여기에 double형이 바로 들어가는이유는?
		return (math + science + english) / 3.0;

	}
}//평균은 90.0

↑위에 me.average()값이 출력되는데 빈칸이면서 왜 double형 메소드를 만드는건지??

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

20.12.01 Tue [007]  (0) 2020.12.01
20.11.30 Mon [006]  (0) 2020.11.30
20.11.27 Fri [005]  (0) 2020.11.27
20.11.26 Thu [004]  (0) 2020.11.26
20.11.25 Wed [003]  (0) 2020.11.25

댓글