Java 用重复整数除法模拟对数
我正试图编写一个程序,通过重复整数除法模拟对数。用户输入一个基数和一个他们想要记录日志的值X。代码在循环中运行,并在每次连续除法后递增计数。代码被设置为在X的值小于基值后停止,因为我只使用int类型变量 此代码对某些数字和基数适用,但对于其他数字和基数,它给出了错误的值。它确实“log_2(64)是6”,但它不执行log_10/100。它给出了10的计数Java 用重复整数除法模拟对数,java,math,division,logarithm,Java,Math,Division,Logarithm,我正试图编写一个程序,通过重复整数除法模拟对数。用户输入一个基数和一个他们想要记录日志的值X。代码在循环中运行,并在每次连续除法后递增计数。代码被设置为在X的值小于基值后停止,因为我只使用int类型变量 此代码对某些数字和基数适用,但对于其他数字和基数,它给出了错误的值。它确实“log_2(64)是6”,但它不执行log_10/100。它给出了10的计数 public static void main(String[] args) { Scanner inScan = new Scan
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++)
作为旁注,大多数时间变量(即使是单字母变量,如“X”)都是小写字符您是否尝试过使用调试器(如IDE提供的调试器)单步执行代码?检查
n
重置为零的位置。顺便说一句,将基数向上乘以要比将基数向下除以快。六分数-是的,我做了,它似乎没有帮助。拉扎勒斯-我试着乘以基数,似乎效果不错。我只需要修正for循环的逻辑。谢谢你。@Hexafrance你得到了一个回答:“是的,我用了,似乎没有用。”他没有用@@AndrewLazarus你得到了一个回答:“我试着乘以基数,似乎效果不错。我只需要修改for循环的逻辑。”他没有用@I做你建议的更改。但是现在每次我运行它时它都会打印出零。我怀疑是因为我声明numberOfTimesThroughLoop=0;
do
{
int numberOfTimesThroughLoop = 0;
...
for(...)
{
x = x/base;
numberOfTimesThroughLoop = n;
}
}