반응형

 

package com.test.oop;

//여기서 class AA 안에 있는 것은 다른 class 에 영향을 줄 수 없음. 캡슐 안에 들어있어. 캡슐화.

class AA {
    int a = 1;
    int b = 2;

    void aa(){ //return 할 데이터가 없을 때 void 쓰고 바로 method 작성.
        System.out.println("a = " + a + " / b = " +b);
    }
}

class BB {
    private int a = 3; //이름이 같아도 다른 class 이기 때문에 괜찮음. 
    int b = 4;
    static final int q = 100; //final 을 붙이면 기존 멤버변수가 상수가 됨.
    void bb(){
        System.out.println("a = " + a +  " / b = " + b);
    }

    public int getA(){ //이렇게 해서 private 인 a를 가져올 수 있음. return 되는 타입을 메소드인 getA() 앞에 적어둬야 함. void 는 return 되는 것이 없어서 안적은 것.
        return this.a; 
    }

    public void setA(int a){
        this.a = a;  //this.a는 클래스 내의 인스턴스 변수 a를 가르킴.
    }
}

class CC{
    static int c = 33; //class AA 와는 달리, static 을 앞에 붙이니, 여러개의 인스턴스를 생성시키더라도 static type 으로 선정된 멤버 변수는 여러 인스턴스에서도 동일한 메모리 공간을 차지함.
    int d = 60; 
    final int k = 4; //상수. 고정된 값으로 다른 데에서 k 를 5처럼 다른 값으로 바꿀 수 없음.
    void cc(){
        System.out.println("C = "+c + d);
        
    }
}

class DD{
    static int d = 88;
    static void dd(){ //static 을 method 인 void 앞에 적어주면, 이 method 에 사용되는 변수도 static 이 붙어야 함. 왜냐면 static 이 먼저 JVM 이 읽기 때문. 그럼 static 으로 안붙은 int 는 안올라가니까 그 static method 가 안돼.
        System.out.println("d = "+d);
    }    
}

public class Exam01 { //여러개의 class 가 있을 때, 파일명의 class 앞에 public 이 붙어야 함.
    public static void main(String[] args){ //main 앞에 static 이 붙어야 하는 이유 > JVM 이 읽기 시작할 때, static 이 붙은 method 들이 main method 와 같이 가장 먼저 올라옴.
        //static 이 붙으면 중요한 애니까 main method 와 같이 함께 메모리에 주소가 다 고정됨.

        
        AA aa1 = new AA(); //인스턴스화 : 클래스 AA 를 실제 실행에서 작동될 수 있도록 하는 것. AA 클래스를 aa1 이라는 인스턴스로 만들라고 시키는구나. 만들어야 겠네?!
        //프로세스가 작동을 할 떄, aa1이라는 인스턴스를 만들어야 겠구나, + AA() 는 AA 클레스의 형태를 가져와서 어떠한 메모리 공간에 aa1 이란 이름을 가진 인스턴스 객체를 생성시킴.

        AA aa2 = new AA(); //같은 클래스에서 왔지만, aa1과 전혀 다른 메모리 공간을 가짐. aa1과 관여 없음. 별도로 작동.

        //이렇게 하는 이유가 뭐야? 협업을 위해. 코드 중복 최소화를 위해. 공동모드. 예를 들어 쇼핑몰 만든다고 할 때 같은거 계속 반복해야 하잖아. 코드 중복 엄청나지잖아.

        
        aa1.aa();
        aa1.a = 10;
        aa1.b = 20;
        aa1.aa(); //여기선 a = 10, b = 20

        aa2.aa(); //aa1 과 간섭을 받지 않아서 원래대로, a=1, b=2
       
        BB obj2 = new BB(); //생성자에 의한 초기화 , 여기서 생성자는 BB() 이거임.
        obj2.bb();
        obj2.setA(1001);

        //obj2.a 는 가져올 수 없음. a 는 private 이기 때문. 가져오려면 getA() 같은 메소드를 직접 만들어야 함.

        System.out.println(obj2.getA());


        CC cc1 = new CC();
        CC cc2 = new CC();
        
        
        cc1.cc();
        cc2.cc();

        cc1.c = 44; // c는 cc1 과 cc2 모두에 바뀜. 왜냐하면 static int 이기 때문.
        cc1.d = 50; // d는 cc1 에서만 바뀜 일반 int 이기 때문.
        cc1.cc();
        cc2.cc();

        
        DD.dd(); //지금까지는 꼭 인스턴스 규칙에 의해서 앞에서 인스턴스화를 시켰어야 했음. 그런데 static method 가 생기니까 그냥 적어도 에러가 안남.

        //method 에 static 붙이면 인스턴스 객체를 안만들어도 됨.


    }
}
반응형
반응형

0,4,2,5,1,6,8,9,7, 3 ==> 이런 식으로 무작위의 array 가 있다고 해보자.

 

이걸 0,1,2,3,4,5,6,7,8,9 이렇게 순차적으로 정렬하고 싶을 때,

JAVA 로 정렬하는 코드를 짜보자!

 

사실 Arrays.sort 라는 method 를 사용하면 한 번에 끝남.

하지만 for 문으로 해보기!

 

package com.test.data;
import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args){
        System.out.println("정렬 전");
        int[] nums = {1,7,2,4,3,5,0,9,8,6};
        System.out.println(Arrays.toString(nums)); //Arrays 를 import 해야 함.


        for (int i = nums.length-1; i>0; i--){
            for (int j = 0; j < i; j++){
                if (nums[j] > nums [j+1]){
                    int temp = nums[j];
                    nums[j] = nums [j+1];
                    nums [j+1] = temp;
                } 
            }
        }
        System.out.println("정렬 후\n"+ Arrays.toString(nums));

        // Arrays.sort(nums);
        // System.out.println("정렬 후\n"+Arrays.toString(nums));


    }
}
반응형
반응형

문제 링크 : https://www.acmicpc.net/problem/10952 


문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

출력

 

각 테스트 케이스마다 A+B를 출력한다.

 

 

 

 

 

[JAVA 풀이]

package com.test.exam01;

import java.util.Scanner;

public class bakjoon {
    public static void main(String[] args){
        Scanner input = new Scanner (System.in);
        
        while (true){
            String str = input.nextLine();
            
            String[] arr = str.split(" ");
            int a = Integer.parseInt(arr[0]);
            int b = Integer.parseInt(arr[1]);

            if (a == 0 && b == 0){break;}1 1
            System.out.println(a+b);
            
        }

    }
}
반응형
반응형

JAVA 로 반복문 사용해서 1부터 100까지의 합 구하기!

 

1. for(){} 문

package com.test.exam01;

public class ForExam01 {
    public static void main(String[] args){
        
        ////////////////////////////////////
        int sum = 0;
        for (int i = 1; i<=100; i++){
            sum += i;  // sum = sum + i; 참고로 sum =+ i; 이렇게 쓰지 말자.. sum =+i 이건 sum = +i (양수 i ) 라는 의미.
        }
        System.out.println(sum);

        /*
        참고로 위의 코드는 아래처럼 써도 됨.
        for (int i = 1; i<=100; sum+= i++);
        System.out.println(sum);
         */
        
    }
}

 

 

 

2. while{} 문

 

1) while (조건 써주기)

        int j = 0;
        int newsum = 0;
        while (j<=100){
            newsum += j;
            j++; 
        }
        System.out.println(newsum);

 

 

2) while (true) 이후, while 문 안에 if 와 break로 반복문 끝내기

  • break 만 사용
        int z = 0;
        int newnewnewsum = 0;
        while (true){
            newnewnewsum += z;
            z++;
            if (z > 100){break;}
        }
        System.out.println(newnewnewsum);
  • continue 와 break 모두 사용
        int p = 0;
        int sum2 = 0;
        while (true){
            sum2 += p;
            p++;
            if (p<=100){
                continue;
            } else {
                break;
            }
        }
        System.out.println(sum2);

 

 

3. do {} while() 문 

int k = 0;
int newnewsum = 0;
do{
   newnewsum += k;
   k++;
} while (k <= 100);
System.out.println(newnewsum);
반응형
반응형

인스턴스 변수와 클래스 변수를 확인해봅시다!

아래 코드와 결과로 확인!

 

package com.test.exam01;

public class Sample {
    
    /*
    클래스의 내부에 선언된 변수 --> 인스턴스 변수
    인스턴스 변수의 scope은 이 변수가 선언된 클래스 전체에 미친다.
    단, main method 내에서 영향을 미치기 위해서는 인스턴스 선언이 필요하다.
    인스턴스 변수의 lifetime은 이 객체가 존재할 때까지...
    */
    int x, y; 
    
    /*
    클래스의 내부에 선언된 static 변수 --> static 이 붙으면 클래스 변수!
    클래스 변수의 scope 은 이 변수가 선언된 클래스 전체에 미친다.
     */
    static int result;

    void add1(int a, int b){  //method 선언
        //a, b = parameter 매개변수 --> 지역변수(local variable)
        x = a; //x 는 인스턴스 변수로 이미 선언됨.
        //매개변수 a의 값이 인스턴스 변수 x에 할당된다.
        y = b;
        int sum = x+y; //선언과 동시에 할당. --> 초기화
        result = 88; //class 변수에 88을 할당.
        System.out.println("Result = "+ result);
        System.out.println("Sum = "+ sum);
    }
    
    void gob2(){ //위의 add1 의 a,b 변수는 지역변수였기에, 여기서 써도 됨.
        int a = 3;
        int b = 4;
        System.out.println(a*b);
    }
    
    public static void main(String[] args){
        Sample obj = new Sample(); //sample 은 class 이름. 인스턴스 선언. 이렇게 인스턴스 객체를 만들어줘야 함.
        //참고로 obj. 쳐서 나오는 method와 변수들은 모두 sample 이라는 class 가 가진 method와 변수들.
        obj.add1(10,20);
        System.out.println("X = "+obj.x); //obj.x 로 인스턴스 선언을 해줌.
        System.out.println("Y = "+obj.y);
        
        obj.gob2(); // 12가 나올 것.
        System.out.println("Result = " + result); //class 변수이기에, 선언이 필요 없어서 그냥 result.
        
        result = 77;
        System.out.println("New Result = "+result); 

    }

}

 

 

실행한 결과!

Result = 88
Sum = 30
X = 10
Y = 20
12
Result = 88
New Result = 77

 

 


 

인스턴스 변수와 클래스 변수의 차이점을 표로 정리한 것!

 

+ 참고로 인스턴스 변수와 클래스 변수는 멤버변수에 속한다!

특징 인스턴스 변수 (Instance Variable) 클래스 변수 (Class Variable)
정의 객체별로 생성되는 변수 클래스에 하나만 존재하는 변수
키워드 int x;, String name; static int result;, static String appName;
이렇게 static 이 붙은 변수가 클래스 변수!
메모리 위치 각 객체마다 별도로 메모리가 할당됨 클래스 로딩 시 메모리에 한 번만 할당됨
값의 공유 여부 객체마다 독립적인 값을 가짐 모든 객체가 동일한 값을 공유함 (메모리 같은 공간을 사용하기 때문)
접근 방법 객체를 통해 접근 (obj.x) 클래스 이름을 통해 접근 (Sample.result)
예시 Student name = new Student(); 
name.age = 10;
Sample.result = 100;
생성 시점 객체가 생성될 때 생성됨 클래스가 메모리에 로드될 때 생성됨
수명 객체와 함께 생성되고 사라짐 프로그램이 실행되는 동안 유지됨
일반적인 사용 객체에 따라 다른 상태를 유지할 때 사용 모든 객체가 공통으로 사용하는 값이나 상태를 유지할 때 사용

 

설명

  • 인스턴스 변수:
    • 각 객체가 생성될 때마다 새로운 메모리 공간이 할당됩니다.
    • 예를 들어, Student 객체마다 name과 age가 다를 수 있습니다.
    • 객체마다 다른 값을 가지고, 객체가 사라지면 변수도 사라집니다.
  • 클래스 변수:
    • 클래스가 메모리에 로드될 때 한 번만 생성됩니다.
    • 모든 객체가 이 변수의 동일한 값을 공유합니다.
    • 예를 들어, result는 Sample 클래스의 모든 객체가 같은 값을 가지며, 클래스 전체에 하나만 존재합니다.

 

갑자기 궁금했던 점!

 

인스턴스 변수는 객체가 사라지면 사라진다고 하던데, 그렇다면 코드 내에서 객체를 없앨 수도 있을까?

아래 접은 글 확인

더보기

자바에서는 객체를 직접적으로 "없애는" 코드는 제공하지 않지만, 객체를 더 이상 사용하지 않도록 만드는 방법이 있습니다. 자바는 가비지 컬렉터라는 기능을 사용하여 더 이상 참조되지 않는 객체의 메모리를 자동으로 회수합니다.

객체를 없애는 방법

  1. 객체 참조 해제
    java
    코드 복사
    public class Example { public static void main(String[] args) { Sample obj = new Sample(); // 객체 생성 obj.add(10, 20); // 메서드 호출 obj = null; // 객체 참조 해제 // 이제 가비지 컬렉터가 이 객체를 수거할 수 있게 됩니다. } }
    이 코드에서 obj 변수에 null을 대입하면, 원래 obj가 참조하던 Sample 객체에 대한 참조가 사라집니다. 객체가 더 이상 참조되지 않으므로, 자바의 가비지 컬렉터가 이 객체를 나중에 메모리에서 제거할 수 있게 됩니다.
  2. 객체를 없애는 것은 실제로 그 객체를 메모리에서 직접 삭제하는 것이 아니라, 그 객체를 참조하고 있는 변수를 null로 설정하여 가비지 컬렉터가 그 객체를 수거할 수 있게 만드는 것입니다.
  3. 가비지 컬렉션 강제 호출 (권장하지 않음)
    java
    코드 복사
    public class Example { public static void main(String[] args) { Sample obj = new Sample(); // 객체 생성 obj.add(10, 20); // 메서드 호출 obj = null; // 객체 참조 해제 System.gc(); // 가비지 컬렉션 강제 호출 // 가비지 컬렉터가 `obj` 객체를 수거할 수 있도록 요청합니다. } }
    System.gc()는 가비지 컬렉션을 요청하지만, 실제로 가비지 컬렉션이 실행될지 여부는 JVM의 결정에 달려 있습니다.
  4. 자바에서는 가비지 컬렉션을 강제로 호출할 수 있지만, 이는 보통 권장되지 않습니다. 시스템 자원을 비효율적으로 사용할 수 있기 때문입니다. 가비지 컬렉션을 강제로 호출하려면 System.gc()를 사용합니다.

요약

  • 객체 참조 해제: 객체를 더 이상 참조하지 않게 null로 설정하면, 가비지 컬렉터가 나중에 이 객체를 메모리에서 제거할 수 있습니다.
  • 가비지 컬렉션 강제 호출: System.gc()를 사용하여 가비지 컬렉션을 강제로 호출할 수 있지만, 일반적으로 자바는 자동으로 가비지 컬렉션을 잘 처리하므로 이 방법을 사용하는 것은 추천하지 않습니다.

이렇게 객체를 참조에서 제거하면, 자바의 가비지 컬렉터가 적절히 메모리를 관리하게 됩니다.

반응형
반응형

https://www.acmicpc.net/problem/25304

 

위에는 문제 링크!

아래는 문제 캡쳐!

 

 


 

Java 로 풀었다!

나만 너무 어렵게 생각했나 ㅎ 많은 사람들은 엄청 쉽게 푼 것 같다.

나는 중간중간 문장도 넣었다

 

import java.util.Scanner;

public class cal {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner input = new Scanner(System.in);
		System.out.println("Your total price : ");
		int total = input.nextInt();

		System.out.println("How many kind of things did you buy? : ");
		int kind = input.nextInt();
		
		//위에서 나는 4하고 enter 를 치면, enter ("\n") 가 그 다음 input.nextLine() 메서드는 버퍼에 남아 있는 줄바꿈 문자 \n을 읽습니다. 그 결과 빈 문자열 ""이 abstr[0]에 저장됩니다.
		// 그걸 방지하기 위해 아래 부분에서 아래와 같이 남은 줄바꿈 문자를 소비
		input.nextLine();
		
		System.out.println("Then let me know all of the price and the EA" );
		String[] abstr = new String[kind];
		
		for (int i = 0; i<kind; i++) {
			abstr[i] = input.nextLine();
			String[][] absplitstr = {abstr[i].split("\\s")};
			int[] absplitint = {Integer.parseInt(absplitstr[0][0]), Integer.parseInt(absplitstr[0][1])};
			total -= (absplitint[0]*absplitint[1]);
		}
		
		if (total == 0) {
			System.out.println("Yes!");
		} else {
			System.out.println("no!");
		}

		
	}

 

 

참고로, 내가 17번 line 의 코드를 빼먹었을 때, abstr[0] = ""; 이렇게 빈칸이 들어가버리는 문제가 생겼고, 그 이유를 몰랐는데, Chat gpt 선생님이 친절하게 그 이유를 알려줬다.

아래는 gpt 답변!

 


abstr[0]에 빈 문자열 ""이 들어가는 이유는 Scanner 객체의 nextLine() 메서드가 이전 입력에서 남은 줄바꿈 문자(\n)를 읽어버리기 때문입니다.

아래에서 이 상황을 단계별로 설명할게요.

코드 동작 과정

  1. total 값 입력: 사용자가 input.nextInt()를 통해 정수 260000을 입력합니다. 이때 사용자가 입력한 값 뒤에 Enter 키를 누르면, 숫자 260000 뒤에 \n (줄바꿈 문자)이 입력 버퍼에 남아 있게 됩니다.
  2. kind 값 입력: 마찬가지로, input.nextInt()를 통해 정수 4를 입력합니다. 그리고 \n이 다시 입력 버퍼에 남아 있게 됩니다.
  3. 첫 번째 nextLine() 호출: 반복문 안에서 abstr[0] = input.nextLine();이 실행되면, input.nextLine() 메서드는 버퍼에 남아 있는 줄바꿈 문자 \n을 읽습니다. 그 결과 빈 문자열 ""이 abstr[0]에 저장됩니다.
  4. 이후 nextLine() 호출: 그 다음 반복에서 input.nextLine()이 호출될 때마다 사용자가 입력한 값을 제대로 읽게 됩니다.

해결 방법

이 문제를 해결하려면 nextInt() 다음에 nextLine()을 한 번 호출하여 입력 버퍼에 남아 있는 줄바꿈 문자를 소비해주면 됩니다.


 

 

이제 앞으로 습관을 들이자!

꼭! nextInt(); 를 쓰면, 아래에 input.nextLine(); 을 써줘서 "\n" 을 소비해주자!

 

int num = input.nextInt();

input.nextLine();

 

 

 

너무 어렵게 풀었나? 싶은 백준 문제 java 풀이 끝!

반응형
반응형

출처 : https://cloudstudying.kr/studies/55

 

자바 1000제 | CloudStudying

# 블랙잭 게임 ## 문제 블랙잭 게임이 동작 할 수 있도록 Player.java 소스코드를 작성해주세요. ## 블랙잭 규칙 + 참가자는 딜러와 게이머 2명으로 제한 + 카드는 각 무늬(다이아, 클로버, 하트, 스페

cloudstudying.kr

 

문제

A, E, I, O, U를 모음이라고 가정했을때, 입력으로 들어온 문자열이 몇개의 모음과 자음으로 구성되어 있는지 출력하는 프로그램을 작성하세요.

입력 예

  1. 2 // 입력할 문자열의 개수
  2. Programming is fun // 입력한 문자열 1
  3. Hello World // 입력한 문자열 2

출력 예

  1. Programming is fun: 5 11
  2. Hello World: 3 7

힌트

Scanner 클래스를 사용하여 키보드로부터 입력을 받아주세요.

  1. Scanner input = new Scanner(System.in);
  2. int n = input.nextInt(); // 정수값 입력
  3. String str = input.next(); // 문자열 입력




내가 푼 방법은 아래와 같다!

 

먼저 String을 몇 개 입력할 것인지 받아서 int num 에 저장!

만약 2개 입력할 것이라고 작성하면, 그 2개의 string 을 받을 string array 생성!

 

(참고로 Scanner 로 값을 가져올 때, 띄어쓰기를 하면 각각 다른 string 으로 간주해버린다ㅠ 이건 어떻게 하지?

nextLine() 을 쓰면 띄어쓰기로 구분한다고 하는데, 이걸 사용하면 처음의 nextInt 로 가져온 num 다음에 엔터 쳤을 때, 그 엔터를 받아서 stringarr[0] 에 "" 값을 넣어버리는 것 같다.. >> 이 부분은 다시 해결해보자.)

 

 

참고로 아래 코드 위에 import java.util.scanner; 코드도 있음. 

public static int j;
public static void main(String[] args) {
		
	Scanner input = new Scanner(System.in);
	System.out.println("How many strings do you have?");
		
	int num = input.nextInt();
	System.out.println("Then tell me your string(s).");
	String[] stringarr = new String[num];
		

	for (int i = 0; i<num; i++) {
		stringarr[i] = input.next();
	}
		
	String[] aeiou = {"a","e","i","o","u"};
	int sum = 0;
	for (int x = 0; x<num; x++) {
		for (j = 0; j<aeiou.length; j++) {
			if (stringarr[x].contains(aeiou[j])) {
				sum = sum + (int) stringarr[x].chars().filter(i -> String.valueOf((char) i).equals(aeiou[j])).count();
			} 
		}	
		System.out.print(stringarr[x]+": "+sum+", ");
		System.out.println((stringarr[x].length()-sum));
		sum = 0;
	}
	
    
}

 

참고로, 21번째 줄 코드는, 아래의 코드를 다른 블로그에서 참고해서 가져다 넣었다!

 

String s 에서 "0" 이 몇개 있는지 가져와서 findZeroCnt1 이라는 integer 에 넣는 코드가 아래와 같다고 한다.

난 우선 아래의 chars().filter 코드가 뭔지 모르겠지만, 따라서 작성해봤다!

 

//String s = "110010101001";
//int findZeroCnt1 = (int) s.chars().filter(i -> String.valueOf((char) i).equals("0")).count();

 

 

 

위의 코드를 따라서, 아래처럼 적어봤더니,

sum = sum + (int) stringarr[x].chars().filter(i -> String.valueOf((char) i).equals(aeiou[j])).count();

 

해당 for 문에서 int j 를 생성하면 j가 local variable 이라고 안된다고 함.

 

그래서 int j 를 맨 위로 빼줬다. (public static int j;)

그러니까 작동함.

 

 


더 간략하게 코드를 만들 수는 있겠지만, 우선은 여기서 원하는 값을 그래도 만들었다고 생각했는데,,,

결과가 아래처럼 나온다ㅠㅠㅠㅠ

왜 ProgrammingIsFun 에서 모음이 4개만 나오는 거지..? 

디버거 사용해봐도 j 변수에 대한 건 나오지 않고,, 지금 막혔다..

 

 

문제를 찾아보자..

 

.

.

.


---천재 Chat GPT 로부터 문제를 찾아냈다!----

 

당신의 Java 프로그램에서 발생하는 문제는 stringarr[x].chars().filter(i -> String.valueOf((char) i).equals(aeiou[j])).count() 이 부분에 있습니다. 이 부분에서 chars() 메소드를 사용해 각 문자를 char 타입으로 변환하고, 그런 다음 String.valueOf((char) i).equals(aeiou[j])를 사용하여 해당 문자가 모음과 일치하는지를 검사합니다.

여기서 문제가 발생할 수 있는 부분은 String.valueOf((char) i).equals(aeiou[j]) 비교 방식입니다. 이 코드는 문자를 String으로 변환하여 비교하는데, 이 과정에서 예상치 못한 문제가 발생할 수 있습니다. 예를 들어, 대소문자 구분이 제대로 되지 않는 경우가 있을 수 있습니다.

문제를 해결하기 위해 다음과 같이 코드를 수정할 수 있습니다:

  1. 문자가 소문자 모음과 일치하는지 검사하기 위해 입력된 문자열을 모두 소문자로 변환합니다.
  2. String.valueOf((char) i).equals(aeiou[j]) 대신에 char 타입을 직접 비교하는 방법을 사용합니다.

다음은 수정된 코드입니다:

package program;
import java.util.Scanner;
public class aeiou {
    public static int j;
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("How many strings do you have?");
        
        int num = input.nextInt();
        System.out.println("Then tell me your strings.");
        String[] stringarr = new String[num];
        
        for (int i = 0; i<num; i++) {
            stringarr[i] = input.next();
        }
        
        char[] aeiou = {'a','e','i','o','u'};
        int sum = 0;
        for (int x = 0; x<num; x++) {
            String lowerStr = stringarr[x].toLowerCase(); // 소문자로 변환
            for (j = 0; j<aeiou.length; j++) {
                sum += lowerStr.chars().filter(i -> i == aeiou[j]).count();
            }    
            System.out.print(stringarr[x]+": "+sum+", ");
            System.out.println((stringarr[x].length()-sum));
            sum = 0;
        }
        
    }
}

 

이렇게 수정하면 대소문자 구분 없이 올바르게 모음의 개수를 셀 수 있습니다. ProgrammingIsfun에서 소문자로 변환된 programmingisfun을 처리하며, 'i'가 두 번, 'o', 'a', 'u'가 한 번씩 등장하여 총 5개의 모음을 제대로 세게 됩니다.

 

 

 

 

==> ChatGPT 진짜 천재다.. 소문자로 변환해서 대소문자 구분 없이 올바르게 모음 개수를 세는 것이 중요!


 

그리고 String 을 띄어쓰기를 해도 Scanner 로 가져올 수 있는 방법을 알아보자..

 

 

 

반응형
반응형

Result 는 아래와 같이 나오게끔 만들어 보기!

 

1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9




2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18




3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27




4*1=4
4*2=8
4*3=12
4*4=16
4*5=20
4*6=24
4*7=28
4*8=32
4*9=36




5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45




6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54




7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
7*8=56
7*9=63




8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
8*9=72




9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81



 

 

제 코드는 "더보기" 를 클릭하시면 볼 수 있습니다!

 

 

1번 : for 과 while 을 함께 사용했다!

 

더보기

 

public class gugudan {

	public static void main(String[] args) {
		
		int dan = 1;
		
		while (dan <= 9) {
			for (int i = 1; i <= 9; i++) {
			
				System.out.println(dan+"*"+i +"="+(dan*i));
			
			}
			dan++;
			System.out.println("\n");
		}
			
	}

}

 

2번 : do ~ while 문 사용

더보기
public class gugudan2 {

	public static void main(String[] args) {
		
		int i = 1;
		int dan = 1;

		
		do {
			if (i < 9) {
				int result = i*dan;
				System.out.println(dan +"*" +i+ "="+result);
				i++;
			} else {
				int result = i*dan;
				System.out.println(dan +"*" +i+ "="+result);
				dan++;
				i = 1;
				System.out.println("\n");
				
			}
				
		} while (dan <= 9);
			
			
	}

}

 

3번 : 괜히 한 번 field variable 만들어보고, while 문에 break 를 사용했다!

더보기
public class gugudan3 {

	public static int i;
	public static int dan;

	public static void main(String[] args) {
		
		i = 1;
		dan = 1;

		while (true) {
			
			if (i < 9) {
				int result = i * dan;
				System.out.println(dan +"*"+i+"="+result);
				i++;
				
			} else {
				int result = i * dan;
				System.out.println(dan +"*"+i+"="+result);
				dan++;
				i = 1;
				System.out.println("\n");
			}
			
			
			if (dan == 10) {
				break;
			}
		}
			
	}

}

 

반응형

+ Recent posts