检查输入的数字是不是为奇数

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 &amp; 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,则为奇数。

【讨论】:

以上是关于检查输入的数字是不是为奇数的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串输入是不是为数字?

检查输入的值是不是为数字

如何检查数字输入是不是为空?

c语言中如何检查输入值是不是为数字

使用测试检查输入的值是不是为数字或字母[重复]

C程序检查数字是偶数还是奇数