我收到一个字符串索引超出范围的问题,是我为作业编写的java程序的问题

我收到一个字符串索引超出范围的问题,是我为作业编写的java程序的问题,java,string,java.util.scanner,Java,String,Java.util.scanner,如果我的代码格式有问题,我想提前道歉,因为这是我第二次在这里发帖 我有一个java分配,在几天后到期,用户输入一个字符串,只从中收集整数并放入数组中 现在我想我在下面的代码中得到了正确的逻辑,但是当我在main中运行它时,它会询问字符串和布尔值,当我同时输入这两个值时,它会给出错误 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:115 例如,这就是我输入的内容 “如果要跳过错误,请输入字符串和true;如果要跳过

如果我的代码格式有问题,我想提前道歉,因为这是我第二次在这里发帖 我有一个java分配,在几天后到期,用户输入一个字符串,只从中收集整数并放入数组中 现在我想我在下面的代码中得到了正确的逻辑,但是当我在main中运行它时,它会询问字符串和布尔值,当我同时输入这两个值时,它会给出错误 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:115

例如,这就是我输入的内容 “如果要跳过错误,请输入字符串和true;如果要跳过错误,请输入false sdak23 假“

这是我的主要观点:

import java.util.Scanner;
公共类主队列{

public static void main(String[] args) {
    Scanner intut = new Scanner(System.in);
    Scanner input = new Scanner(System.in);

    StringToIntArray s1 = new StringToIntArray();
    System.out.println("Enter a string and true if you want to skip errors or false if you want to skip errors");
    s1.scanStringToIntArray(intut.next(), input.nextBoolean());
}
private int[] intArray = new int[10];

public StringToIntArray() {
    Arrays.fill(intArray, Integer.MIN_VALUE);
}

public int indexOf(int intToFind) {
    int b = 0;
    for (int a = 0; a < intArray.length; a++) {
        if (intArray[a] == intToFind) {
            b = intArray[a];
        }
        else {
            b = -1;
        }
    }
    return b;
}
public int indexOf(String intToFind) {
    int b = 0;
    for (int a = 0; a < intArray.length; a++) {
        if (intArray[a] == Integer.parseInt(intToFind)) {
            b = intArray[a];
        }
        else {
            b = -1;
        }
    }
    return b;
}
public boolean contains(int intToFind) {
    int a = indexOf(intToFind);
    if (a > 0) {
        return true; 
    }
    else { 
        return false;
    }
}
public boolean contains(String intToFind) {
    int a = indexOf(intToFind);
    if (a > 0) {
        return true; 
    }
    else { 
        return false;
    }
}
public int get(int index) {
    if(index < 0 && index > 10) {
        return Integer.MIN_VALUE;
    }
    else {
        return intArray[index];
    }
}
public boolean scanStringToIntArray(String s, Boolean skipErrors) {
    
    Boolean result = null;
    Scanner input = new Scanner(s);
    
    int l = s.length();
    
    if ((skipErrors)) { 
        String discard = null;
        for (int a = 0; a < l; a++) {
            for (int z = 0; z < l; z++) {
                if (input.hasNextInt(s.charAt(z))) {
                    intArray[a] = s.charAt(z);
                    System.out.println(a);
                    result = true;
                }
                else {
                    discard = discard + s.charAt(z);
                }
            }
        }
    }
    else {
        for (int v = 0; v < l; v++) {
            for (int p = 0; p < l; p++) {
                if ((input.hasNextInt(s.charAt(p)))) {
                    intArray[v] = s.charAt(p);
                    System.out.println(v);
                }
                else {
                    System.out.println(v);
                    result = false;
                }
                
                
            }
        
        }
        
    }
    return result;
            
}
}   
}

导入java.util.array; 导入java.util.Scanner

公共类StringToInArray{

public static void main(String[] args) {
    Scanner intut = new Scanner(System.in);
    Scanner input = new Scanner(System.in);

    StringToIntArray s1 = new StringToIntArray();
    System.out.println("Enter a string and true if you want to skip errors or false if you want to skip errors");
    s1.scanStringToIntArray(intut.next(), input.nextBoolean());
}
private int[] intArray = new int[10];

public StringToIntArray() {
    Arrays.fill(intArray, Integer.MIN_VALUE);
}

public int indexOf(int intToFind) {
    int b = 0;
    for (int a = 0; a < intArray.length; a++) {
        if (intArray[a] == intToFind) {
            b = intArray[a];
        }
        else {
            b = -1;
        }
    }
    return b;
}
public int indexOf(String intToFind) {
    int b = 0;
    for (int a = 0; a < intArray.length; a++) {
        if (intArray[a] == Integer.parseInt(intToFind)) {
            b = intArray[a];
        }
        else {
            b = -1;
        }
    }
    return b;
}
public boolean contains(int intToFind) {
    int a = indexOf(intToFind);
    if (a > 0) {
        return true; 
    }
    else { 
        return false;
    }
}
public boolean contains(String intToFind) {
    int a = indexOf(intToFind);
    if (a > 0) {
        return true; 
    }
    else { 
        return false;
    }
}
public int get(int index) {
    if(index < 0 && index > 10) {
        return Integer.MIN_VALUE;
    }
    else {
        return intArray[index];
    }
}
public boolean scanStringToIntArray(String s, Boolean skipErrors) {
    
    Boolean result = null;
    Scanner input = new Scanner(s);
    
    int l = s.length();
    
    if ((skipErrors)) { 
        String discard = null;
        for (int a = 0; a < l; a++) {
            for (int z = 0; z < l; z++) {
                if (input.hasNextInt(s.charAt(z))) {
                    intArray[a] = s.charAt(z);
                    System.out.println(a);
                    result = true;
                }
                else {
                    discard = discard + s.charAt(z);
                }
            }
        }
    }
    else {
        for (int v = 0; v < l; v++) {
            for (int p = 0; p < l; p++) {
                if ((input.hasNextInt(s.charAt(p)))) {
                    intArray[v] = s.charAt(p);
                    System.out.println(v);
                }
                else {
                    System.out.println(v);
                    result = false;
                }
                
                
            }
        
        }
        
    }
    return result;
            
}
}   
private int[]intArray=new int[10];
公共StringToInArray(){
fill(intArray,Integer.MIN_值);
}
公共int索引of(int intToFind){
int b=0;
对于(int a=0;a0){
返回true;
}
否则{
返回false;
}
}
公共布尔包含(字符串intToFind){
int a=indexOf(intToFind);
如果(a>0){
返回true;
}
否则{
返回false;
}
}
公共整数获取(整数索引){
如果(索引<0&&index>10){
返回Integer.MIN_值;
}
否则{
返回数组[索引];
}
}
公共布尔扫描StringToInArray(字符串s、布尔skipErrors){
布尔结果=null;
扫描仪输入=新扫描仪;
int l=s.长度();
如果((skipErrors)){
字符串discard=null;
对于(int a=0;a
问题在
get
方法中。从逻辑上讲,索引不可能同时小于0和大于10;您可能希望使用逻辑or运算符(
| |
)。此外,数组的最大索引实际上是9,因为数组的索引为零

public int get(int index) {
    if(index < 0 || index > 9) {
        return Integer.MIN_VALUE;
    }
    else {
        return intArray[index];
    }
}
public int-get(int-index){
如果(指数<0 | |指数>9){
返回Integer.MIN_值;
}
否则{
返回数组[索引];
}
}

代码中还有其他逻辑错误。所有indexOf方法都应该返回第一次找到元素的索引,而不是元素本身,并且每次找不到元素时,else分支都会将其重置为-1。

为什么需要使用StringToInArray?指令中要求使用无参数构造函数来设置数组所有元素的值到integer.min value您都设置好了吗?不幸的是,没有,我仍然有这个问题您好非常感谢您的帮助我实际上修复了get方法,但是我仍然收到与indexOf方法相同的错误,如果找不到intToFind,它应该返回-1,表示找不到该数字。我将使它返回找到它的位置的索引号,而不是元素本身,但是程序的其余部分仍然给出相同的错误