我是一个全新的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");
}
}
输出:
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)
发布于 2012-11-17 04:32:51
for (int a = 0; a < primefactors.size() + 1; a++)
{
if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
{
count++;
}
超出了primefactors
集合的大小。实际上是2分。
更改为primefactors.size() - 1
以避免此错误。
发布于 2012-11-17 04:40:10
数组是从零开始的,我想你应该知道这一点。您可能不知道的是,在Java语言中,List
也是由数组支持的。当您调用primefactors.size() +1
时,您得到的可能比您想要的多了一个。例如,如果pf的大小为1,则您的循环将执行以下操作:
pf.get(0); //returns the only value in the list
pf.get(1); // element doesn't exist
现在,另一件事是你不想使用Vector
,通常是在Java语言中。它是一个同步的集合。您需要的是List/ArrayList。
其他代码问题
public static Vector<Integer> get_prime_factors(int number)
这不需要是静态的。另外,Java语言中的命名约定是驼峰大小写,因此函数名应该是getPrimeFactors(int number)
GlobalMembersMain
应该命名为GlobalMember
,因为类在本质上是单数的,我相信您添加Main
是为了表明它是持有主函数的类。
在main函数中,您将执行以下操作:
新建成员= GlobalMember GlobalMember();
Member.getPrimeFactors(数量);
发布于 2012-11-17 04:35:52
这就是问题所在:
for (int a = 0; a < primefactors.size() + 1; a++)
{
if (primefactors.elementAt(a) == primefactors.elementAt(a+1))
{
count++;
}
//...
集合中最后一个元素的primefactors.elementAt(a+1)
将抛出异常(AIOB)。
https://stackoverflow.com/questions/13423984
复制相似问题