Search code examples
javaloopswhile-loopnested-loopsdo-while

nested while loop inside do-while loop giving the wrong output


This program is supposed to output the corresponding numbers to the string that the user have inputted and supposed to allow the user to keep on entering strings till they entered an empty string. The loop part I have managed to get and the first output to the first input is correct but the problem I have is that from the second input onward, the program only shows the first output. Something like this:

Enter your telephone number in letters: call bome (input)

Your telephone number is: 225-52663 (output)

Enter your telephone number in letters: get loan

Your telephone number is: 225-52663

if there's anyone that can help me solve this problem, I will be very thankful!

 String teleLetter,teleNum=""; 
        int i=0;

do
{       
     System.out.println("Enter your telephone number in letters: "); //ask user 
     to input telephone number in letter
     teleLetter = keyboard.nextLine();
        char teleChar; 
       while(i<teleLetter.length()) //condition to read till end of teleletter then stop program
       { 
                 teleChar = teleLetter.charAt(i); //take all the char individually from string



            switch(teleChar) //ensure that each letter correspond to a number
            {
                //to ensure lowercase and uppercase
                 case 'a':  
                 case 'A':
                 case 'b':
                 case 'B':
                 case 'c':
                 case 'C':
                        teleNum = teleNum+2; //assign telenum
                         break;
                case 'd':
                case 'D':
                case 'e':
                case 'E':
                case 'f':
                case 'F':
                         teleNum=teleNum+3;
                         break;
                case 'g':
                case 'G':
                case 'h':
                case 'H':
                case 'i':
                case 'I':
                        teleNum=teleNum+4;
                        break;
                case 'j':
                case 'J':
                case 'k':
                case 'K':
                case 'l':
                case 'L':
                        teleNum=teleNum+5;
                        break;
                case 'm':
                case 'M':
                case 'n':
                case 'N':
                case 'o':
                case 'O':
                        teleNum=teleNum+6;
                        break;
                case 'p':
                case 'P':
                case 'q':
                case 'Q':
                case 'r':
                case 'R':
                case 's':
                case 'S':
                        teleNum=teleNum+7;
                        break;
                case 't':
                case 'T':
                case 'u':
                case 'U':
                case 'v':
                case 'V':
                        teleNum=teleNum+8;
                        break;
                case 'w':
                case 'W':
                case 'x':
                case 'X':
                case 'y':
                case 'Y':
                case 'z':
                case 'Z':
                        teleNum=teleNum+9;
                        break;
                case ' ':
                        break;
                default: 
                    System.out.println("Invalid digit!");
                    break;


            }            



            if(i==2) //at the second loop 
            {
                teleNum=teleNum+'-';
            }
             i++;

       }


      if(teleLetter.length() == 0) //if the input is null, print invalid message
       {
           System.out.println("Invalid as nothing is entered!");
       }
       else
       {

       System.out.println("Your telephone number is: "+teleNum); // output telephone number to user
       }



}while(!teleLetter.isEmpty());

    }

    }

Solution

  • You do not reset 'i', that causes your second while loop to fail directly as 'i' is already >= 'teleLetters.length()'. Try it this way:

    if(teleLetter.length() == 0) //if the input is null, print invalid message
    {
       System.out.println("Invalid as nothing is entered!");
    }
    else
    {
       System.out.println("Your telephone number is: "+teleNum); // output telephone number to user
       i = 0;
    }