我正在开始一个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")) {
答案 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()用于输入多个单词。