[Kotlin] 조건문(if)+함수_오류부터 실행까지

Jean·2023년 7월 27일
0

실습 중...
과제 :
[조건문+함수]
세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
ex) 12, 51, 3 -> 12

// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// 4. 만약 a>c, c출력..? 
// 
fun main () {
    println(second(12, 51, 3))
}

fun second (a:Int, b:Int c:Int) {
    if(a>c) {
        println
    }
}

//대충 의사코드 작성하고, 코드 적어보고 생각안나면 의사코드 작성하고 다시 코드 적기..
//선생님이 자꾸 코드 쓰다가 의사코드 적고 빌드에러 너무 많이 난다고 했다. 의사코드는 문제가 없는데 코틀린 기초 문법이 부족한거라고 했다.
//어떻게 알았지..?
//의사코드 적다가 막히면 코드쓰고 코드쓰다 막히면 출력해보고 당연히 에러나고 다시 의사코드 적어보고 왜안돼지? 재미없다..하고 있었는데
//순서대로 첫줄부터 마지막줄까지 적으라고 했다..
//내 코드가 어디가 에러난지 모르니까 run 해보고 메시지보고 에러난 부분 수정해 나가려고 계속 run한건데...
//계속 막혀있으니
//경우의수를 생각해보라고했다. 그러니까,

// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c 
// a c b
// b a c 
// b c a
// c a b
// c b a
// 
fun main () {
    println(second(12, 51, 3))
}

fun second (a:Int, b:Int, c:Int) {
    if(a>b>c){
        return b
    }
    if(a>c>b){
        return c
    }
    if(b>a>c){
        return a
    }
    if(b>c>a){
        return c
    }
    if(c>a>b){
        return a
    }
    if(c>b>a){
        return b
    }
   
}

//어짜피 6개만 있으니까 노가다가 가능했다.
//이런식으로 짰는데 마지막은 if가 필요가 없고 return 만 있으면 된다고했다. 경우의 수다 6가지 중 5가지를 쓰고 나머지 한 경우는 오직 단 한경우 밖에 없기 때문에 if문을 쓸 필요가 없는 것
//참고로 위 코드도 안된다. if는 boolean인데 int랑 값이 안맞는다
//어떻게 고칠지 모르니까 챗지피티한데 물어봤당

// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c 
// a c b
// b a c 
// b c a
// c a b
// c b a
// 
fun main () {
    println(second(12, 51, 3))
}

fun second (a:Int, b:Int, c:Int) {
    //abc
    if((a >= b && a >= c) && (b >= c)){
        return b
    }
    //acb
    if((a >= c && a >= b) && (c >= b) {
        return c
    }
    //bac
    if((b>=a && b>=c) && (a>=c)) {
        return a
    }
    //bca
    if((b>=c && b>=a) && (c >= a)){
        return c
    }
    //cab
    if((c >= a && c >= b) && (a >=b)){
        return a
    }
    //cba
    if((c >= b && c>=b) && (b >= a)){
        return b
    }
   
}

Type mismatch: inferred type is Int but Unit was expected
Expression '(c >= b)' of type 'Boolean' cannot be invoked as a function. The function 'invoke()' is not found
'return' is not allowed here
Type mismatch: inferred type is Int but Unit was expected
Expecting ')
Type mismatch: inferred type is Int but Unit was expected
Type mismatch: inferred type is Int but Unit was expected
Expression '(a >=b)' of type 'Boolean' cannot be invoked as a function. The function 'invoke()' is not found
'return' is not allowed here
Type mismatch: inferred type is Int but Unit was expected
Expecting ')
Type mismatch: inferred type is Int but Unit was expected

//챗지피티코드 보고 이해하고 노가다로 썼는데 오류가 잔뜩 났다
//개어이없다 그래서 챗지피티 코드랑 내 코드랑 비교를 해봤다

이하 챗 지피티 코드

fun main() {
    println(second(12, 51, 3))
}

fun second(a: Int, b: Int, c: Int): Int {
    if ((a >= b && a >= c) && (b >= c)) {
        return b
    }
    if ((a >= b && a >= c) && (c >= b)) {
        return c
    }
    if ((b >= a && b >= c) && (a >= c)) {
        return a
    }
    if ((b >= a && b >= c) && (c >= a)) {
        return c
    }
    if ((c >= a && c >= b) && (a >= b)) {
        return a
    }
    if ((c >= a && c >= b) && (b >= a)) {
        return b
    }

    return a // This line will be reached if all three numbers are the same
}

//괄호 하나 빠진거 있으니 수정을 하자
//조건문 안에 순서가 다른데 어짜피 and로 연결되어있으니까 상관없다
// 마지막에 return a도 빠져있다 a는 a,b,c가 모두 같은 값일 때 출력한다
//그리고 second 함수에 :Int가 빠져있더니 'Type mismatch: inferred type is Int but Unit was expected' 오류가 났다 옆에 Int를 써주니 안났다
//run 해보니 된다 이제 들여쓰기를 수정해준다

// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c 
// a c b
// b a c 
// b c a
// c a b
// c b a
// 
fun main () {
    println(second(12, 51, 3))
}

fun second (a:Int, b:Int, c:Int) : Int  {
    //abc
    if((a >= b && a >= c) && (b >= c)){
        return b
    }
    //acb
    if((a >= c && a >= b) && (c >= b)) {
        return c
    }
    //bac
    if((b>=a && b>=c) && (a>=c)) {
        return a
    }
    //bca
    if((b>=c && b>=a) && (c >= a)){
        return c
    }
    //cab
    if((c >= a && c >= b) && (a >=b)){
        return a
    }
    //cba
    if((c >= b && c>=b) && (b >= a)){
        return b
    }
    return a
   
}

//최종코드 완성
//챗지피티야 고마워~

profile
아 왜 안돼

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

유익한 글이었습니다.

답글 달기