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));
}
}
这是我的测试员课程。
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 :(得分: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()]);
}
让我解释一下为什么你会遇到这个问题。假设您有5个中的2个单词,第2个和第5个单词的长度小于3.因此您必须从“wordzList”中删除2个字符串。假设您删除了第二个,现在列表大小为4,最后一个可用值位于索引3.当您查找位于数组索引4的第5个字符串时,您尝试从列表中删除不存在的元素。列表最后一个索引是3,但是你试图删除索引4处的元素。希望你有缺陷。想想要克服的逻辑。
快乐的编码。
答案 1 :(得分: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 :(得分:0)
你得到ArrayIndexOutOfBoundsException吗?尝试检查数组的尺寸。这通常被抛出来表明已经使用非法索引访问了一个数组......