int a;
int b;
int iloscA = 0;
int iloscB = 0;
ArrayList liczbyPierwszeA = new ArrayList();
ArrayList liczbyPierwszeB = new ArrayList();
Scanner liczba = new Scanner(System.in);
System.out.println("Podaj a.");
a = liczba.nextInt();
System.out.println("Podaj b");
b = liczba.nextInt();
int a1 = a;
int b1 = b;
for (int i = 2; i <= a; i++) {
while (a % i == 0) {
// System.out.print(i + "*");
liczbyPierwszeA.add(iloscA, i);
iloscA++;
a = a / i;
}
}
int x = 0;
System.out.print("Rozkład na czynniki pierwsze liczby " + a1 + "=");
while (x < liczbyPierwszeA.size()) {
System.out.print(liczbyPierwszeA.get(x) + "*");
x++;
}
for (int i = 2; i <= b; i++) {
while (b % i == 0) {
// System.out.print(i + "*");
liczbyPierwszeB.add(iloscB, i);
iloscB++;
b = b / i;
}
}
System.out.println("");
int y = 0;
System.out.print("Rozkład na czynniki pierwsze liczby " + b1 + "=");
while (y < liczbyPierwszeB.size()) {
System.out.print(liczbyPierwszeB.get(y) + "*");
y++;
}
int licznik = 0;
ArrayList Wspolne = new ArrayList();
int WspolneLicznik = 0;
while (liczbyPierwszeA.get(licznik) == liczbyPierwszeB.get(licznik)) {
Wspolne.add(WspolneLicznik, liczbyPierwszeA.get(licznik));
licznik++;
WspolneLicznik++;
}
System.out.println("");
int z = 0;
while (z < Wspolne.size()) {
System.out.print(Wspolne.get(z) + "*");
z++;
}
}
}
Soory用于代码的大块,但是想要发布到目前为止所有的代码。素数因子化工作正常,现在我想比较两个arraylists并找到共同的元素。但例如36和48就是
Rozkład na czynniki pierwsze liczby 36=2*2*3*3*
Rozkład na czynniki pierwsze liczby 48=2*2*2*2*3*
2*2*
如你所见,它没有正常工作,结果应该是2 * 2 * 3,而不是2 * 2。如何在整个arraylist中找到常见的数字序列,而不是像我的代码那样在arraylist的开头就可以了?
答案 0 :(得分:2)
您的while循环只查找两个列表的公共前缀。为了找到所有常见元素,您需要使用两个索引迭代两个List
:
int indexA = 0;
int indexB = 0;
while (indexA < liczbyPierwszeA.size () && indexB < liczbyPierwszeB.size()) {
if (liczbyPierwszeA.get(indexA) == liczbyPierwszeB.get(indexB)) {
Wspolne.add(WspolneLicznik, liczbyPierwszeA.get(indexA));
indexA++;
indexB++;
WspolneLicznik++; // not sure what this counter is for. I kept it just
// in case it's needed
} else {
if (iczbyPierwszeA.get(indexA) < liczbyPierwszeB.get(indexB))
indexA++;
else
indexB++;
}
}
我假设两个List
中的数字都按升序排序,我认为这是一个正确的假设(如果我正确理解你的代码)。
编辑:
同时更改要参数化的列表声明:
ArrayList<Integer> liczbyPierwszeA = new ArrayList<Integer>();
ArrayList<Integer> liczbyPierwszeB = new ArrayList<Integer>();
甚至更好:
List<Integer> liczbyPierwszeA = new ArrayList<Integer>();
List<Integer> liczbyPierwszeB = new ArrayList<Integer>();