該程序發現首要因素,並打印出來是這樣的:因子(順序)係數(順序)爲什麼我會得到奇怪的輸出?
import java.util.Scanner;
import java.util.ArrayList;
public class Factorise2
{
public static ArrayList<Integer> get_prime_factors(int number)
{
//Get the absolute value so that the algorithm works for negative numbers
int absoluteNumber = Math.abs(number);
ArrayList<Integer> primefactors = new ArrayList<Integer>();
ArrayList<Integer> newprimes = new ArrayList<Integer>();
int b;
int c = (int)Math.sqrt(absoluteNumber);
//Get the square root so that we can break earlier if it's prime
for (int j = 2; j <= absoluteNumber;)
{
//Test for divisibility by j, and add to the list of prime factors if it's divisible.
if (absoluteNumber % j == 0)
{
primefactors.add(j);
absoluteNumber /= j;
c = (int)Math.sqrt(absoluteNumber);
}
else
{
for (int a = 0; a < newprimes.size();)
{
//Change j to the next prime
b = newprimes.get(a);
if (j % b == 0)
{
j++;
a = 0;
}
else
{
a++;
}
}
newprimes.add(j);
}
if (j > c)
{
primefactors.add(absoluteNumber);
break;
}
}
return primefactors;
}
public static void main(String[] args)
{
//Declare and initialise variables
int number;
int count = 1;
Scanner scan = new Scanner(System.in);
//Get a number to work with
System.out.println("Enter integer to analyse:");
number = scan.nextInt();
//Get the prime factors of the number
ArrayList<Integer> primefactors = get_prime_factors(number);
//Group the factors together and display them on the screen
System.out.print("Prime factors of " + number + " are ");
primefactors.add(0);
for (int a = 0; a < primefactors.size() - 1; a++)
{
if (primefactors.get(a) == primefactors.get(a+1))
{
count++;
}
else
{
System.out.print(primefactors.get(a) + " (" + count + ") ");
count = 1;
}
}
}
}
它的工作原理在大多數情況下,但是當我輸入131033809,我得到一個奇怪的輸出:
C:\Users\Eamon>java Factorise2
Enter integer to analyse:
4
Prime factors of 4 are 2 (2)
C:\Users\Eamon>java Factorise2
Enter integer to analyse:
128
Prime factors of 128 are 2 (7)
C:\Users\Eamon>java Factorise2
Enter integer to analyse:
9
Prime factors of 9 are 3 (2)
C:\Users\Eamon>java Factorise2
Enter integer to analyse:
121
Prime factors of 121 are 11 (2)
C:\Users\Eamon>java Factorise2
Enter integer to analyse:
131033809
Prime factors of 131033809 are 11447 (1) 11447 (1)
爲什麼不把它寫
11447 (2)
你認真地相信,這是Java中的一個錯誤,而不是你對Java的工作方式的理解有一點機會嗎?真?? –
你甚至看過代碼嗎?沒有太多的地方可能會出現我的錯誤。我標記你沒有建設性。 –
雖然你的自大狂需要解決,因爲它會阻止你解決這個問題。根據您目前的編碼水平,您找到真正的Java錯誤的機率太小,太小,您必須按照「我不瞭解的Java究竟是怎麼回事」來看待您的問題。你可能認爲這是沒有建設性的,但你如何看待問題很重要,並且會影響你如何解決問題。您需要使用調試器或println語句對代碼進行一些調試,因爲您必須*接受該錯誤是您的錯誤,除非得到其他方面的證明。 –