我正在尝试编写一个通过重复整数除法来模拟对数的程序。用户输入一个基数和一个他们想要取对数的值 X。该代码运行一个循环,并在每次连续除法后递增计数。该代码设置为在 X 的值小于基数后停止,因为我只使用 int 类型变量。
此代码对于某些数字和基数工作正常,但对于其他数字和基数,它给出了错误的值。它执行“log_2(64) is 6 ”,但不执行 log_10 of 100。它给出的计数为 10。
public static void main(String[] args) {
Scanner inScan = new Scanner(System.in);
int base;
int X;
int response;
int n=0;
do{
System.out.println("Java Lab 3 Logarithm Solver.");
System.out.println("Please enter a base > 1");
base = inScan.nextInt();
System.out.println("Please enter a number, X>0.");
X = inScan.nextInt();
if (X > 0 && base > 1){
System.out.println("Logarithm base " +base+ " of " +X+" is ");
for ( ; X>base ;n++){
X=(X/base);
}
System.out.println(n);
} else {
System.out.println("Invalide numbers.");
}
System.out.println("Would you like to go again? Press 1, press 0 to quit");
response = inScan.nextInt();
} while (response == 1);
}
}
最佳答案
您将 n 声明为全局变量;我怀疑如果你检查你的测试,这个算法只在每次编译和运行它时第一次起作用。不要将 n 设置为全局的,而是在 for 循环中声明它,例如
for(int n = 0; X < base; n++)
因为看起来您稍后需要 n 的值,所以我建议使用一个范围更广的变量(可能在 do-while 循环中声明)来存储 n,例如
do
{
int numberOfTimesThroughLoop = 0;
...
for(...)
{
x = x/base;
numberOfTimesThroughLoop = n;
}
}
作为旁注,大多数情况下变量(甚至是单字母变量,例如“X”)都带有小写字符
关于java - 通过重复整数除法模拟对数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824935/