2021. 11. 25. 21:04ㆍJAVA
이번 주는 java API, 그 중에서도 string관련 메소드들을 활용하는 실습을 했다.
문제 1) 60, 70, 80, 100 의 숫자 중에서 임의의 숫자를 받아오는 메소드 만들기
사실 지난 시간 수업을 제대로 안 들어서 random메소드를 활용하는 방법을 잘 모른 상태에서 프린트물에 적혀있는 것만 보고 나름 머리를 굴린다고 굴리고 키보드 두들겨 봤는데:
int speed_limit() {
while (true) { // while문 무한루프 문제 발생 !!
int i = (int)Math.random()*100+1;
if (i==60 || i==70 || i==80 || i==100) {
return i;
}
}
}
** 오답임.
아니 글쎄 프린트문으로 출력을 해봐도 아무것도 출력이 안 되는 것이다.
break; 가 없어 while문이 무한루프에 빠져있었다는 것..
return i; 하고 break;를 써주면 빨간 줄이 그어지는데 그게 왜 그런지는 아직 해결하지 못 했다.
오늘 Math.random()메소드 제대로 활용하는 법을 강의 다시보기로 배웠다.
우선
Math.random()은 0.0 이상 1 미만, 그러니까 0.0 ~ 0.99999...... 의 숫자를 반환한다.
1. 여기서 만약 5를 곱한 뒤 1을 더하고 정수형으로 강제 변환해주면 : (int)Math.random()*5+1 로,
1,2,3,4,5 중 하나의 난수 (임의의 수)를 반환해준다.
이렇게 수식으로 내가 원하는 수 중 난수를 받아오는 방법이 있는가 하면,
2. switch-case문을 활용하는 방법도 있다.
위의 실습문제 중 1번 문제가 이 방법을 활용하는 방법이었다.
int speed_limit() {
int i = (int)Math.random()*4+1;
switch (i) {
case 1 :
return 60;
case 2 :
return 70;
case 3 :
return 80;
case 4 :
return 100;
}
return 0; // 이걸 밖에다 써줘야 return값이 있다고 인식해서 빨간 줄 안생김.
}
** 가능한 답안
그냥 몇 개 숫자 중 난수를 원하는지에 따라 switch case문을 활용하면 된다.
나는 60, 70, 80, 100 중 난수를 원하는 거니까
총 4 개 중 아무거나 반환받으면 된다.
따라서 1,2,3,4 중 난수를 받아오고, 각 숫자에 60, 70, 80, 100을 달아놓으면
60, 70, 80, 100 중 난수를 얻는 것과 마찬가지.
(사실 꼭 Math.random()*4에다가 1을 더해주지 않고 0,1,2,3으로 해도 된다.)
문제 2) 주어진 string 1 에서 주어진 string 2와 일치하는 부분이 몇 군데 있는지 받아오는 메소드 만들기
문제의 정확한 이해를 위해 Main:
String source = "The old man and the sea";
System.out.println(quiz.count(source,"he"))
(저 quiz 객체는 아래 나오는 count()메소드가 쓰인 클래스의 객체이다. 위에 생략된 부분에서 생성함.)
source 스트링에서 "he"라는 string이 몇 군데 있는지 받아오는 것이 목적이다.
출력: 2
이건 사실 아예 substring을 쓸 생각을 못해서 for문 끄적이다가 아예 완성을 못 시켰다.
int count(String st, String s) {
int count = 0;
for (int i=0; i<=st.length()-s.length();i++) {
if (st.substring(i,i+s.length()).equals(s)) {
count++;
}
}
return count;
}
** 가능한 답안
살짝 복잡해보이긴 하더라도 천천히 따져가면서 풀면 쉽다.
포인트는
☑ mystr.substring(start,end)에서 end숫자는 불포함.
☑ mystr.equals(str)으로 string끼리 비교. == 는 안됨! String은 자바 기본형이 아니라 레퍼런스이기 때문에 .equals("~") 메소드를 활용한다.
✔ Math.random() 에서 원하는 숫자들로 구성하고 싶으면:
방법1) <수식>으로 구현 -- e.g. (int)Math.random()*100+1 => 1부터 100까지의 정수 중 난수. 주로 패턴이 있는 수들 중 난수를 구할 때 사용!
방법2) <switch-case문>으로 구현 -- 수식을 통해 임의의 수들로 구성하게 하고, 각 숫자를 case로 나누고 각각에 내가 원하는 임의의 숫자들 반환하도록. 이건 말보단 코드를 보면 이해가 쉬울 듯. 주로 패턴이 없는 임의의 수들 중 난수 구할 때 사용!
✔ mystr.substring(start,end)에서 end숫자는 불포함.
✔ mystr.equals(str)으로 string끼리 비교. == 는 안됨! String은 자바 기본형이 아니라 레퍼런스이기 때문에 .equals("~") 메소드를 활용한다.
'JAVA' 카테고리의 다른 글
[til_211127][java] 상속 (0) | 2021.11.27 |
---|---|
[til_211126][java] 객체배열 (0) | 2021.11.26 |
[til_211123][java] 메시지패싱 (0) | 2021.11.23 |
[til_211123] [java] 입력받은 문자 중 공백을 ','로 대체하는 클래스 (0) | 2021.11.23 |
[til_211103] [java] 캡슐화와 접근지정자 (0) | 2021.11.03 |