无限循环混乱中的Java Split方法

时间:2018-12-15 16:31:30

标签: java loops exception split

我正在开始一个Java项目,在该项目中,用户进入宠物店,可以给宠物,可以看到所有宠物的列表,可以收养一只宠物,也可以退出商店。由于在一个命令输入中需要多条信息,因此用户给出的每个命令都用空格分开。我认为这会创建一个字符串数组,其中输入中的每个单词都是一个单独的元素。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View v= inflater.inflate(R.layout.tab_fragment_2, container, false);

    frecuencia = (EditText) v.findViewById(R.id.frecuencia);
    cal3el = (Button) v.findViewById(R.id.calcular3);
    ...
}

但是,当我运行代码并键入多个单词(用空格分隔)时,它可以测试元素0是否为某个命令并遵循该条件(即,如果第一个单词为“ give ,“”列表“等,它将沿着该路径运行,然后循环返回并重新开始,直到用户说“再见”),但是,例如,如果要打印出数组中的第二个单词索引1,键入作为输入,它给我错误:线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:Main.main(Main.java:30)处为1。我发现的一个奇怪的事情是,如果我通过再次打印第一个单词索引0来绕过此错误,然后输入多个单词,它将把输入中的每个元素都视为元素0,并循环遍历循环次数输入的给定元素/输入的单词。我很困惑...

例如1

import java.util.*;

public class Main {

static Scanner s = new Scanner(System.in);

public static void main(String[] args) {

    while(true) {

        System.out.println("Welcome to James' Pet Shop.");
        System.out.println("Commands:\n give [type (Str)] [name (Str)] [age (in months, int)]\n list\n adopt [type (Str)] [name (Str)] [age (in months, int)]");

        String input = s.next();
        String[] inputs = input.split(" ");

        if (inputs[0].equals("give")) {



        } else if (inputs[0].equals("list")) {



        } else if (inputs[0].equals("adopt")) {

        } else if (inputs[0].equals("bye")) {

            System.out.println("Thank you for stopping bye!");
            break;

        } else {

            System.out.println("Error: please enter an appropriate command to continue");

        }

    }

}

public static void list() {

}

public static void adopt() {

}

}

例如2

    String input = s.next();
    String[] inputs = input.split(" ");

    if (inputs[0].equals("give")) {

            //if you type give and another word
            //instead of printing out the latter, it gives an error
            System.out.println(input[1]);

    } else if (inputs[0].equals("list")) {

1 个答案:

答案 0 :(得分:0)

这是因为您正在使用函数s.next();在这里,它仅在遇到空格之前返回单词。因此,仅输入您的第一个命令。

为了解决此问题,请使用以下代码:-

System.out.println("Commands:\n give [type (Str)] [name (Str)] [age (in months, int)]\n list\n adopt [type (Str)] [name (Str)] [age (in months, int)]"); 
String[] inputs = sc.nextLine().split(" ");

这将起作用。请记住,next()用于输入一个单词,而nextLine()用于输入多个单词。