我正在编写一个程序来获取数字的整数平方根。 我的代码:
import java.util.Scanner;
public class IntRoot{
public static void main(String[] args){
int num;
System.out.print("Enter a non-negative integer: ");
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
int i;
int y=1;
for (i=1; num>=i+(i+2); i +=2){
++y;
}
System.out.print(y);
}
}
程序应该一次添加一个奇数正整数(1 + 3 + 5 + 7 + ...)直到下一个和小于或等于num,然后计算用于给出的奇数的奇数整数平方根(并打印该数字)。
例如。 12的整数平方根将是3,因为1 + 3 + 5 = 9,并且总和中有3个奇数
目前我的程序没有打印正确的号码。 “i”应从1开始,每次增加2。这个for循环将重复,直到“i”的下一个和将大于“num”,并且每次“y”将增加1以给出“i”增长的次数。所以如果输入是7,当i = 2时“i”应该停止,类似地,如果输入是4,我应该在y = 2时停止,如果输入是49,我应该在y = 7时停止。
我的代码有问题吗?还是我的逻辑?
答案 0 :(得分:2)
tl; dr - 跳到底部。使用do / while循环。
我们如何使用do / while循环?我建议分开"休息"循环中的条件。现在,理解正在发生的事情会更复杂(这可能是你感到困惑的原因)。
类似的东西:
int curSum = 0;
for (i=1; i<num; i +=2){
if (curSum + i >= num) {
break;
}
++y;
curSum +=i;
}
更清楚。它更容易阅读和理解循环逻辑中实际发生的事情。
你可以阅读for循环,几乎完全用英文阅读
沿着这条线,我会建议一些更好的变量名称:
import java.util.Scanner;
public class IntRoot{
public static void main(String[] args){
int num;
System.out.print("Enter a non-negative integer: ");
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
int i;
int iterations=1;
int curSum = 0;
for (i=1; i<num; i +=2){
if (curSum + i >= num) {
break;
}
iterations++;
curSum +=i;
}
System.out.print(iterations);
}
}
最后,问题是......根据您的条件,您是否真的&#34;迭代每个数字直到您的输入数字?&#34;答案是,&#34;不,你想迭代直到满足条件。&#34;
有更好的循环结构,例如do-while循环:
import java.util.Scanner;
public class IntRoot{
public static void main(String[] args){
int num;
System.out.print("Enter a non-negative integer: ");
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
int i=1;
int iterations=1;
int curSum = 0;
do {
i+=2;
iterations++;
curSum +=i;
} while (curSum + i < num);
System.out.print(iterations);
}
}
答案 1 :(得分:1)
你的for循环只是在计算:
for (i=1; num>=i+(i+2); i +=2){
…
}
使用值为1,3,5,7,9,...
的i迭代如果你想让循环中的值为1,1 + 3,1 + 3 + 5,1 + 3 + 5 + 7 ......,你必须这样做:
sum = 1;
for (i = 1; num >= sum; i += 2) {
sum += i;
…
}
答案 2 :(得分:0)
你有一些错误,但这里有一些有用的东西
int currSum = 0;
int oddCount = 0;
for(int i = 1; currSum + i <= num; i+=2) {
currSum += i;
oddCount++;
}
基本上这会检查currSum = 1+3+5....+i < num
,如果当前总和不大于num,那么你将下一个奇数整数加到当前总和上,增加看到的奇数数,然后重新检查。 / p>
答案 3 :(得分:0)
我让这个工作:
int value = 4;
int count = 0;
int i = 0;
for (; count < value; i++) {
count += i * 2 + 1; // i*2+1 == 1, 3, 5, 7, ...
}
if (count != value) i--;
System.out.printf("The Square Root of %d is %d.\n", value, i);
替换value
中的任何值。它完全符合您的要求。
答案 4 :(得分:0)
使用while
循环break
循环可能会更容易。我不会说你不能使用for
,但我认为退出的条件是在循环内部,以获得更清晰的代码:
while(true)
{
i += 2;
s += i;
if(s + i > num)
break;
++y;
}
答案 5 :(得分:0)
我将y的默认值更改为0,因为在我的测试中它总是提供一个。
int num;
System.out.print("Enter a non-negative integer: ");
num = 12;
int i;
int y=0;
for (i=1; num>=i+(i+2); i +=2){
System.out.print("Iteration " +i+"|");
++y;
}
System.out.print(y);
}
我添加了几个s.out。
出来了。所以似乎y = 0给出了有效值。
输入非负整数:迭代1 |迭代3 |迭代5 | 3
答案 6 :(得分:0)
public class App
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("enter the value :");
int num=sc.nextInt();
int a =num/10;//32
num=num%10;//1
int b=a/10;//3
int c=a%10;
int total=c+b+num;
System.out.println("The sum of digit is:" +total);
}
}