سؤال

Quick question. I have this code in a program:

input = JOptionPane.showInputDialog("Enter any word below")
int i = 0;  
for (int j = 0; j <= input.length(); j++)  
{
    System.out.print(input.charAt(i));  
    System.out.print(" "); //don't ask about this.  
    i++;
}   
  • Input being user input
  • i being integer with value of 0, as seen

Running the code produces this error:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(Unknown Source)
at program.main(program.java:15)

If I change the charAt int to 0 instead of i, it does not produce the error...
what can be done? What is the problem?

هل كانت مفيدة؟

المحلول

Replace:

j <= input.length()

... with ...

j < input.length()

Java String character indexing is 0-based, so your loop termination condition should be at input's length - 1.

Currently, when your loop reaches the penultimate iteration before termination, it references input character at an index equal to input's length, which throws the StringIndexOutOfBoundsException (a RuntimeException).

نصائح أخرى

String indexing in Java (like any other array-like structure) is zero-based. This means that input.charAt(0) is the leftmost character. The last character is then at input.charAt(input.length() - 1).

So you are referencing one too many elements in your for loop. Replace <= with < to fix. The alternative (<= input.length() - 1) could bite you hard if you ever port your code to C++ (which has unsigned types).

By the way, the Java runtime emits extremely helpful exceptions and error messages. Do learn to read and understand them.

Replace for loop condition j <= input.length() with j < input.length() , as string in Java follows zero based indexing. e.g. indexing for the String "india" would start from 0 to 4.

You were accessing the array from [0-length], you should do it from [0-(length-1)]

int i = 0;
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(i));
    System.out.print(" "); //don't ask about this.
    i++;
}
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}

Try the following:

j< input.length() 

and then:

int i = 0;
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(i));
    System.out.print(" "); //don't ask about this.
    i++;
} 

Use this;

for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top