2014-10-29 28 views
0

我想在用户按下输入按钮时退出do while循环,但无法退出do while循环。当字符串为空或无效时退出do while循环(Java)

该程序要求两个单词(pal1和pal2),并显示它们中哪一个是最短的一个,并显示它显示了多少个字符。如果单词长度相同,则按字母顺序排列。它还显示了循环中要求的单词中哪一个是最短的单词,并且当字符串为空或空时应该离开循环。

import java.util.Locale; 
import java.util.Scanner; 

/** 
* The program asks for two words (pal1 and pal2) and shows which of them is the shortest  one and show shows how many characters it has. If the words have the same length it orders  them alphabetically. It also shows which of the words asked in the loop is the shortest one and should leave the loop when the string is void or null. 
* 
* @author (your name) 
* @version (a version number or a date) 
*/ 
public class P5 
{ 
public static void main (String[] args){ 
    Scanner tec = new Scanner (System.in).useLocale(Locale.US); 
    String pal1, pal2, palMasCorta="", palMasCortaAux; 
    int longitudpal1, longitudpal2, longitudPalMasCorta=2000000000, longitudPalMasCortaAux; 

    do{ 
     System.out.println("Escribe una palabra"); 
     pal1 = tec.next(); 
     longitudpal1= pal1.length(); 
     System.out.println("Escribe otra palabra"); 
     pal2 = tec.next(); 
     longitudpal2=pal2.length(); 
     palMasCortaAux=palMasCorta; 
     longitudPalMasCortaAux=longitudPalMasCorta; 
     if (longitudPalMasCorta>longitudPalMasCortaAux) 
      palMasCorta=palMasCortaAux; 
     if (longitudpal1>longitudpal2){ 
      palMasCorta = pal2; 
      longitudPalMasCorta = longitudpal2; 
      System.out.println("El número de caracteres de "+pal2+ " es "+longitudpal2); 
     } 
     else 
      if (longitudpal1 == longitudpal2){ 

       if (pal1.compareTo(pal2) < 0){ 
        System.out.println("El número de caracteres de "+pal1+ " es "+longitudpal1); 
        palMasCorta=pal1; 
       } 
        else{ 
         if (pal1.compareTo(pal2) > 0){ 
          System.out.println("El número de caracteres de "+pal2+ " es "+longitudpal2); 
          palMasCorta=pal2; 
         } 
         else{ 
          System.out.println("Has escrito la misma palabra, "+pal1+", y su longitud es " +longitudpal1); 
          palMasCorta=pal1; 
         } 
       } 
     } 
      else{ 
       palMasCorta = pal1; 
       longitudPalMasCorta = longitudpal1; 
       System.out.println("El número de caracteres de "+pal1+ " es "+longitudpal1); 
      } 

      }while (pal1.length() == 0 || pal2.length() == 0); 
    System.out.println("La palabra más corta es "+palMasCorta); 
} 

}

回答

0

你永远设置PAL1或PAL2为null。你也没有检查null。

pal1 = null; 
pal2 = null; 

while(pal1 != null && pal2 != null) 

这样的事情就是你想要的。当你想离开循环时,只需将pal1或pal2设置为空。此外,我不认为有必要在这里的循环,除非用户输入多个单词和您正在检查多对的话......

0

你可以在启动时一样写一则消息:

“进入[ q]停止 “或什么liek这

而且在程序comapre带q输入的文本

您可以

字符串PAL1 = reformualte所有”“;

String pal2 =“”;

而(pal1.equalsIgnoreCase( “Q”)==假& & pal2.equalsIgnoreCase( “Q”)== FALSE){

///做一切都在这里等

}

........ 只是IDEEA

,或者你可以做你的,直到pal1.isEmpty()或pal2.isEmpty()

0

您可以添加其他如果说声明:

if(pal1==null && pal2==null){ 
    break; 
} 
0

而不是使用do...while的,我会使用一个无限while循环,并使用break打破它当一个关键词为空或空(在java中,void表示不是空字符串)。

while(true) { 

    System.out.println("Escribe una palabra"); 
    pal1 = tec.next(); 
    if (pal1 == null || pal1.equals("")) { 
     break; 
    } 

    System.out.println("Escribe otra palabra"); 
    pal2 = tec.next(); 
    if (pal2 == null || pal2.equals("")) { 
     break; 
    } 

    // Calculate the length only after you know the strings are not null or empty! 

    // The rest of your code... 
} 

条件在while循环不好呢,因为它没有调用方法之前检查空。如果字符串为空,则调用方法将导致引发NullPointerException

此外,如其他答案建议,请使用BufferedReader。如果用户恰好进入档案结尾字符(CTRL - dCTRL - ž),扫描仪将抛出getNext()异常,而BufferedReader将返回null,你是现在正在检查。

0

不要使用扫描仪,使用BufferedReader读取StdIn - 这里不需要扫描仪。

Scanner vs. BufferedReader

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
String s; 
while ((s = in.readLine()) != null && s.length() != 0){ 
    System.out.println(s); 
} 

没有任何输入时,这将退出循环。 (只需回车键)

0

更改您的下一个()调用nextLine()

... 
pal1 = tec.nextLine(); 
longitudpal1 = pal1.length(); 
System.out.println("Escribe otra palabra"); 
pal2 = tec.nextLine(); 
... 

,然后更改测试的同时寻找空字符串:

} while (!pal1.isEmpty() && !pal2.isEmpty());