两个给定数字相加
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;
}
}
基本上是关于二进制数,用户需要输入两个随机数,两个数都会相加,两个数相加只需要有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;
}
}