일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- javaee
- 리눅스
- 정처기필기
- cisco packet
- rinux
- autoset
- w3school
- 오라클
- jsp연결
- NCS
- 라우터
- ciscopacket
- sql
- php
- 버추얼머신
- ospf
- 이것이 자바다
- 원형그래프
- Oracle
- 참조타입
- Cisco
- Java
- 네트워크관리사
- jsp
- html
- 정보처리기사
- 네트워크
- VLAN
- 데이터베이스
- 자바
- Today
- Total
기록해! 정리해!
자바 - 오버플로우, 연산자 , 확인문제 본문
º 오버플로우
public static void main(String[] args) {
int v1 = 1000000;
int v2 = 1000000;
int result1 = v1 * v2;
long result2 = (long)v1 * (long)v2; //해결방법
System.out.println(result1); // 오버플로우 발생
System.out.println(result2); // 정상값
}
-- 오버플로우가 되는지 안되는지 미리 확인하는 법 (81p)
package test;
public class test78 {
public static void main(String[] args) {
try{System.out.println("Integer.MAX_VALUE:" +Integer.MAX_VALUE);
System.out.println("Integer.MIN_VALUE:" +Integer.MIN_VALUE);
int result = safeAdd(2000,100);
System.out.println(result);
}catch(ArithmeticException e) {
System.out.println("오버플로우가 발생하여 정확하게 계산할 수 없음");
}catch(Exception e) { --순서를 바꾸면 안됨
System.out.println("예외가 발생했습니다");
}
}
public static int safeAdd(int left, int right) {
if((right>0)) {
System.out.println("실행1");
if(left>(Integer.MAX_VALUE-right)) { //2147483647 -ex.1 = 2147483646보다 크면안됨
System.out.println("실행2");
throw new ArithmeticException("오버플로우 발생"); //throw:예외발생 new:객체생성
}
}else {
System.out.println("실행3");
if(left>(Integer.MIN_VALUE-right)) {
System.out.println("실행4");
throw new ArithmeticException("오버플로우 발생");
}
}
return left + right;
}
}
-- 100 : 참이면 new ArithmeticException 가 발생하는 거임
-- 2147483647
º 정확한 계산은 정수를 사용
public static void main(String[] args) {
int apple = 1;
double pieceUnit = 0.1;
int number = 7;
double result = apple - number*pieceUnit;
System.out.println("사과 한개에서");
System.out.println("0.7조각을 빼면, ");
System.out.println(result + "조각이 남는다.");
}
}
º
Exception e : 다 됨
ArithmeticException e : 다른 연산에서는 실행이 안되고 연산 예외에서만 실행됨.
package test;
public class test78 {
public static void main(String[] args) {
try {
System.out.println("시작");
int z = 5 / 0;
System.out.println("결과:+z");
}catch(ArithmeticException e) {
System.out.println("0으로 나누면 안됨!");
System.out.println(e);
}finally {
System.out.println("프로그램 종료");
}
}
}
º
isNaN(z)); //숫자가 아니면 참
isFinite(z)); // 유한 값이면 참
isInfinite(z)); //값이 무한대이면 참
package test;
public class test78 {
public static void main(String[] args) {
try {
System.out.println("시작");
double z = 5 / 1.5 ;
System.out.println("결과값:" + z);
System.out.println("결과:" + Double.isNaN(z)); //숫자가 아니면 참
System.out.println("결과:" + Double.isFinite(z)); // 유한 값이면 참
System.out.println("결과:" + Double.isInfinite(z)); //값이 무한대이면 참
}catch(ArithmeticException e) {
System.out.println("0으로 나누면 안됨!");
System.out.println(e);
}finally {
System.out.println("프로그램 종료");
}
}
}
5를 0.0으로 나누니까 double z = 5 / 0.0;
값이 0 이 아니라 무한대로 찍힘
º 0과 0.0은 같을까요?
if (0 == 0.0) {
System.out.println("같다");
같다네...
double z = 5 / 0.0; //하지만 나누기에서 0과 0.0은 결과가 다르다
º
package test;
public class test78 {
public static void main(String[] args) {
try {
int z = 5;
if (Double.isNaN(z) || Double.isInfinite(z)) {
System.out.println("연산불가");
}else {
System.out.println(z+2);
}
System.out.println("결과:" + Double.isNaN(z)); //숫자가 아니면 참
System.out.println("결과:" + Double.isFinite(z)); // 유한 값이면 참
System.out.println("결과:" + Double.isInfinite(z)); //값이 무한대이면 참
}catch(ArithmeticException e) {
System.out.println("0으로 나누면 안됨!");
System.out.println(e);
}finally {
System.out.println("프로그램 종료");
}
}
}
º
package test;
import java.util.Scanner;
public class test78 {
public static void main(String[] args) {
try {
@SuppressWarnings("resource")
Scanner z = new Scanner(System.in);
double z1 = z.nextDouble(); //실수가 아닌 값이 들어오면 에러발생
if (Double.isNaN(z1) || Double.isInfinite(z1)) {
System.out.println("연산불가");
}else {
System.out.println(z1+2);
}
System.out.println("결과:" + Double.isNaN(z1)); //숫자가 아니면 참
System.out.println("결과:" + Double.isFinite(z1)); // 유한 값이면 참
System.out.println("결과:" + Double.isInfinite(z1)); //값이 무한대이면 참
}catch(ArithmeticException e) {
System.out.println("0으로 나누면 안됨!");
System.out.println(e);
}finally {
System.out.println("프로그램 종료");
}
}
}
º 메모리의 주소공간이 같은지 , 다른지 물어보는 것
new 가 생기면 힙메모리가 올라와서 새 영역으로 생김
equlas를 가지고 기본적인 문자연산비교
package test;
public class test78 {
public static void main(String[] args) {
String str1 = "신용권";
String str2 = "신용권";
String str3 = new String("신용권");
String str4 = new String("신용권");
System.out.println(str3);
if(str1 == str2) { // 변수는 값이 같으면 같은 공간을 사용
System.out.println("같다");
}else {
System.out.println("다르다");
}
if(str3 == str4) { //주소 공간 비교
System.out.println("같다");
}else {
System.out.println("다르다");
}
if(str3.equals(str4)) { //주소의 값을 비교
System.out.println("같다");
}else {
System.out.println("다르다");
}
}
}
º 논리 연산자 && , ||
package test;
public class test78 {
public static void main(String[] args) {
int a = 20;
int b = 10;
if(a>=10 && b>=20){
System.out.println("참");
}else {
System.out.println("거짓");
}
if(a>=10 || b>=20){
System.out.println("참");
}else {
System.out.println("거짓");
}
}
}
º 삼항 연산자
참이면 ? 뒤에 있는게 실행 됨
package test;
public class test78 {
public static void main(String[] args) {
int score = 95;
String grade = (score>=90) ? "합격" : "불합격" ;
System.out.println(grade);
int score2 = 80;
String grade2 = (score2>=90) ? "수" : ((score2>=80) ? "우" : "미달" ) ;
System.out.println(grade2);
}
}
º 확인문제
2)
package test;
public class test78 {
public static void main(String[] args) {
int x = 10;
int y = 20;
int z = (++x) + (y--);
System.out.println(z);
}
}
: 31
3)
package test;
public class test78 {
public static void main(String[] args) {
int score = 85;
String result = (!(score>90))? "가":"나";
System.out.println(result);
}
}
:가
4)
package test;
public class test78 {
public static void main(String[] args) {
int pencils = 534;
int students = 30;
int pencilsPerStudent = ( #1 );
System.out.println(pencilsPerStudent);
int pencilsLeft = ( #2 );
System.out.println(pencilsLeft);
}
#1 : pencils/students
#2 : pencils%student
5)
package test;
public class test78 {
public static void main(String[] args) {
int value = 356;
System.out.println (value - (vlaue%300));
}
}
6)
package test;
public class test78 {
public static void main(String[] args) {
int LenghtTop =5 ;
int lenghtBottom = 10;
int height =7;
double area = (#1);
System.out.println (area);
}
}
#1 : ((double)lengthTop+lenghBottom/2) *7
7)
package test;
public class test78 {
public static void main(String[] args) {
int x = 10;
int y = 5;
System.out.println ( (x>7) && (y<=5) ); -------(true)
System.out.println ( (x%3 == 2) || (y%2 !=1));; ------(false)
}
8)
package test;
public class test78 {
public static void main(String[] args) {
double x = 5.0;
double y =0.0;
double z = x % y ;
if(#1) {
System.out.println("0.0으로 나눌 수 없습니다.");
}else {
double result = z + 10;
System.out.println("결과: " + result);
}
}
}
#1 : Double.isNaN(z)
º 난수
package test;
public class test78 {
public static void main(String[] args) {
for (int i=1; i<=10; i++) {
int r = (int) (Math.random()*10);
System.out.println(r);
}
}
}
º
'JAVA' 카테고리의 다른 글
자바 - TV 인터페이스 (0) | 2022.07.07 |
---|---|
자바 - 난수 , switch, break, for문, while문, 확인문제 (3장,4장) (0) | 2022.07.06 |
자바 - 메소드연습 , 구구단 (0) | 2022.07.05 |
자바 - 형변환 , 연산 우선수위, 구구단 (0) | 2022.07.04 |
자바 - 이론 , 출력 , 연산 (0) | 2022.07.01 |