2014-10-09 88 views
-1

當我嘗試運行下面的代碼,我得到隨機Generater,字符串和數組

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7 
    at java.lang.String.charAt(String.java:658) 
    at main.main(main.java:27) 

Java結果:1

我還是要在的東西得到的最高值和最低的補充。 該程序必須通過一個字符串工作。我在下面使用的方法, 不是來自其他任何地方,我只是有點這樣做,但老師暗示使用循環。有什麼建議麼?我認爲這可能是因爲數組中的垃圾。

int highValue,lowestValue,sum; 
    int random; 
    int check, otherCheck; 
    int a = 0,b = 0,c = 0,d = 0,e = 0; 
    String passingRandomIn; 

    //Create a object that generates a random number 4-8 
    Random ran = new Random(); 

    //Generates a random number between 4 and 8 
    random = ran.nextInt(5)+4; 

    //Sets the randomly generated number equal to check and other check 
    check = random; 
    otherCheck = random; 

    //Declare an array of 5 characters[0-4] inclusive 
    char[] myCharArray = new char[4]; 

    //To string 
    passingRandomIn = Integer.toString(random); 

    //Pass in the random numbers(character per character from the string) 

     switch(check){ 
      case 8: myCharArray[4] = passingRandomIn.charAt(4); 
      check--; 
      case 7: myCharArray[3] = passingRandomIn.charAt(3); 
      check--;  
      case 6: myCharArray[2] = passingRandomIn.charAt(2); 
      check--;  
      case 5: myCharArray[1] = passingRandomIn.charAt(1); 
      check--;  
      case 4: myCharArray[0] = passingRandomIn.charAt(0); 
      break; 
     } 



     //Add the array of characters to an array of integers 
     switch(otherCheck) 
     { 
      case 8: a = Character.getNumericValue(myCharArray[4]); 

      case 7: b = Character.getNumericValue(myCharArray[3]); 

      case 6: c = Character.getNumericValue(myCharArray[2]); 

      case 5: d = Character.getNumericValue(myCharArray[1]); 

      case 4: e = Character.getNumericValue(myCharArray[0]); 
      break; 
     } 


     sum = a + b + c + d + e; 
     System.out.println(sum); 
    } 
} 
+0

第27行在哪裏? – 2014-10-09 04:20:11

+0

'case 8:myCharArray [4] = passingRandomIn.charAt(8);'不能工作,因爲'myCharArray'只能初始化4個元素(0-3) – MadProgrammer 2014-10-09 04:21:09

+0

'check = random; otherCheck = random;'提示:你可以直接使用'random',而不是將它複製到另外兩個變量中。 – 2014-10-09 04:25:51

回答

1
//Declare an array of 5 characters[0-4] inclusive 
char[] myCharArray = new char[4]; 

註釋和代碼不匹配。您分配四個個字符與new char[4]的數組。您應該將其更改爲new char[5]。請注意,這裏使用的數字是數組的大小,而不是您似乎假設的最終索引。

+0

至OP:數組大小從'1'開始。這裏是一個相關的解釋:http://stackoverflow.com/questions/22511775/why-does-array-size-declaration-use-1-as-the-first-index – theGreenCabbage 2014-10-09 04:34:22

0

該指數不陣列中存在作爲你只創建一個4元件陣列

殼體8:myCharArray [4] = passingRandomIn.charAt(8);

+0

線程「主」java.lang中的異常。的StringIndexOutOfBoundsException:字符串索引超出範圍:1 \t在java.lang.String.charAt(String.java:658) \t在main.main(main.java:31) Java結果:1 – ChrisReno1234 2014-10-09 04:26:49

+0

我校正兩個錯誤。我改變了代碼本身。在我的編譯器中,我將數組更改爲「new char [5]」 – ChrisReno1234 2014-10-09 04:27:36

2

random = ran.nextInt(5)+4;總是會生成一個數字號碼,且您試圖訪問該字符串如果你想使用random = ran.nextInt(5)+4;那麼你可以只使用passingRandomIn.charAt(0),因爲這是對StringIndexOutOfBoundsException

一個原因passingRandomIn.charAt(4)您字符串長度將爲1