簡體   English   中英

StringIndexOutOfBoundsException錯誤

[英]StringIndexOutOfBoundsException Error

我是JAVA的新手,正在完成一項任務:

  1. 將用戶字符串作為輸入
  2. 將用戶整數作為輸入
  3. 使用整數作為增量值
  4. 返回字符串中的所有字符值,從0開始,以遞增后的最后一個字符結束。

我在終端中得到了正確的結果,緊接着是可怕的StringOutOfBoundsException錯誤。 我無法看到我在哪里嘗試訪問超出范圍的字符串中的字符,並感謝您找到我的錯誤的專業知識。 這是我的代碼片段:

import java.util.*;
public class EveryOtherCharacter
{
   public static void main(String[] args)
   {
    Scanner input = new Scanner(System.in);    

    //initialize all variables to be used in this program
    String userEntry;//store user word as a String
    String error=("Invalid Entry!");//notify of error
    String purpose=("Enter a word and an increment value and we'll\nreturn each character in your word using the number you provided".)
    int increment;//store increment integer from user
    int userEntryCount;//store total count of chars in userEntry
    char value;//get character at increment value from userEntry

    System.out.println("========================START PROGRAM=============================");
   System.out.println(purpose); 

    System.out.println();//whitespace
    System.out.print("Enter a word: ");
    userEntry=input.nextLine();
    userEntryCount = userEntry.length();

    System.out.print("Enter an increment value:  ");
    increment=input.nextInt();
    System.out.println();//whitespace

    value=userEntry.charAt(0);
    System.out.print(value);

    for (int count=0; count <= userEntryCount; count++)
    {
        value=userEntry.charAt(increment);
        userEntry=userEntry.substring(increment);
        System.out.print(value);
    }

    if (increment > userEntryCount && increment <= 0)
    {
        System.out.println(error);
    }
     System.out.println();//whitespace

    System.out.println("=========================END PROGRAM==============================");

   }
}

以下是運行此程序后終端輸出的示例。 請注意,在異常錯誤之前存在正確的輸出:

java EveryOtherCharacter
========================START PROGRAM=============================
Enter a word and an increment value and we'll
return each character in your word using the number you provided

Enter a word: whyisthissohard
Enter an increment value:  3

wihsaException in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.charAt(String.java:658)
at EveryOtherCharacter.main(EveryOtherCharacter.java:57)

你每次whyisthissohard 3個whyisthissohard 但是你總是在whyisthissohard長。

for (int count=0; count <= userEntryCount; count++)
{
    value=userEntry.charAt(increment);
    userEntry=userEntry.substring(increment);
    System.out.print(value);
}

First loop : value = 'i' ; userEntry = "isthissohard" ;
Second loop : value = 'h' ; userEntry = "hissohard";
Third loop : value = 's' ; userEntry = "sohard";
Fourth loop : value = 'a' ; userEntry = "ard";
Fifth loop => Error

我認為當指令說“使用整數作為增量值”時,你應該將它作為實際增量值使用。

public static void main(String[] args) {

    String s = "whyisthissohard";
    int skip = 3;

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i += skip) { // <--- Increment value
        sb.append(s.charAt(i));
    }

    //Return all character values in the string
    System.out.println(sb.toString()); // wihsa

}

如果需要,您也可以在for循環中打印它們而不是添加到另一個字符串。

我最后使用while循環解決了這個問題,如下所示:

while (n < length)//where n=userNumber & length=length of user word
{
    character=userEntry.charAt(n);//character becomes the character of the word at the increment value
    System.out.print(character);//print value of character at increment
    userEntry=userEntry.substring(n);//set userEntry to value of new string starting at n
    length = userEntry.length();//count the total number of characters in the new substring
}

在完成for循環的邏輯后,我意識到我已經創建並試圖增加i的值,這是沒有必要的。 在思考這個問題時,你們都是一個非常大的幫助。 我感謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM