首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
EN

Stack Overflow用户
提问于 2012-11-17 04:31:44
回答 4查看 7K关注 0票数 0

我是一个全新的Java新手,我的第一个任务是实现一个"for“循环。我用C++编写了这个程序,它可以用Java语言编译,但我在运行时得到了一个错误。有人能告诉我出了什么问题吗?

代码语言:javascript
运行
复制
import java.util.Scanner;
import java.util.Vector;

public class GlobalMembersMain
{

    public static Vector<Integer> get_prime_factors(int number)
    {

        Vector<Integer> primefactors = new Vector<Integer>();
        for (int j = 2; j <= number; j++)
        {
            if (number % j == 0)
            {
                primefactors.add(j);
                number = number / j;
                j = 1;
            }
        }
        return primefactors;
    }

    public static void main(String[] args)
    {
        int number;
        int count = 1;
        System.out.print("Enter integer to analyse:");
        System.out.print("\n");
        Scanner scan = new Scanner(System.in);
        number = scan.nextInt();
        Vector<Integer> primefactors = new Vector<Integer>();
        primefactors = get_prime_factors(number);
        System.out.print("Prime factors are ");
        for (int a = 0; a < primefactors.size() + 1; a++)
        {
            if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
            {
                count++;
            }
            else
            {
                System.out.print(primefactors.elementAt(a));
                System.out.print(" (");
                System.out.print(count);
                System.out.print(") ");
                count = 1;
            }
        }
        System.out.print("\n");
    }
}

输出:

代码语言:javascript
运行
复制
Enter integer to analyse:
10
Prime factors are 2 (1) Exception in thread "main" java.lang.ArrayIndexOutOfBoun
dsException: 2 >= 2
        at java.util.Vector.elementAt(Unknown Source)
        at GlobalMembersMain.main(GlobalMembersMain.java:36)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-17 04:32:51

代码语言:javascript
运行
复制
    for (int a = 0; a < primefactors.size() + 1; a++)
    {
        if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
        {
            count++;
        }

超出了primefactors集合的大小。实际上是2分。

更改为primefactors.size() - 1以避免此错误。

票数 7
EN

Stack Overflow用户

发布于 2012-11-17 04:40:10

数组是从零开始的,我想你应该知道这一点。您可能不知道的是,在Java语言中,List也是由数组支持的。当您调用primefactors.size() +1时,您得到的可能比您想要的多了一个。例如,如果pf的大小为1,则您的循环将执行以下操作:

代码语言:javascript
运行
复制
pf.get(0);  //returns the only value in the list  
pf.get(1); // element doesn't exist

现在,另一件事是你不想使用Vector,通常是在Java语言中。它是一个同步的集合。您需要的是List/ArrayList。

其他代码问题

代码语言:javascript
运行
复制
public static Vector<Integer> get_prime_factors(int number)

这不需要是静态的。另外,Java语言中的命名约定是驼峰大小写,因此函数名应该是getPrimeFactors(int number)

GlobalMembersMain

应该命名为GlobalMember,因为类在本质上是单数的,我相信您添加Main是为了表明它是持有主函数的类。

在main函数中,您将执行以下操作:

新建成员= GlobalMember GlobalMember();

Member.getPrimeFactors(数量);

票数 2
EN

Stack Overflow用户

发布于 2012-11-17 04:35:52

这就是问题所在:

代码语言:javascript
运行
复制
for (int a = 0; a < primefactors.size() + 1; a++)
    {
        if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
        {
            count++;
       }

//...

集合中最后一个元素的primefactors.elementAt(a+1)将抛出异常(AIOB)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13423984

复制
相关文章

相似问题

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