首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >While循环无法正常工作。ArrayIndexOutOfBoundsException

While循环无法正常工作。ArrayIndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2014-03-23 19:02:11
回答 1查看 105关注 0票数 0

我的while循环条件似乎不起作用,我试着用<和<=做这个条件,但它仍然不起作用当我输入找不到的东西时,总是给我outofbounds错误。当我输入可以找到的东西时,它工作得很好,但当找不到它时,它就会出现outofbounds错误

错误消息如下

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20

代码:

代码语言:javascript
运行
复制
public static void main(String[] args) {
    int listsize;
    int[] listTosearch = new int[20];
    int elementTofind;
    boolean found = false;
    int indexToSearch;
    int indexOfelementTofind = -1;

    Scanner myScanner   = new  Scanner(System.in);
    System.out.println("Size of list to search?");
    listsize = myScanner.nextInt();

    for (int i = 0; i <= listsize - 1; i++){
        listTosearch[i] = 1 + (int) (Math.random()*(100-1)+1);
        System.out.println(listTosearch[i]);

    }
    System.out.println("Element to find?");
    elementTofind = myScanner.nextInt();
    indexToSearch = 0;

    while (indexToSearch < listsize -1 || found == false){ // This is the line that isn't working
        if (listTosearch[indexToSearch] == elementTofind ){
            found = true;
            indexOfelementTofind = indexToSearch + 1 ;
        }
        indexToSearch ++;
    }

    if (found == true){
        System.out.println(elementTofind + " is at index " + indexOfelementTofind);
    } else {
        System.out.println("The element was not found");
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-23 19:07:27

代码语言:javascript
运行
复制
while (indexToSearch < listsize -1 || found == false){

应该是:

代码语言:javascript
运行
复制
while (indexToSearch < listsize -1 && found == false){

或者正如peter.petrov所指出的:

代码语言:javascript
运行
复制
while (indexToSearch < listsize && !found)

来实际搜索整个数组。

您还可以考虑通过更改以下内容来提高代码的可读性:

代码语言:javascript
运行
复制
for (int i = 0; i <= listsize - 1; i++){

代码语言:javascript
运行
复制
for (int i = 0; i < listsize; i++){

这也有点奇怪:

代码语言:javascript
运行
复制
    if (listTosearch[indexToSearch] == elementTofind ){
        found = true;
        indexOfelementTofind = indexToSearch + 1 ;
    }

并使其具有误导性:

代码语言:javascript
运行
复制
System.out.println(elementTofind + " is at index " + indexOfelementTofind);

由于找到的元素位于索引indexToSearch而不是indexToSearch + 1

代码语言:javascript
运行
复制
public static void main(String[] args) {
  Scanner myScanner   = new  Scanner(System.in);

  System.out.println("Size of list to search?");
  int listSize = myScanner.nextInt();

  int[] listToSearch = new int[listSize];
  for (int i = 0; i < listSize; i++) {
    listToSearch[i] = 1 + (int) (Math.random()*(100-1)+1);
    System.out.println(listToSearch[i]);   
  }

  System.out.println("Element to find?");
  int elementToFind = myScanner.nextInt();

  int index = 0;
  boolean found = false;
  while (index < listSize && !found) { 
    if (listToSearch[index] == elementToFind) {
      found = true;
    } else {
      index++;
    }
  }

  if (found) {
    System.out.println(elementToFind + " is at index " + index);
  } else {
    System.out.println("The element was not found");
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22589971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档