Что не так с этим условным? - PullRequest
2 голосов
/ 09 марта 2010

Я пытаюсь создать метод, который проверяет, могут ли 3 длины составить треугольник. Я думаю, что я делаю какую-то синтаксическую ошибку, но я не могу понять, что это такое.

Вот соответствующий бит кода: (это в Java)

public static void trya (int a, int b, int c)
{
    if (c>(a+b))
    {
        System.out.println ("yes") ;
    }
    else
    {
        if (b>(a+c)) 
        {
            System.out.println ("yes") ;
        }
    }
    else 
    { 
        if (a>(b+c))
        {
            System.out.println ("yes") ;
        }
    }
    else
    {
        System.out.println ("no") ;
    }

}

это сообщение об ошибке, которое я получаю:

tryangle.java:17: 'else' without 'if'
        else 
                ^

Ответы [ 9 ]

13 голосов
/ 09 марта 2010

У вас есть два блока else для первого if.Попробуйте использовать else if:

public static void trya (int a, int b, int c)
{
    if (c>(a+b))
    {
        System.out.println ("yes") ;
    }
    else if (b>(a+c)) 
    {
        System.out.println ("yes") ;
    }
    else if (a>(b+c))
    {
        System.out.println ("yes") ;
    }
    else
    {
        System.out.println ("no") ;
    }
}
11 голосов
/ 09 марта 2010

Будучи студентом, я думаю, что, вероятно, уместно указать вам на заявления о потоках управления в онлайн-документации по Java.

4 голосов
/ 09 марта 2010

Лично мне не очень нравится if/else.

public static boolean isValidTriangle(int a, int b, int c)
{
    return (c > a + b) || (b > a + c) || (a > b + c);
}

public static void trya(int a, int b, int c)
{
    System.out.println(isValidTriangle(a, b, c) ? "yes" : "no");
}
4 голосов
/ 09 марта 2010

Это неверно:

if (cond A) {
    // ...
} else {
    if (cond B) {
        // ...
    }
} else {
    if (cond C) {
        // ...
    }
}

Это должно быть скорее:

if (cond A) {
    // ...
} else if (cond B) {
    // ...
} else if (cond C) {
    // ...
}

Узнайте больше на этом уроке Sun .

2 голосов
/ 09 марта 2010

Должно быть:

public static void trya (int a, int b, int c) 
{ 
    if (c>(a+b)) 
    { 
        System.out.println ("yes") ; 
    } 
    else if (b>(a+c))  
    { 
        System.out.println ("yes") ; 
    } 
    else  if (a>(b+c)) 
    { 
        System.out.println ("yes") ; 
    } 
    else 
    { 
        System.out.println ("no") ; 
    } 
} 
1 голос
/ 09 марта 2010

Также стоит отметить, что ваш метод на самом деле не проверяет, могут ли три длины составить треугольник. Например, trya(1, 1, 4) приведет к печати yes, даже если стороны 1, 1, 4 не образуют треугольник.

1 голос
/ 09 марта 2010

Вот как ваш код отформатирован:

if (...) {...}
else {...}
else {...} //else than what?
0 голосов
/ 09 марта 2010

Похоже, проблема в том, что у вас есть несколько других блоков, один оператор if может иметь только один другой блок.

0 голосов
/ 09 марта 2010

Вы не можете иметь два else s для одного и того же. Измените свое вложение так, чтобы вы использовали else if вместо

else
{
    if
...