【问题标题】: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 页面?

标签: java java-io


【解决方案1】:

使用modular arithmetic

if (number % 2 == 0) {
  // even
} else {
  // odd
}

更新:

你可以在这里测试这段代码:

请注意,使用 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,则为奇数。

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 2023-03-27
      • 2010-11-22
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多