我正在使用Java程序来查找GCD的s和t值,并且由于某种原因,除非输入整数2和3作为输入,否则我的程序不会脱离用户输入。我不知道为什么这样做,为什么只接受这两个数字。如果有人可以帮助我,我将非常感激。
这是我的代码:
package test;
import java.util.Scanner;
public class test {
public static void main(String [] args) {
int a;
int b;
int div;
int dive;
Scanner sc= new Scanner(System.in);
System.out.println("Enter in values of A and B to find its GCD.");
a = sc.nextInt();
b = sc.nextInt();
int[] Array1 = {1,0,a};
int[] Array2 = {0,1,b};
while (Array2[2] !=0) {
if(Array1[2] > Array2[2])
{
div = Array1[2]/Array2[2];
for (int i = 0; i<Array1.length;i++)
for (int k = 0; k<Array2.length;k++)
Array1[i] = Array1[i] - div* Array2[k];
}
else
{
dive = Array2[2]/Array1[2];
for (int j = 0; j<Array1.length;j++)
for (int l = 0; l<Array2.length;l++)
Array2[l] = Array2[l]- dive*Array1[j];
}
}
if(Array2[2] == 0)
System.out.println("S = " + Array1[0] + " t = " + Array1[1]);
if(Array1[2] == 0)
System.out.println("S = " + Array2[0] + " t = " + Array2[1]);
}
}
答案 0 :(得分:1)
问题不在您的扫描仪中,问题在于您的while循环和for循环。
令a=2
,b=4
:(b是Array2 [2])
else
{
dive = Array2[2]/Array1[2];
for (int j = 0; j<Array1.length;j++)
for (int l = 0; l<Array2.length;l++)
Array2[l] = Array2[l]- dive*Array1[j];
}
dive=2
j=0 , l=2 --> b = b - 2*1 --> b=2
j=1 , l=2 --> b = b - 2*0 --> b=2
j=2 , l=2 --> b = b - 2*2 --> b=-2
如您所见,您的值不会为零,因此将永远循环。
答案 1 :(得分:0)
您的代码陷入无限循环,这是因为您的while条件Array2[2] != 0
从未被满足。
通过将Array2[2]
的值打印到for循环的结尾可以看到这一点。
您必须采用其他方法。
提示:使用欧几里得算法来计算GCD。