Problem with If Statement

I am trying to plug the following If-else statement int the code below to replace the case statement that is commented out.  Can anyone catch what I am
doing wrong?

Thanks!

Rocky

import java.io.*;

/**************************************************************
 *Program to store species records in a file and/or display all
 *the records in a file on a terminal screen.
 *************************************************************/
public class FileServer
{
    public static void main(String[] args)
    {
        SpeciesFiler filer = new SpeciesFiler();
        System.out.print("This program can build and");
        System.out.println(" display files of species records.");

        char ans;
        boolean done = false;
        do
        {
            System.out.print("Enter choice: ");
            System.out.println(
                   "B to build a file. V to view a file. Q to quit.");
            ans = SavitchIn.readLineNonwhiteChar();
            //switch (ans)
   switch (a)

     if ( a == 'B' || a == 'b' )
       filer.buildAFile();
    else
        if ( a == 'V' || a == 'v' )
              filer.viewAFile();
         else
            if ( a == 'Q' || a == 'q' )
               done = true;
            else
               System.out.println("That is not a valid choice.");


     }


           //{
           //     case 'B':
           //     case 'b':
           //         filer.buildAFile();
           //         break;
           //     case 'V':
           //     case 'v':
           //         filer.viewAFile();
           //         break;
           //     case 'Q':
           //     case 'q':
           //         done = true;
           //         break;
           //     default:
           //         System.out.println("That is not a valid choice.");
           //         break;
           // }
       }while ( ! done);
       System.out.println("File service closing down.");
    }
}

rockyisinAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

CEHJCommented:
You're mixing them - do one or the other.
0
tinchosCommented:
Hi rockyisin,

Try with


if( a.equals( 'b' ) || a.equals( 'B' ) )
{
    filer.buildAFile();
}
else if( a.equals( 'v' ) || a.equals( 'V' ) )
{
    filer.viewAFile();
}
else if( a.equals( 'q' ) || a.equals( 'Q' ) )
{
    done = true;
}
else
{
    System.out.println("That is not a valid choice.");
}


Cheers!

Tincho
0
CEHJCommented:
That's the same as is already there. Why not use a switch statement?

            char choice = (char)System.in.read(); // or whatever you Savitch thing is for char
            switch(c | 0x20) {
                  case 'b':
                        filer.buildAFile();
                        break;
                  case 'v':
                        filer.viewAFile();
                        break;
                  case 'd':
                        done = true;
                        break;
                  default:
                        System.out.println("That is not a valid choice.");
            }


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Become a Microsoft Certified Solutions Expert

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

CEHJCommented:
Oops,

>>switch(c | 0x20) {

should be


switch(choice | 0x20) {

0
Mick BarryJava DeveloperCommented:
Get rid of the switch statement
Would also suggest adding braces around the block you want to execute. Not necessary in your case but makes code more readable and limits the chance of error later on.

Perhaps also convert a to uppercase to simplify the if tests:

a = Character.toUpperCase(a);
if ( a == 'B' )
{
    filer.buildAFile();
}
else if ( a == 'V' )
{
    filer.viewAFile();
}
else if ( a == 'Q' )
{
    done = true;
}
else
{
    System.out.println("That is not a valid choice.");
}
0
JakobACommented:
your if statement is fine, but you have forgotten to remove
     switch(a)
at the start, and
     }
at the end of the swith statement.  They are part of the switch statement and should go with it.
0
Mick BarryJava DeveloperCommented:
Not sure if the use of a instead of ans in your code is a typo or not. If it's not then you'll also need to declare a.

char a = Character.toUpperCase(ans);


0
CEHJCommented:
>>
your if statement is fine, but you have forgotten to remove
     switch(a)
>>

which is what I said in the first place ;-)
0
CEHJCommented:
If you do want to use the switch statement, this is better in the code i posted, as it make no assumptions about character encoding:

>>switch(Character.toLowerCase(choice)) {
0
Mick BarryJava DeveloperCommented:
> which is what I said in the first place ;-)

vaguely :)

>>switch(Character.toLowerCase(choice)) {

I already suggested that :)
And the discussion is about the if statement.
0
CEHJCommented:
Well I'm going for rockyisin's original impulse (which I think is better) to use the switch. I'm guessing one of the reasons he abandoned it was

>>
           //     case 'B':
           //     case 'b':
           //         filer.buildAFile();
           //         break;
>>

that he didn't want to cope with each character case separately. No he can see that he doesn't need to do so.


0
Mick BarryJava DeveloperCommented:
> that he didn't want to cope with each character case separately.

And why would switching to an if statement improve the situation?
In fact it makes it worse, so I doubt thats the reason for the switch.
0
CEHJCommented:
>>And why would switching to an if statement improve the situation?

Because the stacked characters militate against the comparative elegance of the switch statement and they look better in the if than the switch.
0
Mick BarryJava DeveloperCommented:
Sorry but I don't agree.
0
sciuriwareCommented:
rockisin, if you want to put some code out of service (temporarily)
then, do the following:

      if(false)  // Reason why .....
      {
    ......... your code .....
      }            // end of code out of service.

Much easier and no chance that you mix up comments of different kind.
;JOOP!
0
tinchosCommented:
Hi Venabili

I guess that an answer has been presented, in fact several ways of doing the same thing.
Asker should choose which one he considers that helped him the most.

Tincho
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.