[英]How to prevent my program from crashing due to a user's input
I am trying to implement an algorithm "recongnizng strings in a language " 我正在尝试实现“识别语言字符串”的算法
L = {'w$w' : w is a possible empty string of characters other than $, w' = reverse(w)}
L = {'w $ w':w是$以外的可能的空字符串,w'= reverse(w)}
my problem is whenever i input anything without having $, it crashes on the while loop. 我的问题是,每当我输入任何没有$的内容时,它就会在while循环中崩溃。 what will be the best way to prevent it from crashing?
防止它崩溃的最佳方法是什么?
public boolean isInLanguage(String inputString)
{
StackReferenceBased stack1 = new StackReferenceBased();
StackReferenceBased stack2 = new StackReferenceBased();
Object qItem;
Object sItem;
int index = 0;
if (inputString.length() == 0)
{
return false; // empty string not in L
}
else if (inputString.length() == 1)
{
return true;
}
**while (inputString.charAt(index) != '$')**
{
// save the first half of the string
stack1.push(inputString.charAt(index));
++index;
}
// index points to '$' or its value > than inputString.length()
while (index < inputString.length()-1)
{
// save the second half of the string
++index;
stack2.push(inputString.charAt(index));
}
do
{
// match the first half of the string with the second half
if ((stack1.isEmpty() && !stack2.isEmpty()) ||(!stack1.isEmpty() && stack2.isEmpty()))
{
return false;
}
qItem = stack1.peek();
sItem = stack2.peek();
if (qItem != sItem)
{
return false;
}
if (!stack1.isEmpty())
{
stack1.pop();
}
if (!stack2.isEmpty())
{
stack2.pop();
}
}while (!stack1.isEmpty() || !stack2.isEmpty());
if (stack1.isEmpty() && stack2.isEmpty())
{
return true;
}
else
{
return false;
}
}
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(Unknown Source) at assignmnet5.StackReferenceBased.isInLanguage(StackReferenceBased.java:87) at assignmnet5.Question3.main(Question3.java:19)
线程“主”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:java.lang.String.charAt(未知源)为4,assignmnet5.StackReferenceBased.isInLanguage(StackReferenceBased.java:87)为Assignmnet5.Question3.main (Question3.java:19)
this is my main: 这是我的主要:
public static void main(String[]args)
{
StackReferenceBased stack = new StackReferenceBased();
String str;
boolean bool;
Scanner kb = new Scanner(System.in);
System.out.println( "Enter a string to be checked by the algorithm : ");
str = kb.next();
**bool = stack.isInLanguage(str);**
if (bool == true)
System.out.println( "The string is in language");
else
System.out.println("The string is not in language");
}
It sounds like this might suffice: 听起来这可能就足够了:
if (inputString == null || !inputString.contains("$")) {
return false; // empty string not in L
}
possible issue is a null pointer exception, try to add this line in the top of your function 可能的问题是空指针异常,请尝试在函数顶部添加此行
public boolean isInLanguage(String inputString)
{
if(inputString == null){
return false;
}
...
...
complete your code if you still have crashes, you will need to provide the error you've got when you run the code. 如果仍然崩溃,请完成代码,然后需要提供运行代码时遇到的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.