2014-12-05 3 views
2
import java.util.Scanner; 
import java.util.Arrays; 
import java.util.ArrayList; 

/** 
    This class prints the numeric value of a letter grade given by the user. 
*/ 
public class Words 
{ 
    int i=0; 
    String[] wordz; 
    /** 
     Constructs words class 
    */ 
    public Words() 
    { 
     wordz= new String[5]; 
    } 

    /** 
     collects 5 words from user and places then into array 
     @return the gradeValue 
    */ 
    public void inputArray(String a, String b, String c, String d, String e) 
    { 
     wordz = new String[] { a, b, c, d, e }; 
    } 

    /** 
     counts even and odds 
     @return numeric grade 
    */ 
    public void removeShortWords() 
    { 
     ArrayList<String> wordzList = new ArrayList<String>(Arrays.asList(wordz)); 
     for(i=0; i < wordz.length; i++) 
     { 

      if(wordz[i].length() < 3) 
       wordzList.remove(i);//out of bounds error here 

      String[] wordz = wordzList.toArray(new String[wordzList.size()]); 
     } 
    } 

    /** 
     prints out the array of 10 positive integers 
     @return numeric grade 
    */ 
    public void printArray() 
    { 
     System.out.println(Arrays.toString(wordz)); 
    } 
} 

Это мой класс тестера.Ошибка исходящего потока в программе Word Array

import java.util.Scanner; 

public class WordPrgm { 

    public static void main(String[] args) 
    { 
     Words wordArray = new Words(); 
     System.out.println("PLease enter five words"); 
     Scanner in = new Scanner(System.in); 
     String w1 = in.nextLine(); 
     String w2 = in.nextLine(); 
     String w3 = in.nextLine(); 
     String w4 = in.nextLine(); 
     String w5 = in.nextLine(); 
     wordArray.inputArray(w1, w2, w3, w4, w5); 
     wordArray.removeShortWords(); 
     wordArray.printArray(); 
    } 
} 

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

Я продолжаю получать ошибку на данном этапе программы.

wordzList.remove(i); 
+0

Меньше пяти? Мне больше нравятся три. – laune

+0

Да, извините, что я не думал, это должно быть меньше 3, а не пять. – javaProgrammer

+0

@javaProgrammer, если ответ вам не забудьте принять его –

ответ

0
for(i=0; i < wordzList.size(); i++) 
{ 
    if(wordzList.get(i).length() < 3){ 
     wordzList.remove(i); 
     i--; 
    } 
} 
// Use the ArrayList from now on - so then next line is iffy. 
wordz = wordzList.toArray(new String[wordzList.size()]); 

Проблема возникает в результате глядя на массив, а вы измените параллельный ArrayList. Придерживайтесь одной структурой данных за раз.

Избегайте массивов - ArrayLists обеспечивают лучшее обслуживание (как вы узнали).

2
ArrayList<String> wordzList = new ArrayList<String>(Arrays.asList(wordz)); 
for(i=0; i < wordz.length; i++) 
{ 

    if(wordz[i].length() < 3) 
     wordzList.remove(i);//out of bounds error here 

    String[] wordz = wordzList.toArray(new String[wordzList.size()]); 
} 

Позвольте мне объяснить, почему вы столкнулись с проблемой. Скажем, у вас есть 2 слова из 5, 2-й и 5-й, длина которых меньше 3. Так что вам нужно удалить 2 строки из словаря. Скажем, вы удалили второй, теперь размер списка равен 4, а последнее доступное значение - в индексе 3. Когда вы ищете 5-ю строку, которая была в индексе массива 4, вы пытаетесь удалить из списка не существующий элемент. Список последнего индекса - 3, но вы пытаетесь удалить элемент по индексу 4. Надеюсь, что вы под этим недостатком. Подумайте о логике преодоления.

Счастливое кодирование.

0

Вы получаете ArrayIndexOutOfBoundsException? Попробуйте проверить размеры массива. Обычно это указывается на то, что массив был доступен с незаконным индексом ...

+0

«обычно»? Существуют ли «необычные» случаи, когда это исключение будет выброшено? – Tom

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