【问题标题】:Try catch while loop Java尝试 catch while 循环 Java
【发布时间】:2020-03-28 05:08:51
【问题描述】:

大家好,显然我尝试在 while 循环中使用 try-catch 并使用静态字段。我的情况是我创建了一个扫描仪来获取用户输入并使用字符串拆分方法尝试将字符串拆分为只有 2 个空格(“”)的数组。不知何故,当用户只输入字符串时,我使用了 try-catch,第二个 2 数组将为空,它将是 ArrayIndexOutOfBoundsException。显然,当我第一次使用这个 try-catch 时,当我输入 2 个由空格分隔的字符串时,它会打印出两个数组,但是当我只输入 1 个字符串时,它会在下一行中以某种方式打印出来,这意味着第二个字符串数组将为 null 它会打印出来第二个字符串数组,显然第二个字符串数组是我之前输入的字符串。 我想要的是当我键入只想要字符串数组时,第二个字符串数组将显示为空。 如果您尝试代码会更好,谢谢。

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

    }

}

我认为问题是因为全局字段

【问题讨论】:

  • 你想要什么不清楚。请检查您的问题并清楚说明。

标签: java while-loop try-catch field


【解决方案1】:

只需在 do-while 循环中声明您的字符串变量。

编辑 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);

}

【讨论】:

  • 但是catch部分会出错,因为它不是全局变量
  • 这意味着我不能在 catch 部分中使用 str 1 和 str 2 变量
  • 在 'try' 块之外,但在 'do' 块内声明它们
  • 谢谢你,但我仍然有一个问题,即使我在未输入 str 时尝试了你编辑的代码,它也不为空,我认为它是 str2=""。因为我有一个 if 语句,它说如果 str2 为空,则执行此代码,但显然它没有执行,所以这意味着由于某种原因 str 不会为空
  • 如果你想让str2为'null',那么只声明String变量,不要初始化它们。请参阅我编辑的答案。
【解决方案2】:

当你只输入一个字符串时,没有第二个元素为空,只有没有第二个元素,该数组的大小为 1

你应该做的是

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

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

它适用于任何长度的字符串,你不需要使用任何 try catch

【讨论】:

    【解决方案3】:

    这是循环第二次迭代时的截图,str2 = SpaceSpliter1;是您获得异常的行,当时 str2 具有先前的迭代值。这就是为什么你的结果是当前迭代的 str1 值和前一次迭代的 str2 值的串联。

    【讨论】:

    • 感谢您的评论。所以问题是,如果我输入 1 个字符串值,这将是一个错误,并将转到打印出 str 1 的 catch 部分,而 str 2 将为空。但是,此操作出现在 str 数组 1 和 str 数组 2 被填充的第二次迭代中,我将获得 str 数组 2 的值,这是我不想要的。有没有你帮助解决这个问题谢谢。
    • 在循环中声明 str1 和 str2 会有所帮助,如果它不打扰您的话。字符串 str1, str2 = null;在循环本身。在 try-catch 块之前。
    • 谢谢你,但我仍然有一个问题,即使我在未输入 str 时尝试了你编辑的代码,它也不为空,我认为它是 str2=""。因为我有一个 if 语句,它说如果 str2 为空,则执行此代码,但显然它没有执行,所以这意味着由于某种原因 str 不会为空
    • 正如我在之前的评论中提到的那样 String str1, str2 = null;正如@rajan_saini.98 所说,会帮助你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2016-08-28
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多