簡體   English   中英

當字符串為null或void時退出do while循環(Java)

[英]Exiting a do while loop when a string is null or void (Java)

我想在用戶按下Enter鍵時退出do while循環,但是我無法退出do while循環。

該程序要求輸入兩個單詞(pal1和pal2),並顯示其中哪個是最短的單詞,並顯示其具有多少個字符。 如果單詞的長度相同,則按字母順序排序。 它還顯示了循環中詢問的哪個詞中最短的一個,當字符串為空或為null時應退出循環。

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

}

您永遠不會將pal1或pal2設置為null。 另外,您不檢查null。

pal1 = null;
pal2 = null;

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

這樣的東西就是您想要的。 要退出循環,只需將pal1或pal2設置為null。 另外,除非用戶輸入多個單詞並且您正在檢查多個單詞對,否則我認為這里不需要循環...

您可以在啟動時寫一條消息,例如:

“輸入[q]停止”或類似的內容

並在程序中用q來比較輸入的文本

您可以使用

字符串pal1 =“”;

字符串pal2 =“”;

而(pal1.equalsIgnoreCase(“ q”)==否&& pal2.equalsIgnoreCase(“ q”)==否){

///在這里做所有等等

}

........只是一個想法

或者您可以做到pal1.isEmpty()或pal2.isEmpty()

您可以添加另一個if語句,說明:

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

而不是使用do...while ,我將使用無限的while循環,並在其中一個單詞為null或為空時使用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循環中的條件都不好,因為在調用方法之前它沒有檢查null。 如果字符串為null,則調用方法將引發NullPointerException

另外,作為建議的其他答案,請使用BufferedReader 如果用戶碰巧輸入了文件結尾字符( ctrl - Dctrl - Z ),則掃描程序將在getNext()上引發異常,而BufferedReader將返回null,您現在正在檢查該錯誤。

不要使用掃描儀,使用BufferedReader來讀取StdIn-您在這里不需要掃描儀。

掃描儀與BufferedReader

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

不輸入任何內容時,將退出循環。 (只需按Enter鍵)

將您的next()調用更改為nextLine()

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

然后更改while測試以查找空字符串:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM