Java 计算不正确或者我做错了什么?
Java doesnt calculate correctly or what am I doing wrong?
我想写个程序跟3x+1有点关系,不过那不重要。
首先它必须弄清楚给定的数字是奇数还是偶数。这是通过 s 语句完成的:
switch(input % 2)
{
case 0: //even
input = input / 2;
count++;
break;
case 1: //uneven
input = 3 * input + 1;
count++;
break;
}
if(input == 1)
{
System.out.println("reached 4, 2, 1 loop.\nTook " + count + " steps.");
return;
}
tryNumber(input);
偶数除以2,uneven/odd偶数乘以3加1
所以问题是它打印出完全错误的数字,例如使用 2:
Please put in a number:
2
50
25
76
38
19
58
29
88
44
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
reached 4, 2, 1 loop.
Took 24 steps.
哪里错了?
感谢您的任何回复。
完整代码:
package de.craftingdani.math.main;
import java.io.IOException;
public class Main
{
static long count = 0;
public static void main(String[] args)
{
try
{
System.out.println("Please put in a number: ");
tryNumber(System.in.read());
}
catch(Exception e)
{
System.err.println(" Error, please give a valid number");
e.printStackTrace();
}
}
public static void tryNumber(int input) throws InterruptedException, IOException
{
Thread.sleep(100);
System.out.println(input);
switch(input % 2)
{
case 0: //even
input = input / 2;
count++;
break;
case 1: //odd
input = 3 * input + 1;
count++;
break;
}
if(input == 1)
{
System.out.println("reached 4, 2, 1 loop.\nTook " + count + " steps.");
return;
}
tryNumber(input);
}
}
正如@Dici 和@matt 在评论区指出的那样,原始问题的答案是输入被解释为字符而不是整数。
我post这样做是为了让 OP 可以将这个问题标记为“已解决”,并且不会有连续不断的人花时间在已经解决的问题上。
Whosebug 要求我们将对原始问题的评论限制为澄清请求,并在答案区域 post 回答是有原因的。对于花一些时间希望帮助那些实际上仍然需要它的人的许多志愿者来说,这是有礼貌的。对寻求答案的人也很有礼貌,不要让他们埋没在评论中。
如果其他人 post 的答案,包括 OP,我很乐意删除它,只要有一些答案被标记为解决方案。
我想写个程序跟3x+1有点关系,不过那不重要。 首先它必须弄清楚给定的数字是奇数还是偶数。这是通过 s 语句完成的:
switch(input % 2)
{
case 0: //even
input = input / 2;
count++;
break;
case 1: //uneven
input = 3 * input + 1;
count++;
break;
}
if(input == 1)
{
System.out.println("reached 4, 2, 1 loop.\nTook " + count + " steps.");
return;
}
tryNumber(input);
偶数除以2,uneven/odd偶数乘以3加1
所以问题是它打印出完全错误的数字,例如使用 2:
Please put in a number:
2
50
25
76
38
19
58
29
88
44
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
reached 4, 2, 1 loop.
Took 24 steps.
哪里错了? 感谢您的任何回复。
完整代码:
package de.craftingdani.math.main;
import java.io.IOException;
public class Main
{
static long count = 0;
public static void main(String[] args)
{
try
{
System.out.println("Please put in a number: ");
tryNumber(System.in.read());
}
catch(Exception e)
{
System.err.println(" Error, please give a valid number");
e.printStackTrace();
}
}
public static void tryNumber(int input) throws InterruptedException, IOException
{
Thread.sleep(100);
System.out.println(input);
switch(input % 2)
{
case 0: //even
input = input / 2;
count++;
break;
case 1: //odd
input = 3 * input + 1;
count++;
break;
}
if(input == 1)
{
System.out.println("reached 4, 2, 1 loop.\nTook " + count + " steps.");
return;
}
tryNumber(input);
}
}
正如@Dici 和@matt 在评论区指出的那样,原始问题的答案是输入被解释为字符而不是整数。
我post这样做是为了让 OP 可以将这个问题标记为“已解决”,并且不会有连续不断的人花时间在已经解决的问题上。
Whosebug 要求我们将对原始问题的评论限制为澄清请求,并在答案区域 post 回答是有原因的。对于花一些时间希望帮助那些实际上仍然需要它的人的许多志愿者来说,这是有礼貌的。对寻求答案的人也很有礼貌,不要让他们埋没在评论中。
如果其他人 post 的答案,包括 OP,我很乐意删除它,只要有一些答案被标记为解决方案。