I’m receiving a String index out of range question for a Java program I wrote for my assignment.

huangapple go评论56阅读模式
英文:

Im receiving a String index out of range question for a java program i wrote for my assignment

问题

以下是您要翻译的内容:

"I would like to apologise in advance if im doing something wrong with the code formatting because this is my second time posting here
I have a java assignment due in a couple of days in which the user enters a string and only the integers are collected from it and placed in the array intArray
Now i think i got the logic right in the code below but when i run it in the main, it asks for the string and the boolean, when i enter both it gives me the error
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 115"

This is what i entered for example
"Enter a string and true if you want to skip errors or false if you want to skip errors
sdak23
false"

this is my main:

import java.util.Scanner;
public class MainStringToIntArray {

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());
}
}

import java.util.Arrays;
import java.util.Scanner;

public class StringToIntArray {

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;

}
}
}

请注意,代码部分已被省略,我已提供要翻译的文本内容。

英文:

I would like to apologise in advance if im doing something wrong with the code formatting because this is my second time posting here
I have a java assignment due in a couple of days in which the user enters a string and only the integers are collected from it and placed in the array intArray
Now i think i got the logic right in the code below but when i run it in the main, it asks for the string and the boolean, when i enter both it gives me the error
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 115"

This is what i entered for example
"Enter a string and true if you want to skip errors or false if you want to skip errors
sdak23
false"

this is my main:

import java.util.Scanner;

public class MainStringToIntArray {

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(&quot;Enter a string and true if you want to skip errors or false if you want to skip errors&quot;);
	s1.scanStringToIntArray(intut.next(), input.nextBoolean());
}

}

import java.util.Arrays;
import java.util.Scanner;

public class StringToIntArray {

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 &lt; 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 &lt; 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 &gt; 0) {
		return true; 
	}
	else { 
		return false;
	}
}
public boolean contains(String intToFind) {
	int a = indexOf(intToFind);
	if (a &gt; 0) {
		return true; 
	}
	else { 
		return false;
	}
}
public int get(int index) {
	if(index &lt; 0 &amp;&amp; index &gt; 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 &lt; l; a++) {
			for (int z = 0; z &lt; 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 &lt; l; v++) {
			for (int p = 0; p &lt; 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;
			
}
}	

答案1

得分: 1

代码中存在问题在于 get 方法。从逻辑上讲,索引既不能小于 0 又不能大于 10;您可能希望使用逻辑或运算符 (||)。另外,数组的最大索引实际上是 9,因为数组是从零开始索引的。

public int get(int index) {
    if (index < 0 || index > 9) {
        return Integer.MIN_VALUE;
    } else {
        return intArray[index];
    }
}

您的代码中还存在其他逻辑错误。所有的 indexOf 方法应该返回元素首次被找到的索引,而不是元素本身,而且您的 else 分支总是在未找到时将其重置为 -1。

英文:

The issue is in the get method. It is logically impossible for the index to be both less than 0 and greater than 10; you probably want to use the logical or operator (||). Also, the maximum index of the array is actually 9, as arrays are zero indexed.

public int get(int index) {
    if(index &lt; 0 || index &gt; 9) {
        return Integer.MIN_VALUE;
    }
    else {
        return intArray[index];
    }
}

There are other logical errors in your code as well. All your indexOf methods should be returning the index where the element was first found instead of the element itself and your else branch is always resetting it to -1 each time it is not found.

huangapple
  • 本文由 发表于 2020年7月28日 11:14:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/63126511.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定