-
※문제. 프로그램 실행시 String 형태의 문자열을 스페이스 없이 main argument로 받아 들인다. 입력 받은 String 문자를 String 클래스의 메소드를 이용하여, char[]에 담고 for 루프문을 이용하여 값들을 거꾸로 출력 한다. 단, 모두 대문자로 만들어 출력 한다. 메소드를 사용하지 말고 직접 구현하여 처리한다.
입력 예) JavaProgramming
출력 예) GNIMMARGORPAVAJ더보기1234567891011121314151617181920public class CharTest {public static void main(String[] args) {String arg = args[0];char[] chArr = new char[arg.length()];for(int i = 0; i < chArr.length; i++) {if(arg.charAt(i)>='a' && arg.charAt(i)<='z') {chArr[i] = (char)(arg.charAt(i)-32);}elsechArr[i] = arg.charAt(i);}for(int j = chArr.length - 1; j >= 0; j--) {System.out.print(chArr[j]);}}cs chArr[]에 String arg를 쪼개서 하나하나 넣는 for문이랑 거꾸로 출력하는 for문을 각각 만들었다.
toCharArray 쓰면 되는데... for문이 익숙해서 그런가 자꾸 for문으로 해결하고 끝내려고 한다.
12345678910111213public static void main(String[] args) {String arg = args[0];char[] arr = arg.toCharArray();String reverse = "";for(int i = arr.length - 1; i >= 0; i--) {if(arr[i]>='a' && arr[i]<='z')arr[i] -= (char)32;reverse += arr[i];}System.out.println(reverse);}cs toCharArray 메소드를 사용하면 이렇게 더 깔끔한 코드를 만날 수 있다.
toUpperCase쓰면 더더 깔끔하지만 문제가 메소드 사용 안하고 대문자 만들기였으니까...!
123456789String arg = args[0];char[] arr = arg.toCharArray();String reverse = "";for(int i = arr.length - 1; i >= 0; i--) {reverse += arr[i];}System.out.println(reverse.toUpperCase());}cs toUpperCase까지 쓰면 이렇게!
더보기12345678910public static void main(String[] args) {String str = args[0];StringBuilder sb = new StringBuilder(str);sb.reverse();String result = sb.toString().toUpperCase();System.out.println(result);}cs StringBuilder 클래스에는 reverse메소드가 있어서 문자열을 바로 뒤집어 줄 수 있다고 한다.
주의해야 할게 String을 StringBuilder타입으로 변환했으니까 이를 다시 String으로 변환하고 toUpperCase메소드를 사용해줘야 한다.
※문제. 10개의 정수 값(51~100 사이 난수)을 기록할 수 있는 기본 자료형 배열을 선언한다. Sequential sort(또는 selection sort) 알고리즘을 사용하여 내림차순 정렬 처리한 결과를 출력한다
before: [93, 59, 59, 82, 62, 77, 83, 91, 83, 92]
after: [93, 92, 91, 83, 83, 82, 77, 62, 59, 59]더보기123456789101112131415161718192021222324252627282930public class TestSort {public static void main(String[] args) {TestSort sort = new TestSort();sort.result();}public void result() {Random rnd = new Random();TestSort t = new TestSort();int[] arr = new int[10];for(int i = 0; i < arr.length; i++) {arr[i] = rnd.nextInt(10)+51;}System.out.println("before : " + Arrays.toString(arr));for(int i = 0; i < arr.length - 1; i++) {for(int j = i + 1; j < arr.length; j++) {if(arr[i] < arr[j]) {int blank;blank = arr[i];arr[i] = arr[j];arr[j] = blank;}}}System.out.println("after : " + Arrays.toString(arr));}cs 알고리즘 문제는 집중해서 풀지 않으면 순식간에 내가 모르는 코드로 넘어가기 때문에 정신차리고 풀어야 한다.
난수 생성은 Math.random()으로 풀거나 java.util.Random으로 풀거나 둘 중 하나.
123for(int i=0; i<numArr.length; i++){numArr[i] = (int)(Math.random()*50)+51;}cs Math.random()을 이용하는 방법은 위와 같다.
0.0이상 1.0미만 실수를 리턴하기 때문에 50을 곱하고 int형변환을 해서 0이상 50미만으로 만들고, 거기에 51을 더해 51이상 101미만의 정수를 리턴하도록 만든다.
※문제. 학생 3명의 3 과목의 성적을 기록할 수 있는 기본 자료형 2차원 배열을 선언한다. 각 행의 3열에는 과목의 총점을 기록하고, 각 행의 4열에는 과목의 평균을 기록한다.
index 과목1 과목2 과목3 총점 평균
0 75.5 75.5 75.5 226.5 75.5
1 83.5 76.5 80.0 240.0 80.0
2 79.9 80.1 77.6 237.6 79.2더보기12345678910111213141516171819202122232425262728293031public void result() {Scanner sc = new Scanner(System.in);double[][] arr = new double[3][5];for(int i = 0; i < arr.length; i++) {double sum = 0;for(int j = 0; j < arr[i].length; j++) {if(j < arr[i].length - 2) {System.out.print(i + "의 과목 " + (j+1) + "의 점수 입력 > ");arr[i][j] = sc.nextDouble();sum += arr[i][j];}else if(j == arr[i].length -2){arr[i][j] = sum;}else {arr[i][j] = (int)((sum/3)*10)/10.0;}}}System.out.println("index\t과목1\t과목2\t과목3\t총점\t평균");for(int i = 0; i < arr.length; i++) {System.out.print(i +"\t");for(int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] +"\t");}System.out.println();}}cs 이중 for문 안에 if문을 넣어서 3열과 4열일 때는 합계와 평균을 해당 인덱스에 넣도록 했다.
더보기1234567891011121314151617181920212223242526272829public void result2() {Scanner sc = new Scanner(System.in);double[][] arr = new double[3][5];String result = "";for(int i = 0; i < arr.length; i++) {for(int j = 0; j < arr[i].length; j++) {switch(j) {case 0 :case 1 :case 2 :System.out.println("과목" + (j+1) +" 점수 > ");arr[i][j] = sc.nextDouble();break;case 3 :arr[i][j] = arr[i][0] + arr[i][1] + arr[i][2];break;case 4 :arr[i][j] = arr[i][3] /3;String formatstr = String.format("%d %10.1f %10.1f %10.1f %10.1f %10.1f%n",i, arr[i][0], arr[i][1], arr[i][2], arr[i][3], arr[i][4]);result += formatstr;break;}}}System.out.printf("%s %10s %10s %10s %10s %10s%n","index","과목1","과목2","과목3","총점","평균");System.out.println("-------------------------------------------------------------------------");System.out.println(result);}cs 필기 문제에서도 넘어졌던 break 없는 switch문
break를 활용할 수 있느냐 없느냐에 따라 switch문의 활용도가 확 달라지는 것 같다.
String.format은 printf와 동일한 역할을 하는데, 바로 출력을 하느냐 하지 않느냐의 차이가 있다.
'혼자 있는 방 > Java' 카테고리의 다른 글
Homework(12) (0) 2021.07.13 Homework(11) (0) 2021.07.08 필기_Test(2) (0) 2021.07.05 Homework(10) (0) 2021.07.02 Homework(9) (0) 2021.07.01 댓글