if (jamholderku.equals("1")){
params.put("sesi1", jamholderku);
}else {
params.put("sesi1", jamholder);
}
if (jamholderku2.equals("1")){
params.put("sesi2", jamholderku2);
}else {
params.put("sesi2", jamholder2);
}
if (jamholderku3.equals("1")){
params.put("sesi3", jamholderku3);
}else {
params.put("sesi3", jamholder3);
Log.d("paramskutes", jamholder3);
}
if (jamholderku4.equals("1")){
params.put("sesi4", jamholderku4);
}else {
params.put("sesi4", jamholder4);
}
if (jamholderku2_1.equals("1")){
params.put("sesi2_1", jamholderku2_1);
}else {
params.put("sesi2_1", jamholder2_1);
}
if (jamholderku2_2.equals("1")){
params.put("sesi2_2", jamholderku2_2);
}else {
params.put("sesi2_2", jamholder2_2);
}
if (jamholderku2_3.equals("1")){
params.put("sesi3", jamholderku2_3);
}else {
params.put("sesi3", jamholder2_3);
}
if (jamholderku2_4.equals("1")){
params.put("sesi4", jamholderku2_4);
}else {
params.put("sesi4", jamholder2_4);
}
if (jamholderku3_1.equals("1")){
params.put("sesi2_1", jamholderku3_1);
}else {
params.put("sesi2_1", jamholder3_1);
}
if (jamholderku3_2.equals("1")){
params.put("sesi2_2", jamholderku3_2);
}else {
params.put("sesi2_2", jamholder3_2);
}
if (jamholderku3_3.equals("1")){
params.put("sesi3", jamholderku3_3);
}else {
params.put("sesi3", jamholder3_3);
}
if (jamholderku3_4.equals("1")){
params.put("sesi4", jamholderku3_4);
}else {
params.put("sesi4", jamholder3_4);
}
if (jamholderku4_1.equals("1")){
params.put("sesi2_1", jamholderku4_1);
}else {
params.put("sesi2_1", jamholder4_1);
}
if (jamholderku4_2.equals("1")){
params.put("sesi2_2", jamholderku4_2);
}else {
params.put("sesi2_2", jamholder4_2);
}
if (jamholderku4_3.equals("1")){
params.put("sesi3", jamholderku4_3);
}else {
params.put("sesi3", jamholder4_3);
}
if (jamholderku4_4.equals("1")){
params.put("sesi4", jamholderku4_4);
}else {
params.put("sesi4", jamholder4_4);
}
return params;
when the first if statement right it will not execute other if statement
EX:
if (jamholderku.equals("1)) == True
then it will execute params.put(blablabla)
but it won't execute other if statement like if (jamholderku2.equals("1"))
but if it executing if (jamholderku2.equals("1"))
it won't execute if (jamholderku3.equals("1")) even if it was true
can you please help me? because it deadline was due temorrow, i need to submit it or i get kicked from my team
Addition:
Example
let's say we using if else
if (jamholderku.equals("1")){
params.put("sesi1", jamholderku);
}else if (jamholderku.equals("0"){
params.put("sesi1", jamholder);
}else if (jamholderku2.equals("1"){
params.put("sesi2", jamholder2)
}
if the first if true, those else if won't be executed so my database will be null
and if i using nested statement
if (jamholderku.equals("1")){
if (jamholderku2.equals("1"){
params.put("sesi2", jamholderku2)
}
params.put("sesi1", jamholderku)
}
if user were selecting session 2 option then only jamholderku2 set to be 1, this make jamholderku false, so all code won't be executed
Edit:
I want to make a program, the program will check, upload, disabling thing.
Here's how it work:
User select date (Ex: 21-01-2020)
User select session, there is 4 session (session 1, session 2, session 3, session 4), and the user only can select 1 session, example user select (session 1)
so the program will upload selected date, and selected session to a server
and when the other user wants to use this program
the second user will need to do step 1 too, but the program will check in the selected date is there is a session that is used by another user
if there is a session that is used by another user, example the first user in date 21-01-2020 select session 1, so the second user when selecting date 21-01-2020, can't select session 1, but still can select session 2, 3, 4
and this program allows user to select multiple date and session
Maybe we should all get on the same understanding right now.
This code will check the if-statement and after finding the first TRUE it would stop all checks:
String str = "hello";
if(str.equals("hello"){
dosomething();
} else {
dosomethingelse();
}
So right here it will execute dosomething() and dosomethingelse() will not be executed.
You are giving us an example like this:
String str = "huhu";
if(str.equals("hello"){
dosomething_1();
} else {
dosomethingelse_1();
}
if(str.equals("huhu"){
dosomething_2();
} else {
dosomethingelse_2();
}
The if-statements are not nested. The program will check the first if and execute dosomethingelse_1() and after that check the second if and will execute dosomething_2();
Nested if-statement would be something like that:
String str = "hello";
if(str.equals("hello"){
dosomething();
} else {
if(str.equals("huhu"){
dosomething();
} else {
dosomethingelse();
}
}
And in this case the program would not reach the if(str.equals("huhu")) because it already executed the true one.
So basically we do not understand your question.
Related
I'm using while loop and inside am using two if statements.
while(cr.moveToNext()){
if(cr.getCount() > 0){
if((cr.getString(5).equals(username)) && cr.getString(6).equals(password)
&& cr.getString(14).equals("success")) {
String un = cr.getString(2);
String uc = cr.getString(1);
String rc = cr.getString(4);
......................
Toast.makeText(LoginActivity.this, "Successfully Logged In", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), Dashboard.class);
startActivity(intent);
} else{
Toast.makeText(LoginActivity.this, "Invalid Login", Toast.LENGTH_SHORT).show();
}
}
}
In this scenario, if I passed wrong value "Invalid Login" is executing many times [as it is inside while loop] and If I pass correct values both successfully login and Invalid login message is showing. How to make if condition to be properly work in this type of scenario...
Assuming you want to check that everything is in order before starting the activities you can do the loop twice, like below.
I also used do while, so as not to skip the first result.
private void handleCursor(Cursor cr){
boolean everythingGood = true;
do{
if (cr.getCount() > 14) { // <- if you are using cr.getString(14)
//to get "Success" string, then you should
//check for that too
if (!checkSuccess(cr) )
everythingGood = false; }
}else {
//not enough columns received.. assumed login fail.
//do your failure workflow
everythingGood = false;
}
} while(cr.moveToNext() && everythingGood);
if(everythingGood){
//second loop (no need to check any more, just spawn the activities)
cr.moveToFirst();
do{
createActivities(cr);
}while(cr.moveToNext();
}else {
handleFailure();
}
}
I moved your check condition out to another function to make it easier to see the while loop
private boolean checkSuccess(Cursor cr){
return cr.getString(5).equals(username)) && cr.getString(6).equals(password)
&& cr.getString(14).equals("success");
}
you can use break; or you can use a boolean flag variable , at first keep it true, then enter the conditions if it is true and once entered make the flag variable false in side that condition.
Boolean isValid;
isValid = true;
while(cr.moveToNext())
{
if (cr.getCount() > 0)
{
if ((cr.getString(5).equals(username))
&& cr.getString(6).equals(password) && cr.getString(14).equals("success"))
{
if (isValid)
{
isValid=false;
String un = cr.getString(2);
}
}
else { .......... }
}
}
How can I modify this code so that it only prints out the invalid messages once it has iterated through the whole list first. My current problem is that it is printing out these messages every time there isn't a match. Which is not what I intend it to do.
public void assignSchedule(Depot depotName) throws Exception {
String client, driver;
Boolean exit = false;
do {
System.out.printf("%-10s %-10s %10s %n", "Client", "Start Date", "End Date");
depotName.listWorkSchedulue();
System.out.print("Enter the client name for the schedule you wish to assign: ");
client = DepotSystem.input.nextLine();
for (WorkSchedule ws : depotName.getWorkSchedules())
{
if (client.equals(ws.getClient()))
{
System.out.printf("%n%20s%n", "Drivers");
depotName.listDrivers();
System.out.print("Which Driver do you want to assign this to: ");
driver = DepotSystem.input.nextLine();
for (Driver drivers : depotName.getDrivers())
{
if (driver.equals(drivers.userName) && !drivers.assigned)
{
System.out.printf("%nThe work schedule for client %s is now assigned to %s%n ", client,
driver);
depotName.getDriver(driver).setSchedule(depotName.getWorkSchedule(client));
drivers.setAssigned(true);
exit = true;
} else if ((!driver.equals(drivers.userName) && drivers.assigned)) {
System.out.printf("%nEither not a valid driver or Driver is already assigned a Job.%n");
}
}
} else if (!client.equals(ws.getClient())) {
System.out.printf("%nPlease enter a valid client.%n");
}
}
} while (!exit);
}
The current output of this if I enter a Incorrect name is as followed
Client Start Date End Date
Gary 2020-04-25 2020-04-27
Bob 2020-05-05 2020-05-06
Enter the client name for the schedule you wish to assign: f
Please enter a valid client.
Please enter a valid client.
This is how I would like for it to work when I enter a incorrect name.
Client Start Date End Date
Gary 2020-04-25 2020-04-27
Bob 2020-05-05 2020-05-06
Enter the client name for the schedule you wish to assign: f
Please enter a valid client.
At the top of the for loop you can do the following to determine if any of the work schedules contain the client entered. You can subsequently replace depotName.getWorkSchedules() with clientSchedules and remove the condition if (client.equals(ws.getClient())) since we know they're all schedules with the same client.
Please note that the question didn't contain a full SSCCE, a lot of the fundamental classes needed to compile were missing and so there may be unexpected compilation errors.
List<WorkSchedule> clientSchedules = depotName.getWorkSchedules().stream()
.filter(schedule -> client.equals(schedule.getClient()))
.collect(Collectors.toList());
if (clientSchedules.isEmpty()) {
System.out.printf("%nPlease enter a valid client.%n");
continue;
}
The message,Please enter a valid client should be printed outside the for loop. Do it as follows:
public void assignSchedule(Depot depotName) throws Exception {
String client, driver;
Boolean exit = false, validClient;
do {
System.out.printf("%-10s %-10s %10s %n", "Client", "Start Date", "End Date");
depotName.listWorkSchedulue();
System.out.print("Enter the client name for the schedule you wish to assign: ");
client = DepotSystem.input.nextLine();
for (WorkSchedule ws : depotName.getWorkSchedules()) {
if (client.equals(ws.getClient())) {
validClient = true;
System.out.printf("%n%20s%n", "Drivers");
depotName.listDrivers();
System.out.print("Which Driver do you want to assign this to: ");
driver = DepotSystem.input.nextLine();
for (Driver drivers : depotName.getDrivers()) {
if (driver.equals(drivers.userName) && !drivers.assigned) {
System.out.printf("%nThe work schedule for client %s is now assigned to %s%n ", client,
driver);
depotName.getDriver(driver).setSchedule(depotName.getWorkSchedule(client));
drivers.setAssigned(true);
exit = true;
} else if ((!driver.equals(drivers.userName) && drivers.assigned)) {
System.out.printf("%nEither not a valid driver or Driver is already assigned a Job.%n");
}
}
} else {
validClient = false;
}
}
if (!validClient) {
System.out.printf("%nPlease enter a valid client.%n");
}
} while (!exit);
}
Declare a boolean outside of loop and set it in else if condition and also check for this boolean in else if, something like
else if (condition && !booleanVariable) {
System.out.printf("%nPlease enter a valid client.%n");
booleanVariable = true;
}
So I'm having difficulties figuring out why this isn't working but basically what I'm trying to do is grab user information so when they click login they are able to login.
private boolean login() {
for (User user : users) {
if (user != null) {
System.out.println(users.size());
String tryUser = user.getUsername();
String tryPass = user.getPassword();
String passText = new String(
LoginPanel.passwordPf.getPassword());
if (LoginPanel.usernameTf.getText().equalsIgnoreCase(
tryUser)
&& passText.equals(tryPass)) {
return true;
} else {
return false;
}
}
}
return false;
}
I checked the array and all the users are stored properly but for some reason when I try to get the username and password it grabs it from the first item in the list.
You are always returning in the loop, so you will never check any user beyond the first one. You should change your check:
if (LoginPanel.usernameTf.getText().equalsIgnoreCase(tryUser) && passText.equals(tryPass)) {
return true;
}
// Do not return, check next user in list
// else {
// return false;
// }
Although it may seem intuitive to do the following:
} else {
return false;
}
You should use "continue" to run your for loop over the next element.
} else {
continue;
}
private void EnterbuttonActionPerformed(java.awt.event.ActionEvent evt) {
if (Usernamefield.getText().equalsIgnoreCase("User"));
if (Passwordfield.getText().equalsIgnoreCase("420"));
{
JOptionPane.showMessageDialog(null, "Welcome, User!");
}
else
{
JOptionPane.showMessageDialog(null, "Wrong Username/Password!");
}
It says that an else statement cannot work without an if, there are clearly 2 if statements however. I would like to create a simple log-in GUI in Java.
change
if (Usernamefield.getText().equalsIgnoreCase("User"));
if (Passwordfield.getText().equalsIgnoreCase("420"));
to
if (Usernamefield.getText().equalsIgnoreCase("User") &&
Passwordfield.getText().equalsIgnoreCase("420"))
{
JOptionPane.showMessageDialog(null, "Welcome, User!");
}
else
{
JOptionPane.showMessageDialog(null, "Wrong Username/Password!");
}
You want both conditions to be true in order to accept the user.
And don't put a ; at the end of an if condition, since that makes it an empty if statement that does nothing (that's the reason your else had no matching if).
Try the below code.
private void EnterbuttonActionPerformed(java.awt.event.ActionEvent evt) {
if (Usernamefield.getText().equalsIgnoreCase("User") && Passwordfield.getText().equalsIgnoreCase("420"))
{
JOptionPane.showMessageDialog(null, "Welcome, User!");
}
else
{
JOptionPane.showMessageDialog(null, "Wrong Username/Password!");
}
I have a java code in which there are multiple return statements in a single method. But for code cleaning purpose, I can have only one return statement per method. What can be done to overcome this.
Here is a method from my code:-
public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
// Kill any old sessions
//request.getSession().invalidate();
DynaValidatorForm dynaform = (DynaValidatorForm)form;
// validate the form
ActionErrors errors = form.validate(mapping, request);
if(!errors.isEmpty()) {
this.saveErrors(request, errors);
return mapping.getInputForward();
}
// first check if token is set
if(!isTokenValid(request, true)) {
String errmsg="There was a problem with your login. Please close your browser then reopen it and try again. Make sure to click the Login button only ONCE.";
request.setAttribute("errormessage", errmsg);
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
// check the form for input errors
String errmsg = checkInput(form);
if (errmsg != null) {
request.setAttribute("errormessage", errmsg);
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
// no input errors detected
String resumekey = null;
// check for valid login
ObjectFactory objFactory = ObjectFactory.getInstance();
DataAccessor dataAccessor = objFactory.getDataAccessor();
request.setCharacterEncoding("UTF-8");
String testcode = dynaform.getString("testcode").trim();
String studentname = dynaform.getString("yourname").trim();
String password = dynaform.getString("password").trim();
// 4/3/07 - passwords going forward are ALL lower case
if (!CaslsUtils.isEmpty(password)) {
password = password.toLowerCase();
}
try{
resumekey = new String(studentname.getBytes("ISO-8859-1"),"UTF-8");
} catch (Exception e) {
log_.error("Error converting item content data to UTF-8 encoding. ",e);
}
String hashWord = CaslsUtils.encryptString(password);
// Make sure this is short enough to fit in the db
if (hashWord.length() > ConstantLibrary.MAX_PASSWORD_LENGTH) {
hashWord = hashWord.substring(0, ConstantLibrary.MAX_PASSWORD_LENGTH);
}
Login login = dataAccessor.getLogin(testcode, hashWord, false);
if (login == null || !login.getUsertype().equals(Login.USERTYPE_SUBJECT)) {
request.setAttribute("errormessage", "Incorrect test code or password.");
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
// Check if the login has expired
if (login.getLoginexpires() != null && login.getLoginexpires().before(new Date())) {
request.setAttribute("errormessage", "Your login has expired.");
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
// Check if the password has expired
if (login.getPasswordexpires() != null && login.getPasswordexpires().before(new Date())) {
request.setAttribute("errormessage", "Your login password has expired.");
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
HttpSession session = request.getSession();
session.setAttribute(ConstantLibrary.SESSION_LOGIN, login);
session.setAttribute(ConstantLibrary.SESSION_STUDENTNAME, studentname);
List<Testtaker> testtakers = null;
try {
//invalidate the old session if the incoming user is already logged in.
synchronized(this){
invalidateExistingSessionOfCurrentUser(request, studentname, testcode);
testtakers = dataAccessor.getTesttakersByResumeKey(studentname, login);// Adding this code to call getTesttakersByResumeKey instead of getTesttakers to improve the performance of the application during student login
}
} catch (Exception e) {
log.error("Exception when calling getTesttakers");
CaslsUtils.outputLoggingData(log_, request);
throw e;
}
session = request.getSession();
if(testtakers!=null)
{
if(testtakers.size() == 0) {
// new student -> start fresh
log_.debug("starting a fresh test");
// if this is a demo test, skip the consent pages and dump them directly to the select test page
if (login.getTestengine().equals(Itemmaster.TESTENGINE_DEMO)) {
return mapping.findForward("continue-panel");
}
}
// send them to fill out the profile
// check for custom profiles
String[] surveynames = new String[4];
List<Logingroup> logingroups = dataAccessor.getLoginGroupsByLogin(login.getLoginid());
for(Logingroup logingroup : logingroups) {
Groupmaster group = logingroup.getGroupmaster();
log_.debug(String.format("group: {groupid: %d, grouptype: %s, groupname: %s}", new Object[] {group.getGroupid(), group.getGrouptype(), group.getName()}));
Set<Groupsurvey> surveys = group.getGroupsurveys();
if(surveys.size() > 0) {
// grab the first (and only) one
Groupsurvey survey = surveys.toArray(new Groupsurvey[0])[0];
if(group.getGrouptype().equalsIgnoreCase(Groupmaster.GROUPTYPE_CLASS)) {
surveynames[0] = survey.getSurveyname();
} else if (group.getGrouptype().equalsIgnoreCase(Groupmaster.GROUPTYPE_SCHOOL)){
surveynames[1] = survey.getSurveyname();
} else if (group.getGrouptype().equalsIgnoreCase(Groupmaster.GROUPTYPE_DISTRICT)){
surveynames[2] = survey.getSurveyname();
} else if (group.getGrouptype().equalsIgnoreCase(Groupmaster.GROUPTYPE_STATE)){
surveynames[3] = survey.getSurveyname();
}
}
}
// match the most grandular survey
for(int i=0; i < surveynames.length; ++i) {
if(surveynames[i] != null) {
saveToken(request);
return mapping.findForward("student-profile-"+surveynames[i]);
}
}
// no custom profile, send them to the default
saveToken(request);
return mapping.findForward("student-profile");
}
// get the set of availible panels
Set<Panel> availiblePanels = dataAccessor.getAvailiblePanels(login, studentname);
if(availiblePanels.size() == 0) {
// no panels availible. send to all done!
log_.debug(String.format("No panels availible for Login:%s with resumekey:%s", login.toString(), studentname));
session.setAttribute("logoutpage", true);
resetToken(request);
return mapping.findForward("continue-alldone");
}
//Eventum #427 - Prevent test takers from retaking a finished test.
TestSubjectResult testSubjecResult=dataAccessor.getTestSubjectResult(login, resumekey);
if(testSubjecResult != null){
if(testSubjecResult.getRdscore() != null && testSubjecResult.getWrscore() != null && testSubjecResult.getLsscore() != null && testSubjecResult.getOlscore() != null){
if(testSubjecResult.getRdscore().getFinishtime() != null && testSubjecResult.getWrscore().getFinishtime() != null && testSubjecResult.getLsscore().getFinishtime() != null && testSubjecResult.getOlscore().getFinishtime() != null){
log_.debug(String.format("Already completed all the Skill Tests.", login.toString(), studentname));
session.setAttribute("logoutpage", true);
resetToken(request);
return mapping.findForward("continue-alldone");
}
}
}
// get a list of resumeable testtakers
List<Testtaker> resumeableTesttakers = new ArrayList<Testtaker>();
for(Testtaker testtaker : testtakers) {
if(testtaker.getPhase().equals(ConstantLibrary.PHASE_GOODBYE)) {
// testtaker is done with test. skip.
continue;
}
if(testtaker.getCurrentpanelid() == null) {
// testtaker is the profile testtaker
continue;
}
resumeableTesttakers.add(testtaker);
}
// sort them from least recent to latest
Collections.sort(resumeableTesttakers, new Comparator<Testtaker>() {
#Override
public int compare(Testtaker o1, Testtaker o2) {
// TODO Auto-generated method stub
//return 0;
return new CompareToBuilder()
.append(o1.getLasttouched(), o2.getLasttouched())
.toComparison();
}
});
if(resumeableTesttakers.size() == 0 && availiblePanels.size() > 0) {
// nobody is resumeable but there are panels left to take
// send them to the panel choice
// TODO: This is probably a misuse of Struts.
log_.info("No resumeable testtakers. Sending to panel select");
saveToken(request);
ActionForward myForward = (new ActionForward("/do/capstartpanel?capStartPanelAction=retest&lasttesttakerid="
+ testtakers.get(0).getTesttakerid(), true));
return myForward;// mapping.findForward(ConstantLibrary.FWD_CONTINUE + "-panel");
} else {
// grab the one most recently created and take their test
log_.info(String.format("Resuming with choice of %d testtakers", resumeableTesttakers.size()));
// we're forwarding to resume at this point, so we should do the some of the initialization
// that would have happened if we were still using getTesttaker() instead of getTesttakers() above.
session.setAttribute(ConstantLibrary.SESSION_LOGIN, login);
session.setAttribute(ConstantLibrary.SESSION_TESTTAKER, resumeableTesttakers.get(resumeableTesttakers.size()-1));
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_RESUME);
}
}
It's not a worth changing multiple returns to a single return statement per method. Actually, that will unnecessarily increase the burden of storing the result in a local variable and then making the return finally,
ActionForward result = null;
//scenario 1
result = ...
//scenario 2
result = ...
//scenario 3
result = ...
//finally
return result;
Hope this helps, but, it doesn't make much sense to me
As pointed out by others, having a single return statement does not necessarily make your code cleaner. However, in this case splitting up the method in smaller pieces probably makes the code more readable.
For example, this part:
// first check if token is set
if(!isTokenValid(request, true)) {
String errmsg="There was a problem with your login. Please close your browser then reopen it and try again. Make sure to click the Login button only ONCE.";
request.setAttribute("errormessage", errmsg);
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
// check the form for input errors
String errmsg = checkInput(form);
if (errmsg != null) {
request.setAttribute("errormessage", errmsg);
saveToken(request);
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
could be replaced by introducing two methods and using those to write:
If(tokenNotSet() || formHasErrors()){
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
}
By doing this on multiple places the structure of the algorithm becomes more clear, possibly giving you more insight in how this code could be refactored to adhere to your coding guidelines.
I would set a an action forward variable at the start of the method.
ActionForward actionForwardToReturn = null;
Then replace each of these two lines
return mapping.getInputForward();
return mapping.findForward(ConstantLibrary.FWD_CONTINUE);
with these two lines :
actionForwardToReturn = mapping.getInputForward()
actionForwardToReturn = mapping.findForward(ConstantLibrary.FWD_CONTINUE);
finally return the variable.
return actionForwardToReturn;
This shouldn't be too difficult :)
On a side note... (actually the orginal answer to the question) :
Multiple return statements can make it hard to debug code.
I personally would have just one action object that you return at the end of the method. The benefit of this, is that i can put a break point right on the return statement and look at exactly what that object is.
Any logging or other cross cutting concern I would want to add later, would only have to be done at one point. Otherwise I would have to add a log statement to every line where you are returning.
The complexity added to a method in an attempt to remove multiple return statements is many a times not worth it, especially in a method such as yours.There's nothing wrong with using them in this case.
Like user3580294 there's nothing wrong with multiple return statements. However you could combine the last two if statements since they are essentially returning the same thing.
Use #Octopus 's method if you absolutely have to have one return statement