我正在尝试编写一个通过重复整数除法来模拟对数的程序。用户输入他们想要记录的基数和值X.代码运行循环并在每次连续分割后递增计数。在X的值小于基数之后,代码被设置为停止,因为我只使用int类型变量。
此代码适用于某些数字和基础,但对于其他数据,它会提供错误的值。它确实“log_2(64)是6”但是它没有做100的log_10。它给出了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);
}
}
答案 0 :(得分: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;
}
}
作为附注,大多数时间变量(甚至单个字母变量,如你的&#39; X&#39;)都是小写字符