Попробуй поймать пока l oop Java - PullRequest
0 голосов
/ 28 марта 2020

Привет, ребята, так что, очевидно, я пытался использовать try-catch некоторое время l oop и использовать поле stati c. Моя ситуация заключается в том, что я создаю сканер, чтобы получить пользовательский ввод, и использую метод разделения строк, чтобы попытаться разбить строку на массив из 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);

    }

}

Я думаю, что проблема в глобальном поле

Ответы [ 3 ]

0 голосов
/ 28 марта 2020

enter image description here

Это снимок экрана, когда l oop повторяется во второй раз, str2 = SpaceSpliter 1 ; это строка, где вы получаете исключение, и в это время str2 имеет значение предыдущих итераций. Вот почему ваш результат - объединение значения str1 текущей итерации и значения str2 предыдущей итерации.

0 голосов
/ 28 марта 2020

Просто объявите свои строковые переменные в do-while l oop.

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

}

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

}
0 голосов
/ 28 марта 2020

нет второго элемента, который равен нулю, когда вы печатаете только одну строку, второго элемента просто нет, этот массив будет иметь размер 1

, что вы должны сделать, это

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

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

Это будет работать для любой длины строки, и вам не нужно использовать попытку try

...