2013-12-18 3 views
2
public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    } else if (!status.equals("Pending")) { 
     return -1; 
    }   
} 

Можете ли вы объяснить мне, почему компилятор продолжает запрашивать отсутствующие операторы возврата. И как я могу это исправитьПочему мой код продолжает запрашивать недопустимый оператор возврата

+0

status = "pending" –

+1

java недостаточно умен, чтобы знать, что ваши утверждения 2 if являются исчерпывающими. Вам действительно нужно прямо сказать это. Насколько известно java, возможно, если if и else, если он является ложным, а затем он не знает, что делать. Он должен вернуть двойник, но вы не сказали ему, что делать. – Cruncher

ответ

0

Это происходит потому, что если:

status.equals("Pending") 

возвращается true, не возвращают ничего.

Вы можете использовать:

if (status.equalsIgnoreCase("Pending")) { 
     .... 
    } else { 
     return -1; 
    } 
1

Он жалуется, потому что все ваши обратные заявления в if statements. Просто удалите else if и верните -1 в конце.

2

ли как этот

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    } 
    return -1; 
}  
+0

@ sᴜʀᴇsʜ ᴀᴛᴛᴀ спасибо ...... – Prabhakaran

+1

Объяснение, почему компилятор жаловался, вероятно, полезно. – Cruncher

+0

«Можете ли вы объяснить мне, почему компилятор продолжает запрашивать отсутствующие операторы возврата». – Troubleshoot

0

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

1

Что делать, если ни

  1. status.equalsIgnoreCase ("Ожидание")
  2. ! Status.equals ("В ожидании")

верно?

Вам понадобится еще один оператор возврата.

3

Компилятор не знает, что status.equalsIgnoreCase("Pending") и !status.equals("Pending") охватывают все возможности. На самом деле, я только угадываю, что от проверки имен функций.

Вам необходимо помочь.

Одним из способов исправить - если это ваше намерение - это написать

} else /*if (!status.equals("Pending"))*/ { 
    return -1; 
} 
1

Java не достаточно умны, чтобы определить, что вы гарантированно вернуться. Вам нужно явно указать это, если у вас есть else на вашем ifs, или возвратитесь в конец, чтобы поймать любой поток.

В этом случае ваши операторы if также были излишними. Очищенный вверх и рабочая версия будет выглядеть следующим образом:

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice <= 100) { 
      return 1; 
     } else if (startPrice <= 250) { 
      return 2.5; 
     } else { 
      return 5; 
     } 
    } 
    return -1;   
} 

else if (startPrice > 5 && startPrice <= 20) Когда вы добрались до этой линии, вы уже знали, что startPrice > 5. Если бы он не был тогда, он бы ввел предыдущий блок if.

+0

+1 для хорошего объяснения .... Мне этого не хватает. – Prabhakaran

0

Это все, что связано с оператором return. Если все утверждения if были ложными, то метод ничего не вернет, потому что все операторы return являются локальными для операторов if. Программа не может знать, что статус в противном случае будет ожидаться, поэтому компилятор жалуется.

public double open() { 
    if (status.equalsIgnoreCase("Pending")) { 
     status = "Open"; 
     if (startPrice <= 5) { 
      return 0.2; 
     } else if (startPrice > 5 && startPrice <= 20) { 
      return 0.5; 
     } else if (startPrice > 20 && startPrice <= 100) { 
      return 1; 
     } else if (startPrice > 100 && startPrice <= 250) { 
      return 2.5; 
     } else if (startPrice > 250) { 
      return 5; 
     } 
    return -1; // no need for an else statement since if an one if statement returned true it wouldn't execute the rest of the code 
} 
Смежные вопросы