문제1.
자바 프로그래밍 과목을 수강하는 학생들의 시험점수들을 읽어 들여서
통과 점수(60점 이상)를 받은 학생들의 수와
낙제 점수(60점 미만)을 받은 학생들의 수를 계산하여 출력하는 프로그램을 작성하라.
수강 학생들의 수는 1 이상이라고 가정한다.
| 출력예시 |
| 첫번째 점수(종료하려면 음수)를 입력하세요: 98 다음 점수(종료하려면 음수)를 입력하세요: 54 다음 점수(종료하려면 음수)를 입력하세요: 76 다음 점수(종료하려면 음수)를 입력하세요: 48 다음 점수(종료하려면 음수)를 입력하세요: 82 다음 점수(종료하려면 음수)를 입력하세요: 59 다음 점수(종료하려면 음수)를 입력하세요: 67 다음 점수(종료하려면 음수)를 입력하세요: 61 다음 점수(종료하려면 음수)를 입력하세요: 34 다음 점수(종료하려면 음수)를 입력하세요: 93 다음 점수(종료하려면 음수)를 입력하세요: -5 학생들의 수 : 10 통과 학생들의 수 : 6 낙제 학생들의 수 : 4 |
해당 코드는 다음과 같습니다.
package java1208;
import java.util.Scanner;
public class whiletest {
public static void main(String[] args) {
int grade;
int numStudents = 0;
int numPass = 0;
int numFail = 0;
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 점수(종료하려면 음수)를 입력하세요: ");
grade = sc.nextInt();
while (grade >= 0) {
// 학생들의 수를 1만큼 증가시킨다.
numStudents++;
if (grade >= 60) {
numPass++;
System.out.print("다음 점수(종료하려면 음수)를 입력하세요: ");
grade = sc.nextInt();
}else {
numFail++;
System.out.print("다음 점수(종료하려면 음수)를 입력하세요: ");
grade = sc.nextInt();
}
}
System.out.println();
System.out.println("학생들의 수 : " + numStudents);
System.out.println("통과 학생들의 수 : " + numPass);
System.out.println("낙제 학생들의 수 : " + numFail);
sc.close();
}
}
문제2.
한 대학생이 이번 학기에 수강하는 과목들은 영작문, 프로그래밍, 이산 수학과 컴퓨터 구조이다.
각 과목의 성적 평가 요소는 출석, 과제, 수시 시험, 중간시험과 기말시험이다.
각 평가 요소의 반영률은 출석 10%, 과제 40%, 수시시험 10%, 중간시험 20%, 기말시험 20% 이다.
과목들의 학점은 다음 기준에 의해 주어진다.
| 총점 | 학점 | 평점 |
| 100~90 | A | 4.0 |
| 89~80 | B | 3.0 |
| 79~70 | C | 2.0 |
| 69~60 | D | 1.0 |
| 59~0 | F | 0.0 |
각 과목에 대해 과목평가 요소들의 점수들을 입력 받아 총점을 계산하고 학점을 부여한 다음에
평점(학점 평균)을 계산하는 프로그램을 작성하라.
해당 코드는 다음과 같습니다.
package java1208;
import java.util.Scanner;
public class while3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String courseName, keepGo;
double attend, report, optima, middle, last, gradeNum, avg;
double gradeNumavg = 0; // 과목들의 총점을 초기화시켜줍니다.
char grade;
int count = 0; // 과목의 시작값을 초기화시켜줍니다.
do {
count++; // while 문이 시작됨에 따라 과목의 갯수를 추가해줍니다.
System.out.print("과목의 이름을 입력하세요 : \t\t");
courseName = sc.next();
System.out.print("출석 점수를 입력하세요: \t\t");
attend = sc.nextDouble();
attend = attend * 0.1;
System.out.print("과제점수를 입력하세요: \t\t");
report = sc.nextDouble();
report = report * 0.4;
System.out.print("수시시험 점수를 입력하세요: \t\t");
optima = sc.nextDouble();
optima = optima * 0.1;
System.out.print("중간시험 점수를 입력하세요: \t\t");
middle = sc.nextDouble();
middle = middle * 0.2;
System.out.print("기말시험 점수를 입력하세요 : \t\t");
last = sc.nextDouble();
last = last * 0.2;
avg = attend + report + optima + middle + last;
// 받을때부터 대입된 개별항목을 토대로 총점을 계산합니다.
if( avg >= 90) { grade = 'A'; gradeNum = 4.0;}
// 총점을 이용하여 학점과 평점을 저장합니다.
else if( avg >= 80) { grade = 'B'; gradeNum = 3.0;}
else if( avg >= 70) { grade = 'C'; gradeNum = 2.0;}
else if( avg >= 60) { grade = 'D'; gradeNum = 1.0;}
else { grade = 'F'; gradeNum = 0.0;}
System.out.println("과목 " + courseName + "의 총점: \t\t" + avg);
System.out.println("과목 " + courseName + "의 학점: \t\t" + grade);
gradeNumavg = gradeNumavg + gradeNum;
// 과목들의 총점을 계속 합산하며 저장해줍니다.
System.out.print("계속하기를 원하세요? 그렇다면 y를 아니면 n을 입력하세요: ");
keepGo = sc.next();
}while( keepGo.equals("y"));
// 문자열을 입력받아 y와 같을때 까지 리턴합니다.
gradeNumavg = gradeNumavg / count;
// while 문이 끝난 이후 합산된 총점을 과목수 count만큼 나눠줍니다.
System.out.println("평점 : \t\t" + gradeNumavg);
sc.close();
}
}
문제3.
주어진 문장 내에 있는 글자들의 수를 출력하는 프로그램을 설계한 후 작성하라.
입력 받은 문장 내에서 마침표(.), 물음표(?), 쉼표(,)와 느낌표(!) 와 같은 구두점은 없다고 가정한다.
문장 내에 있는 글자들의 수에 빈칸, 빈줄, 탭(tab)과 같은 흰색 공간문자는 포함되지 않는다.
| 출력 예시 |
| 한줄의 문장을 입력하세요: 나는 가을을 좋아합니다. 글자들의 수 = 10 |
해당 코드는 다음과 같습니다.
새로 사용된 코드는 .length()와 .charAt()이 있습니다.
package java1208;
import java.util.Scanner;
public class java12081 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("한줄의 문장을 입력하세요: ");
String str = sc.nextLine();
int count = 0;
for (int i=0; i<str.length(); i++ ) {
if(str.charAt(i) != ' ' && str.charAt(i) != '\n' && str.charAt(i) !='\t' && str.charAt(i) != '\0' && str.charAt(i) != ',' && str.charAt(i) != '!' && str.charAt(i) != '.') {
count++;
}
sc.close();
}
System.out.println( count + "개 입니다.");
}
}
한줄평 - 조금더 깔끔하게 하고싶다!
문제 4.
인터넷 뱅킹을 위한 암호를 처리하는 자바 프로그램을 설계하고 작성하라.
사용자로부터 암호를 입력 받아야한다.
맞는 암호가 입력되면 "환영합니다" 라는 메시지를 출력하고 프로그램을 종료해야한다.
틀린 암호가 입력되면 "암호가 틀립니다"라는 메시지를 출력해야한다.
그리고 다시 암호를 입력받아야한다.
사용자가 암호를 세 번 잘못 입력하면 "접속을 거부합니다" 라는 메시지를 출력하고 프로그램을 종료 해야한다.
맞는 암호는 "codehows" 이다.
해당 코드는 다음과 같습니다
package java1208;
import java.util.Scanner;
public class java12082 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String password;
int tryCount = 0;
while( tryCount < 3) {
//while 문을 이용하여 tryCount가 3회미만일때까지 사용합니다.
System.out.print("비밀번호를 입력 해주세요 : \t\t");
password = sc.next();
// 비밀번호를 입력받습니다.
if( password.equals("codehows")) {
System.out.println("환영합니다.");
break;
//입력받은 비밀번호를 equals를 이용하여 비교한후
//상응할경우 "환영합니다"를 출력하고 break로 조건문을 탈출합니다.
}
else {
System.out.println("암호가 틀립니다.");
tryCount++;
//비밀번호가 상응하지 않을 경우, "암호가 틀립니다"를 출력하고
//tryCount를 한번 더한후 리턴합니다.
}
if( tryCount == 3) {
System.out.print("접속을 거부합니다.");
//비밀번호 3회 기입실패로 인해 tryCount가 3회가 됬을경우
//"접속을 거부합니다"를 출력합니다.
}
}sc.close();
}
}
어렵다! 더 많은 유형을 보고 배워야될듯!
문제5.
1부터 10까지의 정수 i에 대해 sum = 1 + 2 +.... + i를 계산하여
아래와 같이 두 칸에 출력하는 프로그램을 설계 하고 작성하라.
예를 들면 다음은 1부터 5까지의 값들에 대한 출력 결과이다.
| 출력예시 | |
| 값 | 합 |
| 1 2 3 4 5 |
1 3 6 10 15 |
해당 코드는 다음과 같습니다.
package java1208;
import java.util.Scanner;
public class java12083 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum=0;
System.out.println("값\t" + "합");
System.out.println();
for(int i=1; i<=10; i++) {
sum += i;
System.out.println(i + "\t" + sum);
}
}
}
for문을 연습을 더 해야할거같다. 이미지화가 아직 잘 안된다...
문제6.
한 대학교 앞에 할인 마트가 있다. 이 가게의 모든 상품의 가격은 500원 이하이다.
고객이 가게에서 물건 한 개를 사고 500원을 낼 때 거스름돈을 계산하는 프로그램을 설계하고 작성하라.
거스름 돈은 반드시 100원, 10원, 1원 짜리 동전으로 주어야 한다.
또한 동전의 개수를 최소화 해야 한다.
다음과 같은 포맷을 사용하라.
| 출력예시 |
| 구매 금액을 입력하세요 [0-500]: 122 378원의 거스름돈은 다음과 같다. 100원짜리 동전 3개 10원짜리 동전 7개 1원짜리 동전 8개 |
해당 코드는 이렇게 다음과 같다.
package java1208;
import java.util.Scanner;
public class java12084 {
public static void main(String[] args) {
int price, charge, backWon, sheepWon, illWon, temp;
Scanner sc = new Scanner(System.in);
System.out.print("구매 금액을 입력하세요 [0~500]: ");
price = sc.nextInt();
charge = 500 - price;
System.out.println("거스름돈 "+ charge + "원은 다음과 같다.");
backWon = (charge/100); // backWon에 charge를 100으로 나눈 값을 저장
temp = charge%100;
// temp에 charge에서 100을 나눈 나머지값을 저장
sheepWon = (temp/10); // sheepWon에 temp를 10으로 나눈 값을 저장
temp = temp%10;
// temp에는 다시 temp를 10으로 나눈 나머지 값을 저장
illWon = temp;
// 가장 마지막에 남은 illWon은 temp와 같다.
System.out.println("100원짜리 동전\t"+ backWon + "개");
System.out.println("10원짜리 동전\t"+ sheepWon + "개");
System.out.println("1원짜리 동전\t"+ illWon + "개");
}
}
temp 라는 가상의 변수를 선언해서 남은 값을 저장하고 그 값을 통해 하위 계산을 이어나가자!!
문제7.
5. 사용자로부터 한 문자열을 읽어 들인 후
그 문자열 안에 있는 각 모음(a, e, i, o, u)의 수와 자음들의 수를 알아 내어 출력하는 프로그램을 설계하고 작성하라.
각 모음에 대한 별도의 계수기를 사용해라.
예를 들면 읽어 들인 문자열이 "I love Java programming very much"라면
모음 a의 수는 3,
모음 e의 수는 2,
모음 i의 수는 2,
모음 o의 수는 2,
모음 u의 수는 1이고
자음들의 수는 18이다.
다음은 뇌피셜 코드다.
package java1208;
import java.util.Scanner;
public class java12085 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int aCount = 0;
int eCount = 0;
int iCount = 0;
int oCount = 0;
int uCount = 0;
int moUm = 0;
int jaUm = 0;
System.out.print("영어 문장을 입력 하십시오: ");
String str = sc.nextLine();
str = str.toLowerCase();
for(int i=0; i<str.length(); i++) {
if( str.charAt(i) != ' ' && str.charAt(i) != '\t' && str.charAt(i) != '\'' && str.charAt(i) != '\"') {
if(str.charAt(i) == 'a'|| str.charAt(i) == 'e' || str.charAt(i) == 'i' || str.charAt(i) == 'o' || str.charAt(i) == 'u'){
if( str.charAt(i) == 'a') {
aCount++;
moUm++;
}
if(str.charAt(i) == 'e') {
eCount++;
moUm++;
}
if(str.charAt(i) == 'i') {
iCount++;
moUm++;
}
if(str.charAt(i) == 'o') {
oCount++;
moUm++;
}
if(str.charAt(i) == 'u') {
uCount++;
moUm++;
}
}else {
jaUm++;// 이미 공백란은 필터링이 됬기때문에 남은 글자들을 세어서 ++ 한후 저장...?
}
}
}
System.out.println("모음 a의 수는 " + aCount);
System.out.println("모음 e의 수는 " + eCount);
System.out.println("모음 i의 수는 " + iCount);
System.out.println("모음 o의 수는 " + oCount);
System.out.println("모음 u의 수는 " + uCount);
System.out.println("자음들의 수는 " + jaUm);
sc.close();
}
}
점점 길어지는구만..
문제8.
택시 운전사가 10명의 손님을 태우면 그 날 영업을 중단하고 집에 가서 쉰다고 하자.
이경우에 그 날의 수입을 계산하여 출력하는 프로그램을 설계하고 작성하라.
각 손님이 낸 요금을 읽어 들인다.
수입은 10명의 손님들의 요금들의 합이다.
해당 코드는 다음과 같습니다.
package java2022;
import java.util.Scanner;
public class java1209 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int payMent = 0;
int paySum = 0;
for (int i=1; i <= 10; i++) {
System.out.print("요금을 입력하세요 : ");
payMent = sc.nextInt();
paySum += payMent;
}
System.out.println();
System.out.println("총 수입은 : " + paySum);
sc.close();
}
}
출력결과는 다음과 같습니다.
| 요금을 입력하세요 : 10000 요금을 입력하세요 : 10000 요금을 입력하세요 : 2000 요금을 입력하세요 : 10000 요금을 입력하세요 : 30000 요금을 입력하세요 : 10000 요금을 입력하세요 : 100001 요금을 입력하세요 : 20000 요금을 입력하세요 : 5000 요금을 입력하세요 : 5000 총 수입은 : 202001 |
이런건 조금 간단할지도!
문제9.
택시 운전사가 '워드'라는 손님을 태우고 목적지까지 데려다 주고 요금을 받으면 그 날 영업을 중단하고 집에 쉰다고 하자.
이 경우에 그 날의 수입을 계산하여 출력하는 프로그램을 설계하고 작성하라.
각 손님의 이름과 요금을 읽어 들여야 한다.
수입은 모든 손님들이 낸 요금들의 합이다.
프로그램을 작성하기에 앞서 설계를 하라.
다음은 프로그램의 모범 출력이다.
손님의 이름을 입력하세요: 만수
요금을 입력하세요: 5000
손님의 이름을 입력하세요: 신자
요금을 입력하세요: 8000
손님의 이름을 입력하세요: 워드
요금을 입력하세요: 10000
총 수입은 23000이다.
해당 문제를 바탕으로 구성한 코드는 이렇습니다.
package java2022;
import java.util.Scanner;
public class java1209 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int payMent = 0;
int paySum = 0;
String passenger = "a";
System.out.print("손님의 이름을 입력하세요: ");
passenger = sc.nextLine();
System.out.print("요금을 입력하세요: ");
payMent = sc.nextInt();
paySum += payMent;
while(!passenger.equals("워드")) {
System.out.print("손님의 이름을 입력하세요: ");
passenger = sc.next();
System.out.print("요금을 입력하세요: ");
payMent = sc.nextInt();
paySum += payMent;
}
System.out.println("총 수입은 " + paySum + "입니다.");
sc.close();
}
}
진짜 시간소비를 많이했다.. 이것도 간신히한듯 ㅠㅠ
nextLine으로 스캐너를 받으니 while 문 가운데서 print부가 두개가 동시 출력이된다...왜지...?
문제10.
사용자와 숫자 맞추기 게임을 하는 프로그램을 설계하고 작성하라.
프로그램은 1부터 10사이의 숫자를 임의로 만들어 낸다.
그 다음에 사용자에게 만들어진 숫자를 추측하도록 요청한다.
사용자가 추측한 숫자가 틀렸다면 추측한 숫자가 너무 큰지 혹은 너무 작은지를 알려 준다.
그 다음에 사용자에게 숫자를 맞출 때까지 만들어진 숫자를 추측하도록 요청한다.
사용자가 추측한 숫자가 맞다면 '맞추셨습니다'라는 축하 메시지를 출력해야 한다.
프로그램을 작성하기에 앞서 설계를 하라.
다음은 프로그램의 모범 출력이다.
추측한 숫자를 입력하세요: 5
추측한 숫자가 틀렸습니다.
추측한 숫자가 너무 작습니다.
추측한 숫자를 입력하세요: 8
추측한 숫자가 틀렸습니다.
추측한 숫자가 너무 작습니다.
추측한 숫자를 입력하세요: 10
맞추셨습니다.
-- 랜덤객체를 생성하기 위한 방법
- import java.util.Random; // import
- Random generator = new Random(); // 랜덤 객체 생성
- generator.nextInt(10) + 1; // 랜덤 수 생성 : + 1 : 0부터 시작이라 1부터 시작으로 바꾸기 위해 + 1
package java1209;
import java.util.Random;
import java.util.Scanner;
public class java1209 {
public static void main(String[] args) {
Random random = new Random(); //random 객체를 생성해줌
Scanner sc = new Scanner(System.in);
int suppos;
int random1 = random.nextInt(10)+1;
//생성된 random 객체를 random1 변수명에 저장함
System.out.print("추측한 숫자를 입력하세요: ");
suppos = sc.nextInt();
while(suppos != random1) {
if(random1 > suppos) {
System.out.println("추측한 숫자가 너무 작습니다.");
System.out.print("추측한 숫자를 입력하세요: ");
suppos = sc.nextInt();
}
else {
System.out.println("추측한 숫자가 너무 큽니다.");
System.out.print("추측한 숫자를 입력하세요: ");
suppos = sc.nextInt();
}
}
System.out.println("맞추셨습니다.");
sc.close();
}
}
Random random = new Random(); 은 Scanner sc = new Scanner(System.in);
처럼 이해하도록하자. random은 실제 문장에서 사용되는 것이 아니라 추후에 지정될 사용되는
다른 random변수명에 random.nextInt(10); 의 형태로 입력될때 사용하자.
문제11.
숫자 맞추기 게임을 하는 프로그램을 설계하고 작성하라.
그 프로그램은 1과 100 사이의 임의의 정수를 선택해야 한다.
1과 100도 선택될 수 있다.
그 다음에 사용자에게 선택된 숫자를 맞춰보라고 요청한다.
사용자가 추축한 숫자에 대해 맞는지 아니면 추측한 숫자가 큰지 혹은 작은지를 알려 주어야 한다.
사용자가 정확하게 맞추거나 맞추기를 그만둘 때까지 숫자 맞추기를 계속하게 하라.
사용자가 그만 두기를 원하는지를 결정하기 위해 감시 값을 사용하라.
맞출 때까지 추측한 횟수를 세고 사용자가 맞추고 난 후 그 횟수를 출력하라.
각 게임이 끝난 후에 사용자가 맞추기 게임을 계속하기를 원하는지를 물어보라.
사용자가 게임을 종료하기를 원할 때까지 게임을 계속하게 하라.
package java1209;
import java.util.Random;
import java.util.Scanner;
public class java1209_1 {
public static void main(String[] args) {
Random random = new Random();
Scanner sc = new Scanner(System.in);
int rand1 = random.nextInt(100)+1;
int suppos;
int count = 0;
String oppin;
System.out.print("맞출 숫자를 입력하세요: ");
suppos = sc.nextInt();
count++;
do {
if(suppos > rand1) {
System.out.println("입력된 숫자가 너무 큽니다");
count++;
System.out.print("계속 진행하시겠습니까?[y or n]으로 입력: ");
oppin = sc.next();
if(oppin.equals("y")) {
System.out.print("맞출 숫자를 입력하세요: ");
suppos = sc.nextInt();
}
else {
System.out.println("숫자 맞추기를 종료합니다.");
}
}
else {
System.out.println("입력된 숫자가 너무 작습니다.");
count++;
System.out.print("계속 진행하시겠습니까?[y or n]으로 입력: ");
oppin = sc.next();
if(oppin.equals("y")) {
System.out.print("맞출 숫자를 입력하세요: ");
suppos = sc.nextInt();
}
}
}while(suppos != rand1 && oppin.equals("y"));
System.out.println(count + "회 만에 맞추셨습니다.");
System.out.println("숫자 맞추기를 종료합니다.");
}
}
string 형으로 문자를 받아서 equals로 비교할때는 잊지말고 " " 사용,,!
연습을 하자!!!
'JAVA > 연습장!' 카테고리의 다른 글
| 클래스 , class 연습문제! (0) | 2022.12.13 |
|---|---|
| 메소드, 연습 - java (0) | 2022.12.12 |
| Array, 배열 문제 (0) | 2022.12.09 |
| while문, if, for문 연습장 (0) | 2022.12.09 |
| 조건문 - 연습문제 (0) | 2022.12.07 |