在 do-while 循环中嵌套 while 循环给出错误的输出

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

这个程序应该将相应的数字输出到用户输入的字符串,并允许用户继续输入字符串,直到他们输入一个空字符串。我设法获得的循环部分和第一个输入的第一个输出是正确的,但我遇到的问题是从第二个输入开始,程序只显示第一个输出。像这样:

用字母输入您的电话号码:call bome (input)

您的电话是:225-52663(输出)

请用字母输入您的电话号码:获得贷款

您的电话是:225-52663

如果有谁能帮我解决这个问题,我将不胜感激!

 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());

    }

    }

您没有重置 'i',这会导致您的第二个 while 循环直接失败,因为 'i' 已经 >= 'teleLetters.length()'。试试这样:

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;
}