检查输入的数字是不是为奇数
Posted
技术标签:
【中文标题】检查输入的数字是不是为奇数【英文标题】:Checking if a number entered is odd检查输入的数字是否为奇数 【发布时间】:2011-07-13 17:07:02 【问题描述】:`我不确定要插入什么代码,甚至不知道在哪里,但我想检查我输入的数字是否为奇数。
import java.io.*;
import javax.swing.JOptionPane;
public class Diamond
public static void main(String [] args) throws IOException
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
String input;
int num;
System.out.println("input number: ");
input = stdin.readLine ();
num = Integer.parseInt(input);
if (num % 2 ==1)
int d = num;
int e = 0;
for (int a = 0; a <= num; a++)
for (int c = d; c>= 1; c-- )
System.out.print(" ");
d-=1;
for (int b = 1; b <= a; b++)
System.out.print ("* ");
System.out.println();
num-=1;
for (int a = 0; a<=num; a++)
for (int b = num; b > a; b--)
System.out.print (" *");
System.out.println();
for (int c = 0; c <= e; c++)
System.out.print(" ");
e+=1;
else
System.out.println("Please enter an odd number!");
【问题讨论】:
迈克,你不要把代码放在[code]
和[/code]
之间。我刚刚选择了它并点击了代码图标;使用代码块的另一种方法是缩进四个空格。
很抱歉,我无法让代码在帖子中正确显示。
我加了if-else语句,但觉得不正确。
把input = stdin.readLine (); num = Integer.parseInt(input);
拉出if块,num在检查前必须初始化。
为什么是社区 wiki 页面?
【参考方案1】:
使用modular arithmetic:
if (number % 2 == 0)
// even
else
// odd
更新:
你可以在这里测试这段代码:
https://repl.it/Hkc6/1请注意,使用 number % 2 == 1
检查均匀性会失败。
要检查一个数字是否为奇数,您可以使用(number & 1) != 0
。
【讨论】:
作为一个快速回复,在 Python 中你可以这样做:int(z / 2) == float(z) / 2
,但大多数人会使用明显的%
。
number % 2
表示数字除以2的余数。所有偶数都不会产生余数,所有奇数都会产生余数。
负数结果不正确……投反对票。 :(【参考方案2】:
num % 2 == 1 对负奇数返回不正确的结果,除以 2 的余数不会是 1。 这可以修复如下:
public boolean isOddNumber(int num)
return (num & 1) != 0;
【讨论】:
Java Findbugs 也喜欢这种方法【参考方案3】:readLine
不能包含在 if
中。 首先您需要获取价值,然后您可以使用您的if
。
是这样的:
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
String input;
int num;
System.out.println("input number: ");
input = stdin.readLine();
num = Integer.parseInt(input);
if (num % 2 == 1)
// odd
else
System.out.println("Please enter an odd number!");
最后 - 不要使用名为“a”、“e”或“d”的值 - 这非常令人困惑。只需使用让读者知道/猜测它们在您的代码中的角色的名称来命名变量。我不知道你的“a”或b、c、d等是什么意思。例如,你的num
应该命名为enteredValue
以澄清你的代码。
【讨论】:
我改变了它,但有些地方不应该是。当我输入一个偶数时,它什么也不做。如果我输入一个奇数,它就可以正常工作。 我想帮助你,但你的代码读起来很糟糕。你需要重命名你的变量...添加一些私有函数来代替 if-else -> if - function1() 内的多个代码行(命名正确!) else - function2() ... introcs.cs.princeton.edu/11style 请阅读, 或 google sth else bout clear code 并记住 - 代码需要易于阅读! 请避免在您的答案和 cmets 中使用文本朗读。这是一个面向专业和***程序员的网站,因此希望在问答方面至少具有一定的专业水平。 @Rob Hruska 所以要专业并帮助迈克代替学习我使用“你”代替“你”。我只是想帮忙,而不是像别人一样行事 使用完整的单词(例如“you”而不是“u”,“your”而不是“ur”)使您的答案更容易阅读和理解。由于内容的大小没有限制,因此没有理由不花时间将内容拼写出来并使您的答案清晰易读。它还将帮助其他人更认真地对待您的回答,因此它符合您作为试图提供帮助的人的利益。【参考方案4】:Chaker 关于负整数的回答得到确认。 在我的 JavaSE-1.8
System.out.println( "result =" + ( -3 % 2 == 1) );
它显示结果 =false 而不是 true
【讨论】:
【参考方案5】:Java中的位运算(位操作)方式
if ((num & 1) != 0) //odd
//do something here
else //even
//do something here
通过查看 100(数字 4)与 001 来工作,对每个位执行 AND 操作并返回 0 和 1。如果结束位是 0,比如 4,它总是会是偶数。如果结束位为 1,则为奇数。
【讨论】:
以上是关于检查输入的数字是不是为奇数的主要内容,如果未能解决你的问题,请参考以下文章