我收到一个字符串索引超出范围的问题,是我为作业编写的java程序的问题
如果我的代码格式有问题,我想提前道歉,因为这是我第二次在这里发帖 我有一个java分配,在几天后到期,用户输入一个字符串,只从中收集整数并放入数组中 现在我想我在下面的代码中得到了正确的逻辑,但是当我在main中运行它时,它会询问字符串和布尔值,当我同时输入这两个值时,它会给出错误 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:115 例如,这就是我输入的内容 “如果要跳过错误,请输入字符串和true;如果要跳过错误,请输入false sdak23 假“ 这是我的主要观点:我收到一个字符串索引超出范围的问题,是我为作业编写的java程序的问题,java,string,java.util.scanner,Java,String,Java.util.scanner,如果我的代码格式有问题,我想提前道歉,因为这是我第二次在这里发帖 我有一个java分配,在几天后到期,用户输入一个字符串,只从中收集整数并放入数组中 现在我想我在下面的代码中得到了正确的逻辑,但是当我在main中运行它时,它会询问字符串和布尔值,当我同时输入这两个值时,它会给出错误 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:115 例如,这就是我输入的内容 “如果要跳过错误,请输入字符串和true;如果要跳过
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,表示找不到该数字。我将使它返回找到它的位置的索引号,而不是元素本身,但是程序的其余部分仍然给出相同的错误