繁体   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