java.lang.ArrayIndexOutOfBoundsException:2> = 2

Eam*_*ney 0 java

我是Java的新手,我的第一个任务是实现一个"for"循环.我用C++编写了这个程序,它用Java编译,但是我在运行时遇到了错误.谁能告诉我什么是错的?

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

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)
Run Code Online (Sandbox Code Playgroud)

dje*_*lin 7

    for (int a = 0; a < primefactors.size() + 1; a++)
    {
        if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
        {
            count++;
        }
Run Code Online (Sandbox Code Playgroud)

超过了primefactors集合的大小.实际上是2.

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

  • OP也应该不使用Vector等. (2认同)