gpt4 book ai didi

java - 使用 split() 并检查第二个元素

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:49 24 4
gpt4 key购买 nike

我有一个二叉搜索树的代码,它将接受用户输入,例如insert 3 它将调用 3 上的插入函数。当我尝试调用不需要参数的函数(例如我的遍历函数)时,除非用户输入是 traverse 0,否则它将给出越界错误。我想仅使用 traverse 来调用它,这是我的代码:

 public static void main(String[] args) 
{
int quit = 0;
BinarySearchTree bst = new BinarySearchTree();
Scanner in = new Scanner(System.in);

//Accept user input and call funtions
while(quit != 1)
{
System.out.print("\nEnter the instructions to perform (type quit when done):");
String input = in.nextLine();
String[] instruction = input.split(" ");
String function = instruction[0].toLowerCase();
String parameter = instruction[1];
//What to do with user input
if(function.equals("insert"))// for insert
{
int key = Integer.parseInt(parameter);
bst.insert(key);
System.out.println(parameter + " was inserted successfully!");
}
else if(function.equals("delete"))// for delete
{
int key = Integer.parseInt(parameter);
if(bst.delete(key) == true)
System.out.println(parameter + " was deleted successfully!");
else
System.out.println(parameter + " does not exist.");
bst.delete(key);
}
else if(function.equals("search"))// for search
{
int key = Integer.parseInt(parameter);
if(bst.search(key) == true)
System.out.println(parameter + " was found!");
else
System.out.println(parameter + " not found.");
bst.search(key);
}
else if(function.equals("traverse"))// for traverse
{
bst.traverse(BinarySearchTree.root);
}
}

}//end main

最佳答案

当您尝试将指令[1]分配给参数时,就会出现问题。如果输入字符串中没有空格字符,则 split 方法将返回长度为 1 的数组,并且当您尝试访问第二个元素时,您将收到超出范围的异常。

解决办法是:

if (input.equals("traverse")) {
...
} else {
String[] instructions = input.split(" ");
assert instruction.length == 2;
String function = instruction[0].toLowerCase();
int key = Integer.parseInt(instruction[1]);
...
}

有更好的方法来建模命令。理想情况下,您会使用 command pattern而不是 if 语句。但如果您不想遇到这个麻烦,您至少应该考虑使用模式来使解析更加健壮。

Pattern commandPattern = Pattern.compile("(traverse|search|delete|insert) *(\\d*)");
Matcher matcher = commandPattern.match(in.nextLine());
if (!matcher.matches()) {
System.out.println("Illegal command. Try again.");
matcher = commandPattern.match(in.nextLine());
}
switch (matcher.group(1).toLowerCase()) {
case "traverse":
bst.traverse(root);
break;
case "delete":
int deleteKey = Integer.parseInt(matcher.group(2));
if (bst.delete(deleteKey)) {
...

关于java - 使用 split() 并检查第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com