Java初学者:使用循环将输入值一分为二,但不能使用数组、内置排序例程或任何其他Java Collections类



Java初学者:我已经完成了解决下面问题的大部分代码,但我的循环部分遇到了问题,因为它目前正在除以一个值。它应该继续分裂,直到达到1。我不知道出了什么问题,所以非常感谢您的帮助!!但是,我不能使用数组、内置排序例程或任何其他Java Collections类

问题:编写一个程序,提示用户输入一个正整数:N。该程序将使用循环将输入反复一分为二,丢弃任何小数部分,直到它变为1。程序应打印在单独的行上:

  • "减半"值的序列,每行一个
  • 所需的迭代次数
  • log2(N(的值

输入值9:时的我的代码和输出

import stdlib.StdIn;
import stdlib.StdOut;
public class DS1hw1b {
public static void main(String[] args) {
int countIteration = 0;
StdOut.println("enter a positive number: ");
int N = StdIn.readInt();
for (int i = 1; i <= 1; i++) {
countIteration++;
if ((N/2) != 1)
StdOut.println(N/2);
StdOut.println("number of iterations: " + countIteration);
//compute log formula
StdOut.println("log2 of input: " + (Math.log(N)/Math.log(2)));
}
}
}
Output:
enter a positive number: 
9
4
number of iterations: 1
log2 of input: 3.1699250014423126

然而,我应该看到9、4、2和1在单独的行上,并且是3的迭代。

您的循环将只循环一次-使用符合条件i<=11初始化i,并在i增加后停止遵守条件。

您被要求将N除以2,直到它变成1——这需要一个while循环:

int counter = 0;
while (n > 1) {
System.out.println(n);
counter++;
n /= 2;
}
System.out.println("Number of iterations: " + counter);

根据我对@Murelink的评论。这是更新后的代码,但现在对于任何输入的数字,log2公式都显示为0.0。我觉得最好这样展示。不管怎样,我不明白为什么它不起作用,因为我没有修改公式。谢谢大家的帮助!

public static void main(String[]args({

int countIteration = 0;
StdOut.println("enter a positive number: ");
int N = StdIn.readInt();
while (N > 1) {
N /= 2;
countIteration++;
StdOut.println(N);
}
StdOut.println("number of iterations: " + countIteration);
//compute log formula
StdOut.println("log2 of input: " + (Math.log(N)/Math.log(2)));
}

}

最新更新