2016-02-28 53 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循環做到這一點? –

相關問題