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<=1
的1
初始化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)));
}
}