簡體   English   中英

嘗試 catch while 循環 Java

[英]Try catch while loop Java

大家好,顯然我嘗試在 while 循環中使用 try-catch 並使用靜態字段。 我的情況是我創建了一個掃描儀來獲取用戶輸入並使用 String split 方法嘗試將字符串拆分為 2 個空格(“”)的數組。 不知何故,當用戶輸入字符串時,我使用了 try-catch,第二個 2 數組將為空,它將是 ArrayIndexOutOfBoundsException。 顯然,當我首先使用這個 try-catch 時,當我輸入 2 個由空格分隔的字符串時,它會打印出兩個數組,但不知何故在下一行中,當我只鍵入 1 個字符串時,這意味着第二個字符串數組將為空它打印出來第二個字符串數組,顯然第二個字符串數組是我之前輸入的字符串。 我想要的是當我只輸入想要字符串數組時,第二個字符串數組將顯示為空。 如果您嘗試代碼,它會更好,謝謝。

import java.util.Scanner;

public class FinchTest {

    static String str1;
    static String str2;

    public static void main(String[] args) {
    do {
        try {
            Scanner scan = new Scanner(System.in);
            String userInput= scan.nextLine();

            String[] SpaceSpliter = userInput.split(" ");
            str1 = SpaceSpliter[0];
            str2 = SpaceSpliter[1];
            System.out.println(str1+str2);

        } catch ( java.lang.ArrayIndexOutOfBoundsException e) {
            if(str2==null) {
                System.out.println(str1+str2);
            }
            else {
                System.out.println(str1+str2);
            }
        }


    }while(true);

    }

}

我認為問題是因為全球領域

當您只輸入一個字符串時,沒有第二個元素為空,只有沒有第二個元素,該數組的大小為 1

你應該做的是

  // follow naming conventions , don't name is SpaceSpilter 

    for(String s : spaceSpliter)
       System.out.print(s + " ");

它適用於任何長度的 string ,並且您不需要使用任何 try catch

在此處輸入圖片說明

這是循環第二次迭代時的截圖, str2 = SpaceSpliter 1 是出現異常的那一行,此時 str2 具有先前的迭代值。 這就是為什么您的結果是當前迭代的 str1 值和前一次迭代的 str2 值的串聯。

只需在do-while循環中聲明您的 String 變量。

編輯 1:

public static void main(String[] args) {
do {
    String str1 = new String();
    String str2 = new String();

    try {
        Scanner scan = new Scanner(System.in);
        String userInput= scan.nextLine();

        String[] SpaceSpliter = userInput.split(" ");
        str1 = SpaceSpliter[0];
        str2 = SpaceSpliter[1];
        System.out.println(str1+str2);

    } catch ( java.lang.ArrayIndexOutOfBoundsException e) {
        if(str2==null) {
            System.out.println(str1+str2);
        }
        else {
            System.out.println(str1+str2);
        }
    }


}while(true);

}

編輯2:

public static void main(String[] args) {
do {
    String str1 = null;
    String str2 = null;

    try {
        Scanner scan = new Scanner(System.in);
        String userInput= scan.nextLine();

        String[] SpaceSpliter = userInput.split(" ");
        str1 = SpaceSpliter[0];
        str2 = SpaceSpliter[1];
        System.out.println(str1+str2);

    } catch ( java.lang.ArrayIndexOutOfBoundsException e) {
        if(str2==null) {
            System.out.println(str1+str2);
        }
        else {
            System.out.println(str1+str2);
        }
    }


}while(true);

}

暫無
暫無

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

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