Java 用重复整数除法模拟对数

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

我正试图编写一个程序,通过重复整数除法模拟对数。用户输入一个基数和一个他们想要记录日志的值X。代码在循环中运行,并在每次连续除法后递增计数。代码被设置为在X的值小于基值后停止,因为我只使用int类型变量

此代码对某些数字和基数适用,但对于其他数字和基数,它给出了错误的值。它确实“log_2(64)是6”,但它不执行log_10/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++)

作为旁注,大多数时间变量(即使是单字母变量,如“X”)都是小写字符

您是否尝试过使用调试器(如IDE提供的调试器)单步执行代码?检查
n
重置为零的位置。顺便说一句,将基数向上乘以要比将基数向下除以快。六分数-是的,我做了,它似乎没有帮助。拉扎勒斯-我试着乘以基数,似乎效果不错。我只需要修正for循环的逻辑。谢谢你。@Hexafrance你得到了一个回答:“是的,我用了,似乎没有用。”他没有用@@AndrewLazarus你得到了一个回答:“我试着乘以基数,似乎效果不错。我只需要修改for循环的逻辑。”他没有用@I做你建议的更改。但是现在每次我运行它时它都会打印出零。我怀疑是因为我声明numberOfTimesThroughLoop=0;
do
{ 
    int numberOfTimesThroughLoop = 0;
    ...
    for(...)
    {
        x = x/base;
        numberOfTimesThroughLoop = n;
    }
}