2013-04-18 3 views
-5

Просто декламатор: я новичок в java.Если цикл возврата оператора

Напишите метод с именем numUnique, который принимает три целых числа в качестве параметров и возвращает число уникальных целых чисел среди трех. Например, вызов numUnique (18, 3, 4) должен возвращать 3, потому что параметры имеют 3 разных значения. В противоположность этому, numUnique вызов (6, 7, 6) возвращает 2, потому что есть только 2 уникальных чисел среди трех параметров: 6 и 7.

public int numUnique(int x,int y,int z){ 
    if(x==y||y==z){ 
    } 
    return 1; 

    else if(x!=y||y!=z){ 

    } 
    return 2; 
     
} 

Я очень смущен об отношениях если и возвращение . Я всегда возвращаю внутрь, если оператор. Но я не понимаю, почему он генерирует мне сообщение об ошибке. Если что-то выполняется, я возвращаюсь в цикле. Почему это неправильно. Но, с другой стороны, оператор println можно поставить внутри для петель.

Еще одна проблема, потому что этот вопрос я пытался попытаться использовать, если иначе тоже. Но мое первое условие - это если и я возвращаю его. Поэтому после этого я поместил else, если после первого возврата он снова дает мне ошибку.

Буду признателен за то, что кто-то объяснит мне, и я изменю свои коды самостоятельно. Пожалуйста, не дайте мне полные коды. Спасибо.

Отредактировано * Кстати, я прочитал все комментарии и я, наконец, понять .Так является моими кодами, которые я работаю на моем собственном (:

public static int numUnique(int x, int y, int z) { 
    if(x==y && y==z){ 
     return 1; 
    }else if(x==y && y!=z || y==z && z!=x || x==z && y!=z){ 
     return 2; 
    } 
    return 3; 
} 

ответ

0

Во-первых, ваше возвращение находятся за пределами if заявления, они должны быть внутри. Потому что, если вы пишете:

if(Something) { 

} 
return 1; 

Тогда 1 будет всегда возвращается, потому что ваш if пуст. Если вы хотите return 1 только if(Something) затем записать его внутрь if тела:

if(Something) { 
    return 1; 
} 

Во-вторых, ваша логика не хорошо. Вы должны проверить:

  • если x == y == z, то все они равны.
  • если х == у и х! = Г, то вы должны вернуться 2.
  • если х! = У! = Г, то вы должны вернуть 0.
  • ....

You необходимо охватить все ситуации.

+0

. Я согласен, что моя логика не очень хороша. Так что я потратил часы, пытаясь разобраться в моей логике. Повторил этот мод во второй раз, и моя логика все еще так слабый. – user2179615

+0

Вот почему я сказал вам, что вам нужно делать. Это очень просто, просто подумайте, когда все цифры равны, когда только два равны. Запишите его, и вы увидите, что это не сложно. – Maroun

2

Операторы возврата должны быть помещены в . фигурными bracets

+1

Это еще не решило его проблему. Его логика не очень хороша. (и я не спустил :) :) – Maroun

+0

Нет - но это еще один шаг ..... –

+0

Это нормально. Я не понимаю, почему так много downvotes.been практикующих в течение нескольких часов и застрял так пришел сюда, чтобы искать здесь после прочтения самостоятельно. – user2179615

1

синтаксис для того, что вы хотите выглядеть следующим образом:

public static int numUnique(int x,int y,int z){ 
     if(x==y||y==z){ 
      return 1; 
     }else if(x!=y||y!=z){ 
      return 2; 
     } 
     return 3; 
    } 

Maybee этот код IST лучше понятно:

public static int numUnique(int x, int y, int z) { 
    if (x == y && x == z && y == z) { 
     return 3; 
    } else if (x != y && x != z && y != z) { 
     return 1; 
    } 
    return 2; 
} 

ПСЕВДОКОД Если

if(condition){ 
// do something if condition is true 
} 

ПСЕВДОКОД Если тогда еще

if(condition){ 
// do something 
}else{ 
// do something if condition is false 
} 

ПСЕВДОКОД ElseIf

if(condition){ 
// do something 
}else if(condition2){ 
// do something, only if condition2 is true, if condition 1 is true, you never will be here 
}else{ 
// do something, your only here if the two conditions above were false 
} 

оператор возврата, immidiently исполнения тормоза (есть некоторые исключения, exmaple : блок finally)

1

я думаю, что вам нужно написать возвращаемое значение внутри если-то в другом месте блоки в противном случае он будет всегда возвращать 1

+0

Но я разместил его на улице, и он работает, пока я не написал эти инструкции if else – user2179615

0

, так как если это условный поток, я может или не может работать (в зависимости от состояния),

, но если ваш метод имеет тип возврата, он должен возвращаться в каждом случае. Но в более позднем случае (если условие ложно), он не найдет никакого возврата.

так что если вы пишете

public int value(boolean flag){ 
if(flag){ 
return 0; //only reachable if flag is true, else value can not return from here 
} 
} 

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

0

, используя тот факт, что Set сек хранить значения только один раз ...

public int numUnique(int x,int y,int z){ 
    Set<Integer> number = new HashSet<Integer>(); 
    number.add(x); 
    number.add(y); 
    number.add(z); 

    return numbers.size(); 
} 
0

Вы должны поместить оператор возврата в блоке из если и еще:

public int numUnique(int x,int y,int z){ 
    if(x==y||y==z){ 
    return 1; 
    } 
    else if(x!=y||y!=z){ 
    return 2; 
    } 
} 

это не удается, потому что компилятор думать, что у вас есть не оператор возврата для функции в каждом пути.

2

Чтобы дать вам четкое представление о операторах «return», я скажу, что в одном блоке кода i.e {...} может быть только один оператор return.

Операция «return» используется для возврата к вызывающему абоненту и должна быть последней операцией блока.

Как вы предлагаете, я не предоставляю вам полный код, а заставляющий вас знать об использовании оператора «return».

В вашем коде вы пишете два «возвратных» оператора в одном блоке.

0

Ваш код плохо сформированный:

И если-другое заявление выглядит следующим образом:

if { code } 
else { code } 

Так, if и else блоков образуют пару. Но у вас есть:

if (condition) { code } 
code 
else { code } 
code 

Итак, code чуть выше слов else нарушает эту пару, и else остаются изолированными, и, таким образом, ваша программа синтаксический некорректная.

Вы "хотите" сделать:

if (x==y || y == z) { 
    return 1; 
} 
else if (x != y || y != z) { 
    return 2; 
} 

Кроме того, если if (или else) блок имеет только одну строку, вы можете удалить скобки:

if (x==y || y == z) 
    return 1; 
else if (x != y || y != z) 
    return 2; 

Даже больше, вы алгоритмы не являются решением вашей проблемы, а как насчет трех уникальных значений ?. Вы должны проверить больше ситуаций (все различия, все равно или только одно другое).

Смежные вопросы