2014-10-29 30 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());