2016-02-28 55 views
2

我的老师希望我们采用一个被估算的字符串,并采取一定的增量,并在这些增量中拉出字符。我有工作,但我仍然收到此错误信息:它的工作原理,但我仍然收到错误信息,我做错了什么?

java.lang.StringIndexOutOfBoundsException: String index out of range: 21 

然后它突出的代码point = base.charAt(sum)行: 这里是我的全部代码,以便您可以看到我在做什么。

import java.util.*; 
public class EveryOtherCharacter { 
public static void main(String[]args) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter a String: "); 
    String base = input.nextLine(); 
    System.out.print("Enter an increment: "); 
    int index = input.nextInt(); 
    int a = base.length(); 
    int sum = 0; 
    char point; 
    if(index>a) { 
     System.out.println("Invalid increment: "+index); 
    } 
    else { 
     while (index<=a) { 
     sum+=index; 
     point = base.charAt(sum); 
     System.out.print(point); 
    } 
    System.out.println(); 
    } 
    } 
} 
+0

Java是0索引(字符串的第一个字符在'0'位置,最后一个在'length - 1'),所以'while(index <= a){'应该可以是'while(index MadProgrammer

+0

看起来好像你正在得到数组中的字符。长度 – Jorgovanka

回答

1

首先,在while循环的条件应该是sum < a,不index <= a,因为数组/字符串的最后一个指标是length-1,并且sum是要增加,不index变量。

此外,另一个问题是,最后一个“合法”的循环后,index <= a将返回true,然后要添加到index其中sum将它超过字符串的范围。你应该实现它是这样:

do { 
    point = base.charAt(sum); 
    System.out.println(point); 
    sum += index; 
} while(sum < a) 

编辑:如果你不想使用do-while循环,就可以实现它像这样用for循环:

for(sum = 0 ; sum < a ; sum += index) { 
    point = base.charAt(sum); 
    System.out.println(point); 
} 
+0

如果我使用一个do而lo运。有没有办法用for循环做到这一点? –

相关问题