2014-01-24 2 views
3

Я пытаюсь ввести число, и программа создала новый массив этой длины. Затем я буду вводить все элементы в массиве по одному. После этого я набираю одно число, и программа будет искать массив для этого числа. К сожалению, код, который я написал ниже, бросает ArrayIndexOutOfBoundsException. Как я могу это исправить?Как мне избежать ArrayIndexOutOfBounds?

import java.io.*; 
public class aw 
{ 
    public static void main(String args [])throws IOException`` 
    { 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

     int z; 
     boolean vince = false; 
     System.out.print("Enter Element :"); 
     int a = Integer.parseInt(in.readLine()); 
     int [] jes = new int[a]; 

     for(z=0; z<jes.length; z++) 
     { 
      System.out.print("Numbers :"); 
      jes[z] = Integer.parseInt(in.readLine()); 

     } 

     System.out.print("Enter search:"); 

     int []x = new int [100]; 
     x[100] = Integer.parseInt(in.readLine()); 

     if(jes[z] == x[100]) 
     { 
      vince = true; 
      if(vince == true) 
      { 
       System.out.print("Array "+jes[z]+ "Found at Index"+z); // here is my problem if i input numbers here it will out of bounds 
      } 
     } 
    } 
} 
+3

Я думаю, вы имеете в виду 'ArrayIndexOutOfBounds' – zero298

+1

На какой строке происходит исключение? –

+0

да сэр - [CodeShei] – Batusai

ответ

4

Первая проблема заключается в том, что вы повторно использовали z без ее перезагрузки. Ваш цикл увеличивает z до тех пор, пока он не станет больше максимального индекса вашего массива jes, поэтому при попытке повторного использования z вы используете индекс за пределами диапазона. Я думаю, что вам не хватает цикла for, когда вы пытаетесь сравнить прочитанное значение с jes, что может потенциально перезагрузить и повторно использовать z, но может быть более понятным использовать другую переменную для увеличения.

Во-вторых, вы объявили массив размером 100 для x и пытаетесь получить доступ к 101-му индексу (который выходит за рамки). int[] x = new int[100] имеет указатели 0-99.

Этот код должен работать, как вы хотели:

import java.io.*; 
public class aw 
{ 
    public static void main(String args []) throws IOException { 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

     boolean vince = false; 
     System.out.print("Enter Element :"); 
     int a = Integer.parseInt(in.readLine()); 
     int [] jes = new int[a]; 

     for(int i=0; i<jes.length; i++) { 
      System.out.print("Numbers :"); 
      jes[i] = Integer.parseInt(in.readLine()); 

     } 

     System.out.print("Enter search:"); 
     int x = Integer.parseInt(in.readLine()); 
     for(int i=0; i < jes.length; i++) { 
      if(jes[i] == x) { 
       vince = true; 
       break; //found the value, no need to keep iterating 
      } 
     } 

     if(vince == true) { 
      System.out.print("Array "+jes[i]+ "Found at Index"+i); 
     } 
    } 
} 
+0

мой первый поиск - это целое число, которое обрабатывает int x = Integer.parseInt (in.readLine()); но я, хотя это причина массива из bounce, поэтому я изменил его на int [] x = new int [100]. – Batusai

+0

Если вы просто ищете номер, вам не нужно будет помещать его в массив. @CoderShei Я отредактировал эту часть, поскольку это было необязательно. – turbo

+0

Ухаживать за нижним нитом? – turbo

2

Я не уверен, что вы пытаетесь сделать, но вы получите ArrayOutOfBoundsException при попытке получить доступ к й [100]. x в этом контексте представляет собой массив из 100 элементов, но в java x [0] - первый элемент, поэтому последний элемент x равен x [99], а x [100] - это 101-й элемент ... который отсутствует границ!

+0

проблема в том, что я ввожу 3 элемента, и он появится на входе 3 массива, так что скажем, я ввожу 2, 4, 6. тогда мой массив {2,4,6} прав? и следующий будет спрашивать, каков ваш поисковый номер, и если я ищу пример 2, то выход ArrayIndexOutOfBounce вместо массива 2 находится в индексе 0 [: 3] – Batusai

+0

Хорошо, поэтому, если я правильно понимаю, вот что вы хотите: сначала пользователь записывает длину массива (3), затем он записывает элементы массива (2, 4, 6), затем он пишет элемент, который он ищет (2), и приложение затем говорит: «элемент 2 найден в индексе 0», , Правильно ли я понял? –

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