Java-使用“时出现未处理的异常错误”;“继续”;在一个循环中?
这是一个存储10个唯一字符串的程序。如果用户输入的字符串已经存在于数组中,则用户将得到一个错误。我的代码对于我输入的第一个字符串工作得很好,但之后会抛出一个异常,我不知道为什么。我如何修复此问题并使其正常工作 另外,我不想用电视机。我想用数组来做 编辑:错误名称:线程“main”java.lang.NullPointerException中的异常 Java结果:1 谢谢Java-使用“时出现未处理的异常错误”;“继续”;在一个循环中?,java,arrays,string,loops,continue,Java,Arrays,String,Loops,Continue,这是一个存储10个唯一字符串的程序。如果用户输入的字符串已经存在于数组中,则用户将得到一个错误。我的代码对于我输入的第一个字符串工作得很好,但之后会抛出一个异常,我不知道为什么。我如何修复此问题并使其正常工作 另外,我不想用电视机。我想用数组来做 编辑:错误名称:线程“main”java.lang.NullPointerException中的异常 Java结果:1 谢谢 public static void main(String[] args) { Scanner keybo
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int stringNumber = 0;
String[] stringArray = new String[10];
for (int i = 0; i <= stringArray.length; i++) {
boolean itemExists = false;
out.println("\nEnter a string");
String input = keyboard.next();
if (i > 0) {
for (int j = 0; j < stringArray.length; j++) {
if (stringArray[j].equalsIgnoreCase(input)) {
itemExists = true;
out.println("Item \"" + input + "\" already exists.");
break;
} else {
continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number.
}
}
}
if (itemExists == false) {
stringArray[stringNumber] = input;
out.println("\"" + stringArray[stringNumber] + "\"" + " has been stored.");
} else {
out.println("Try again.");
}
PrintArray(stringArray);
stringNumber++;
}
}
public static void PrintArray(String[] stringArray) {
for (int i = 0; i <= 9; i++) {
if (stringArray[i] == null) {
out.print(" ");
} else {
out.print("\nYour strings:");
out.print(" " +stringArray[i] + " ");
}
}
}
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
int stringNumber=0;
String[]stringArray=新字符串[10];
对于(int i=0;i 0){
对于(int j=0;j 对于(int i=0;i您将获得NullPointerException,因为您正在访问一个空数组。在第二个循环中,您将在整个stringArray数组上循环,但插入了第一个i元素
更改此项:
for (int j = 0; j < stringArray.length; j++) {
for(int j=0;j
为此:
for (int j = 0; j < i; j++) {
for(int j=0;j
附言。
我建议您使用集合而不是数组
下面是一个带有Set的版本:
int numStrings = 10;
Set<String> inserted = new HashSet<String>();
while(inserted.size()<=numStrings) {
out.println("\nEnter a string");
String input = keyboard.next();
if (inserted.contains(input)) {
out.println("Item \"" + input + "\" already exists.");
out.println("Try again.");
} else {
inserted.add(input);
out.println("\"" + input + "\"" + " has been stored.");
}
}
out.println(inserted);
int numStrings=10;
Set inserted=新的HashSet();
当(inserted.size()您的问题是如果(stringArray[j].equalsIgnoreCase(input)){
,您引用null元素,因为您的数组不包含任何内容
你可以解决这个问题
if(input.equalsIgnoreCase(stringArray[j]){
现在将该值与可能为null的数组项进行比较
检查示例代码
private final static Scanner keyboard = new Scanner(System.in);
private final static String[] stringArray = new String[10];
public static void main(String[] args) {
int stringNumber = 0;
for (int i = 0; i < stringArray.length; i++) {
System.out.println("\nEnter a string");
String input = readNextItem();
if(isInputExist(input)) {
System.out.println("Item \"" + input + "\" already exists.");
System.out.println("Try again.");
} else {
stringArray[stringNumber++] = input;
System.out.println("\"" + input + "\"" + " has been stored.");
}
printArray(stringArray);
}
}
private static String readNextItem() {
return keyboard.next();
}
private static boolean isInputExist(String input) {
for(String stored : stringArray) {
if(input.equalsIgnoreCase(stored)) {
return true;
}
}
return false;
}
专用最终静态扫描仪键盘=新扫描仪(System.in);
私有最终静态字符串[]stringArray=新字符串[10];
公共静态void main(字符串[]args){
int stringNumber=0;
对于(int i=0;i
问题在于这个内部循环:
for (int j = 0; j < stringArray.length; j++) {
if (stringArray[j].equalsIgnoreCase(input)) {
itemExists = true;
out.println("Item \"" + input + "\" already exists.");
break;
} else {
continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number.
}
}
如果-stringArray[j]中尚未填充字符串,则会导致NullPointerException。您只需反转表达式:
input.equalsIgnoreCase(stringArray[j])
(假设“input”从不为NULL)这是异常还是编译器错误?在这两种情况下,请发布stacktrace或完整的错误消息。原始post中添加的错误消息您将丢失,因为尝试将其拆分为不同的方法时逻辑很复杂。
input.equalsIgnoreCase(stringArray[j])