两个给定数字相加

Addition of two given numbers

基本上是关于二进制数,用户需要输入两个随机数,两个数都会相加,两个数相加只需要有1和0例如5+6==11 OR 55+55=110,然后抛出一条消息说“加法只有 1 和 0,否则例如 25+46=71 或 575+575=1150 然后抛出一条消息说加法不只有 1 和 0。

我刚开始学习java,我找不到任何对这个问题有帮助的东西,我已经知道条件是否只有 1 和 0。

这是我已有的代码,但是当我输入例如 575+575+1150 时说只有 1 和 0,我想我不能为此使用 .contains。

public static void main(String[] args) {
    Scanner read = new Scanner(System.in);
    int n1;
    int n2;
    int add;
    
    System.out.print("Input Number 1: ");
    n1=read.nextInt();
    System.out.print("Input number 2: ");
    n2=read.nextInt();
    System.out.println();
    add=n1+n2;
    System.out.println("The addition is =  "+add); 
    
    String S = String.valueOf(add);
    
    if(S.contains("1") && S.contains("0")) {
     System.out.print("The addition only has 1's and 0's");
    }
    else{System.out.print("The addition does not only have 1's and 0's");}
        
}     

}

我看到了你的代码,结果总和 1150 确实包含 1 和 0。

s.contains(x); 

此函数仅检查字符串是否包含值 x。由于“1150”同时包含 1 和 0,因此您的函数打印出错误的输出。

解决此问题的一种方法是将两个数字相加,然后逐位检查所得和。你可以创建一个函数来为你做这件事。

public void checkOnesAndZeros(int resultantSum) {
        while (resultantSum > 0) {
            int remainder = resultantSum % 10;
            if(remainder != 1 && remainder != 0) {
                System.out.println("The addition does not have only 1’s and 0’s.");
                return;
            }
            resultantSum = resultantSum / 10;
        }
        System.out.println("The addition only has 1’s and 0’s");
    }

一种方法是使用添加的数字创建 String 并遍历字符。

public static boolean isResultBinary(int n1, int n2) {
    String sum = n1 + n2 + "";
    for (int i = 0; i < sum.length(); i++) {
        char c = sum.charAt(i);
        if (c != '1' && c != '0') return false;
    }
    return true;
}

这是我写的一个方法,它检查每个字符 c 看它是否是 '0''1'。如果一个字符不是其中任何一个,该方法将 return false。否则,它将遍历整个字符串和 return true.

要获得所需的输出,请在主方法中使用如下方法:

if (isResultBinary(n1, n2)) System.out.println("The addition only has 1's and 0's");
else System.out.print("The addition does not only have 1's and 0's");

这是对这个问题的另一种看法。

  • 将总和转换为字符串,然后尝试将其解析为二进制。
  • 如果不是二进制,会抛出异常,所以return false.
  • 否则 return 正确。
int[] sums = { 110, 120, 10111, 250, 203, 2011, 1110111 };
for (int n : sums) {
    System.out.printf("%8s - %s%n", n,
            "is " + (checkOnesAndZeros(n) ? "" : "not ")
                    + "all ones and zeros");
}

打印

     110 - is all ones and zeros
     120 - is not all ones and zeros
   10111 - is all ones and zeros
     250 - is not all ones and zeros
     203 - is not all ones and zeros
    2011 - is not all ones and zeros
 1110111 - is all ones and zeros

方法

public static boolean checkOnesAndZeros(int resultantSum) {
    try {
        Integer.parseInt(Integer.toString(resultantSum), 2);
        return true;
    } catch (NumberFormatException nfe) {
        return false;
    }
}