스포츠마케터의 초보 개발자 도전기
JAVA study 03 본문
오늘의 메인은 Scanner, random, formatter, for문
가보자!
1. Scanner : 키보드 입력값을 받아오는 코드
package ex1_scanner;
import java.util.Scanner;
//Ctrl + Shift + o : import 단축키
public class Ex1_scanner {
public static void main(String[] args) {
//키보드에서 직접 값을 입력받도록 하는 클래스, Java에만 있는 기능으로 실무에 잘 사용되지 않음
Scanner sc = new Scanner(System.in);
//Sc + Ctrl + space
System.out.print("정수 : ");
//System.out.println("정수 : "); //ln은 line의 약자로 값을 보여주고 한줄 밑으로 내림
int num = sc.nextInt(); //<- 이 타입은 정수만 받을 수 있음, 정수말고 실수나 문자 입력시 오류
System.out.println("입력받은 값 : " + num);
System.out.println("문장 : ");
String str = sc.next(); //모든 문자 입력. 숫자도 입력은 가능하나 실제 정수가 아니라 연산이 안됨. 띄어쓰기는 인식안되서 띄어쓴 앞까지 저장. nextLine으로 띄어쓰기도 인식 가능하나, 기존 값을 가져와서 Scanner를 새로 만들어야함.
System.out.println("입력받은 값 : " + str);
}// main
}
2. Random : 컴퓨터가 임의로 난수발생시키는 코드
package ex2_random;
import java.util.Random;
public class Ex1_random {
public static void main(String[] args) {
// 난수발생 클래스 Random
// new Random().nextInt(난수의 범위) + 시작수;
// 난수의 범위 = 큰수-작은수+1
// ex> 12389 ~ 57319 범위
// new Random().nextInt(57319 - 12389 + 1) + 12389;
// 5~9사이의 난수
int num = new Random().nextInt(9 - 5 + 1) + 5;
System.out.println("난수 : " + num);
System.out.println("--------------------");
//A-Z중 하나 랜덤표시
int alphabet = new Random().nextInt('Z' - 'A' + 1) + 'A';
System.out.println("알파벳 : " + (char)alphabet);
}// main
}
3. Fomatter
package ex3_formatter;
public class Ex1_fommatter {
public static void main(String[] args) {
//저의 나이는 23 입니다
int age = 23;
System.out.println("저의 나이는 " + age + " 입니다");
System.out.printf("저의 나이는 %d 입니다\n", age); //정수는 %d
//나는 23세 이고, 형은 25세 입니다.
System.out.printf("나는 %d세이고, 형은 %d세 입니다.\n", 23, 25);
// 나의 성적은 B입니다.
char sj = 'B';
System.out.printf("나의 성적은 %c입니다.\n", sj); //문자는 %c
//참은 true, 거짓은 false다.
System.out.printf("참은 %b, 거짓은 %b다.\n", true, false); //참/거짓은 %b
//오늘의 기온은 2.15도 입니다
float temp = 2.15f;
System.out.printf("오늘의 기온은 %f입니다.\n", temp); //실수는 %f
System.out.printf("오늘의 기온은 %.1f입니다.\n", temp); //실수는 %f. %.1f => 소수점 뒤에 한자리까지만 보임. 반올림됨
//내 이름은 홍길동이야.
String name = "홍길동";
System.out.printf("내 이름은 %s야.\n", name); //문장 %s
//2월 01일과 28일 . 1일에 01이라고 표시하고 싶음
System.out.printf("2월 %02d일과 %d일\n", 1, 28); //0붙여서 2자리로 만들꺼임, ex> %03d=>001
//나는 상위 10%야 => %%두개가 % 문자출력
System.out.printf("나는 상위 %d%%야\n", 10);
//포맷의 종류 포매터의 시작 %
//%d : 정수. formatter에서는 아스키코드 적용 안됨. 0붙여서 2자리로 만들꺼임 %02d, ex> %03d=>001
//%c : 문자
//%b : 논리(boolean)
//%f : 실수 (float, double). %.1f => 소수점 뒤에 한자리까지만 보임. 반올림됨
//%s : 문장(String), 어떤 타입의 문자가 들어가도 오류는 나지 않지만...
//%% : %문자를 출력하기 위한 코드
//escape코드 이스케이프코드 시작 \
//문자열 안에서 특정한 기능을 가능하게 하는 키워드
// \n : 개행(줄바꿈)
// \"내용\" : 내용을 ""로 포장. 문장안에 쌍따옴표 넣고 싶을때 => 나는 \"홍길동\"이야.
// \t : tab키 만큼 간격 확보
System.out.println("가\t나\t다\tfk");
System.out.println("홍길동\t김길동");
}//main
}
중간 test
package ex4_exam;
import java.util.Scanner;
public class NumberGame {
public static void main(String[] args) {
//04 05 06 07 12 13 14 15 20 21 22 23 28 29 30
//16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
//01 03 05 07 09 11 13 15 17 19 21 23 25 27 29
//08 09 10 11 12 13 14 15 24 25 26 27 28 29 30
//02 03 06 07 10 11 14 15 18 19 22 23 26 27 30
Scanner sc = new Scanner(System.in);
int select = 0; //키보드에서 입력 받을 선택값
int num = 0; //정답을 저장할 변수
System.out.println("1~30사이의 숫자를 생각하세요.");
System.out.println("04 05 06 07 12\n13 14 15 20 21\n22 23 28 29 30");
System.out.println("생각한 숫자가 있나요? 1 | 0 : ");
select = sc.nextInt();
if( select == 1 ) {
num += 4;
}
System.out.println("16 17 18 19 20\n21 22 23 24 25\n26 27 28 29 30");
System.out.println("생각한 숫자가 있나요? 1 | 0 : ");
select = sc.nextInt();
if( select == 1 ) {
num += 16;
}
System.out.println("01 03 05 07 09\n11 13 15 17 19\n21 23 25 27 29");
System.out.println("생각한 숫자가 있나요? 1 | 0 : ");
select = sc.nextInt();
if( select == 1 ) {
num += 1;
}
System.out.println("08 09 10 11 12\n13 14 15 24 25\n26 27 28 29 30");
System.out.println("생각한 숫자가 있나요? 1 | 0 : ");
select = sc.nextInt();
if( select == 1 ) {
num += 8;
}
System.out.println("02 03 06 07 10\n11 14 15 18 19\n22 23 26 27 30");
System.out.println("생각한 숫자가 있나요? 1 | 0 : ");
select = sc.nextInt();
if( select == 1 ) {
num += 2;
}
if (num != 0 && num != 31) {
System.out.printf("생각한 숫자는 : %02d\n", num);
} else {
System.out.println("잘 못 선택한 문항이 있어요.");
}
}//main
}
4. For문
package ex5_single_for;
public class Ex1_for {
public static void main(String[] args) {
//for문 : 특정 명령을 원하는만큼 반복적으로 처리할 대 사용
/*
for ( 초기식; 조건식; 증감식 ){
조건이 참일때 실행되는 영역
}
*/
int a = 0; //main에서 만든 전역변수 a. 전역변수는 for문, switch문 여러 코드에 모두 사용 가능
for( int i = 0; i < 3; i++) { //for문 안에서 만든 지역변수 i.
System.out.println(i);
}//for 1
//증감식을 for 문 안으로 의도적으로 배치하는 경우도 있다
for( int i = 0; i < 3; ) {
i++;
System.out.println(i);
}//for
for( int i = 0; i < 3; i++) {
i = 10; //for 문 영역 밖의 값을 for문 안에 사용가능하다
System.out.println(i);
int k = 100; //지역변수 K는 현재 for문을 벗어나면 사용할 수 없다
}//for
//i = 10; //for문 안에서 만든 지역변수는 for문 밖에서 사용 불가
for( a = 0; a < 3; a++) { //main에 선언한 변수(전역변수)는 for문에서 끌어와 사용 가능하다
a = 10; //for 문 영역 밖의 값을 for문 안에 사용가능하다
System.out.println(a);
}
for( ; a < 3; a++) { //전역변수를 가져와 사용할때, 초기식을 뺄수도 있다. 영원히 반복하는 것을 만들고 싶을때 조건식도 뺄 수 있는데(비추)
a = 10; //for 문 영역 밖의 값을 for문 안에 사용가능하다
System.out.println(a);
}
System.out.println("-----------------------------------------");
//지역변수끼리는 변수명이 같아도 상관 없다
for (int j = 0; j < 3; j++) {
System.out.println(j);
}
for (int j = 0; j < 3; j++) {
System.out.println(j);
}
System.out.println("-----------------------------------------");
//10 ~ 1감소되는 값을 순차적으로 출력하시오
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
}//main
}
예제) for문
package ex5_single_for;
public class Ex2_for {
public static void main(String[] args) {
//1~100까지 반복하는 for문에서 5의 배수만 화면에 출력
for(int i = 0; i <= 100; i++) {
if (i!= 0 && i % 5 == 0) {
System.out.println(i);
}
}
System.out.println("-----------------------------------");
for(int i = 0; i <= 100; i+=5)
System.out.println(i);
System.out.println("-----------------------------------");
for(int i = 0; i <=95; ) {
i += 5;
System.out.println(i);
}
System.out.println("-----------------------------------");
}//main
}
package ex5_single_for;
public class Ex3_for {
public static void main(String[] args) {
//1부터 10까지의 숫자중에서 홀수의 합을 계산하여 출력
//결과 : 25
int sum = 0;
for(int i = 1; i <= 10; i += 2) {
sum += i;
}
System.out.println(sum);
System.out.println("-----------------------------------");
sum = 0;
for (int i = 1; i <= 10; i++) {
if(i % 2 == 1) {
sum += i;
}
}
System.out.println(sum);
}//main
}
package ex5_single_for;
import java.util.Scanner;
public class Ex4_for {
public static void main(String[] args) {
//은행 이자가 하루에 1원씩 추가된다
//원금(money)과 예치일수(day)를 키보드에서 입력받고
//예치일수가 끝나면 나의 원금이 얼마가 되었는지를 출력
// 5일후의 잔액은 1005원 입니다.
System.out.println("원금을 쓰세요.");
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
System.out.println("예치일수를 쓰세요.");
int day = sc.nextInt();
for (int i = 0; i < day; i++) {
money = money ++; //+1을 쓰는거보다 ++이 처리속도가 더 빠름
}
//System.out.println(money);
System.out.printf("%d일 이후의 잔액은 %d입니다.", day, money);
}//main
}
package ex5_single_for;
import java.util.Scanner;
public class Ex5_for {
public static void main(String[] args) {
//키보드에 정수를 받고 입력받은 숫자에 해당되는 구구단을 출력
//단, 2~9사이의 값을 입력받지 않았다면
//'2~9사이의 값만 입력해주세요'를 출력
//단 : 5
//5 X 1 = 5
//5 X 2 = 10
// ...
//5 X 9 = 45
Scanner sc = new Scanner(System.in);
System.out.println("구구단을 보고 싶은 단을 입력하세요.");
int num = sc.nextInt();
for (int i = 0 ; i <= 9; i++) {
System.out.printf("%d X %d = %d\n", num, i, num * i);
}
System.out.println("--------------------------------------");
int dan = sc. nextInt();
if(dan <= 1 || dan >10) {
System.out.println("2~9사이 값만 입력하세요");
} else {
for(int i = 1; i <= 9; i ++) {
System.out.printf("%d X %d = %d\n", dan, i, dan * i);
}
}
}//main
}
package ex5_single_for;
import java.util.Scanner;
public class Ex6_for_work {
public static void main(String[] args) {
//키보드에서 정수를 입력받는다
//1부터 입력받은 정수까지의 합을 계산하여 출력
//예를 들어 5를 입력 받았다면 1 ~ 5까지의 합인 15를 출력
//정수 : 5
//결과 : 15
System.out.println("정수하나를 입력하세요");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int sum = 0;
for (int i = 1; i <= num; i++) {
sum += i;
}
System.out.println(sum);
}//main
}
package ex5_single_for;
import java.util.Scanner;
public class Ex7_for_work {
public static void main(String[] args) {
//키보드에서 정수 n1, n2를 입력받는다
//n1부터 n2까지의 합을 계산하여 결과를 출력
//예를 들어 2와 5를 입력받았다면 2~5사이의 숫자들의 합인 14가 출력
//n1, n2 중 누가 큰지는 모른다
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 정수를 입력하세요");
int n1 = sc.nextInt();
System.out.println("두번째 정수를 입력하세요");
int n2 = sc.nextInt();
int sum = 0;
//swap : 변수 두개가 가진 값을 교환하는 방법
//두 수중에 누가 큰지 모를때 아래 코드를 통해 n1이 n2보다 반드시 작아짐
if ( n1 > n2 ) {
int n3 = n1;
n1 = n2;
n2 = n3;
}
//아래처럼 for문을 두개 써도 괜찮지만 swap을 쓰는게 좋음
//swap을 쓰면 for문을 하나만 사용해도 됨
if (n1 < n2) {
for(int i = n1; i <= n2; i++) {
sum += i;
}
} else {
for(int i = n2; i <= n1; i++) {
sum += i;
}
}
System.out.println("입력한 두 정수 사이의 합 : " + sum);
}//main
}
'develop > JAVA' 카테고리의 다른 글
JAVA study 05 (0) | 2024.03.05 |
---|---|
JAVA study 04 (0) | 2024.03.05 |
JAVA study 02 (0) | 2024.03.05 |
JAVA study 01 (4) | 2024.03.05 |
Prologue (0) | 2024.03.05 |