2013-08-07 5 views
-4

(Я использую Java 1.4.2) Я хотел иметь массив, который должен перевернуть «монету» определенное количество раз, заданное пользователем (монета может переворачиваться до 1000 раз). Затем произвольно генерируйте целое число от 1 до 10, сохраняйте все числа в массиве. У меня есть следующий код, но он продолжает давать мне следующую ошибку:Java 1.4.2 - Ошибка ArrayIndexOutOfBounds

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at CoinFlip.main(CoinFlip.java:42)

Вот код, который я написал.

import java.io.*; 
import java.math.*; 

public class CoinFlip 
{ 
    public static void main(String[] args) throws IOException 
    { 
     // setting up variables 
     String timesString; 
     int times; 
     // setting up input 
     BufferedReader in; 
     in = new BufferedReader(new InputStreamReader(System.in)); 


     do 
     { 
      // times will display how many times the coin will flip 
      // loop if times does not fulfill the requirements 
      System.out.println("How many times do you want the coin to flip? (MUST be an integer between 1 to 1000)"); 
      timesString = in.readLine(); 
      // convert timesString into an integer 
      times = Integer.valueOf(timesString).intValue(); 
      if((times > 1000)||(times < 1)) 
      { 
       System.out.println("ERROR: The number of times you flip the coin must be an integer between 1 and 1000."); 
      } 
      System.out.println("The value for times is " +times); 
     } 
     while((times > 1000)||(times < 1)); 


     // create a new array 
     double flip[] = new double[times]; 

     // create a new variable timeStore that sets the boolean conditions for the For Loop 
     int timeStore; 
     for(timeStore = 0; timeStore <= times-1; timeStore++) 
     { 
      System.out.println("timeStore (how many iterations) is " +timeStore); 
      System.out.println("FOR LOOP: When " +timeStore+ " is less than or equal to " +(times-1)); 
      flip[times] = Math.round(Math.random()*9)+1; 
      // the line above stores a random integer between 1 and 10 within the current index 
      System.out.println("flip["+times+"] = "+flip[times]); 
     } 

    } 
} 
+4

В следующий раз, пожалуйста, не заставляй нас рассчитывать (или разумно попытаться разглядеть), где строка 42 есть. Кроме того, спасибо за создание [line 42] (http://bit.ly/kQG2PA). :-) – jason

ответ

5

По строке 42;

flip[times] = Math.round(Math.random()*9)+1; 

Должно быть;

flip[timeStore] = Math.round(Math.random()*9)+1; 

Тогда же в System.out на линии 44.

+0

Большое вам спасибо. Я сделал то, что вы предложили, и это сработало! – danjonila

2

Это неправильно:

42: flip[times] = Math.round(Math. random()* 9) + 1; 
44: System.out.println("flip[" + times + "] = " + flip[times]); 

Оказывается, вы имели в виду

42: flip[timeStore] = Math.round(Math.random()*9)+1; 
44: System.out.println("flip["+timeStore+"] = "+flip[timeStore]); 

Поскольку вы объявили flip как массив размера times, действительны только индексы 0...(times - 1). В частности, индекс times недействителен и поэтому будет flip[times].

Обратите внимание, что компилятор рассказывал вам оскорбительной строке, а индекс оскорбления проходил. Это говорит вам, что вы передали в 7 в качестве индекса. Но обратите внимание, что это исключение происходит на первой итерации вашего цикла. Вы можете сказать это на выходе, который ваша программа создала бы, поскольку у вас есть полезные отладочные отпечатки в вашем коде. Таким образом, вы должны были рассуждать: эй, почему мой массив видит индекс 7 на в начале итерации цикла, когда индекс должен быть 0? В этот момент ошибка практически фигурирует.

Кроме того, идиоматическое использование массивов:

for(timeStore = 0; timeStore < times; timeStore++) 

но даже лучше:

for(timeStore = 0; timeStore < flip.length; timeStore++) 
+0

Спасибо за помощь. Я также новичок в Stack Overflow, поэтому не знаю, как обозначить код номерами на стороне. – danjonila

+0

@ danjonila: Ну, вам не нужно наметить * все * номеров строк, просто назовите номера строк. – jason

+0

Как именно я мог бы это сделать? – danjonila

Смежные вопросы