2016-09-07 5 views
-3

У меня есть программа, которая выводит 4000 + случайных цифр в диапазоне от 1 до 99999. После печати она показывает диапазон и пару других вещей, а затем запрашивает у пользователя 5 номеров для ввода и говорит, сколько раз ему приходилось запускать цикл, но я получаю исключение в основном при печати, оно исходит из основного цикла. Скриншот прилагается. Желаемая должен выглядеть примерно так:Loop Counting in Java

(Случайным сгенерированных чисел):

(пользователь вводит) Пожалуйста, введите номер: 33

(система Ответ) Потребовалось 3 раза, чтобы найти номер.

Если номер не указан, так как он содержит более 4000 целых чисел, он скажет, что не найден.

Вот код и скриншот:

Screenshot Исключение в главном java.lang.ArrayIndexOutOfBoundsException: 0

Спасибо!

public static void main(String[] args) { 

    Scanner s = new Scanner(System.in); 

    int[] input = new int[0]; 
    int[] arrayone = new int[4096]; 

    int loop = 0; 

    for(int i = 0; i < arrayone.length; i++) { 
     arrayone[i] = (int)(Math.random() * 99999 + 1); 

     for(int in = 0; in<input.length; in++) { 
      if (arrayone[i] == input[in]) { 
       loop++; 
      } 
     } 
    } 
    for (int i = 0; i < 5; i++) { 
     System.out.println("Please enter a number between " + min + " and " + max); 
     input[0] = s.nextInt(); 

     if (min <= input[0] && input[0] <= max) { 
      System.out.println("It took " + loop + " time(s) to find the number " + input); 
     } 
    } 
} 
+0

это всегда полезно после того, что исключение вы получаете ... –

+6

'ИНТ [] = ввод новых ИНТ [0];' ваш массив имеет длину 0, поэтому при вызове 'вход [0] = s .nextInt(); 'он не может присвоить значение первому элементу. попробуйте дать ему правильный размер – dty

+0

Спасибо за подсказку, как я могу изменить эту строку так, чтобы она не была назначена? – Millie

ответ

0

Проблема с вашим массивом ввода заключается в том, что вы инициализируете его размером 0, поэтому, когда вы пытаетесь получить доступ к первому местоположению [0], вы исчерпаете границы, так как ваш массив имеет размер 0. В ваш ответ вы также пытались определить петли, прежде чем задавать вопрос. При этом вы также пытались пройти за пределы вашего входного массива с размером 0. То, что вам нужно сделать, это сначала инициализировать массив чисел, а затем для каждого цикла предсказания и определить, находится ли он в пределах вашего максимума и минимума. Также обратите внимание, что только потому, что числа находятся в пределах max и min, это не гарантирует, что число содержится в массиве, потому что числа не будут последовательно от max до min. Вы должны проверить, где вы закончите, после проверки на вход для входа.

public static void main(String random[]) 
{ 
    Scanner s = new Scanner(System.in); 

    int input = new int[5]; 
    int[] arrayone = new int[4096]; 

    int loop = 0; 

    //don't do anything here except fill the array with values 
    for(int i = 0; i < arrayone.length; i++) { 
     arrayone[i] = (int)(Math.random() * 99999 + 1); 
    } 

    //ask the user for 5 inputs 
    for (int index = 0; index < input.length; index++) { 

     System.out.println("Please enter a number between " + min + " and " + max); 
     input[index] = s.nextInt(); 
     //check to see if the number is valid 
     if (min <= input[index] && input[index] <= max) { 
      //loop through the arrayone to determine where it is 
      for(int i = 0; i < arrayone.length; i++) { 
       //if it is not in the current index at i increment the loop count 
       if (arrayone[i] != input[index]) { 
        loop++; 
       } 
       //we have found where it is and should break out of the loop 
       else { 
        break; 
       } 
      } 
      //check if we found it based on how much we incremented 
      if(i != arrayone.length) 
      { 
       //output how long it took to find the number 
       System.out.println("It took " + loop + " time(s) to find the number " + input[index]); 
      } 
      else 
      { 
       System.out.println(input[index] + " not found!"); 
      } 
      //now reinitialize the loop to 0 for the next guess 
      loop = 0; 
     } 
    } 
    //always remember to close your scanners 
    s.close(); 
    } 

} 
+0

Это сработало отлично! Спасибо огромное! : D – Millie

0
int[] input = new int[0]; 

Это создает массив с размером 0, поэтому при попытке сохранить значение, которое он бросает исключение, потому что вы превышаете размер массива.

установить действительный размер массива или использовать список.

ArrayList является (упрощающая) изменяемая по размеру версия массива. Используйте его так:

List<Integer> input = new ArrayList<>(); 
input.add(5); //Adds 5 to list 
input.get(0); //Read object of index 0 

for(int value : list) { //Loop: for each element in list ... 
    System.out.println(value); 
} 

//Checks whether list contains 5 
System.out.println(list.contains(5)); 

Кроме того, вы на самом деле нужно input быть массивом? Потому что сейчас похоже, что вам это совсем не нужно.