二进制到十进制 - java
Binary to Decimal - java
我想编写一个程序来接收字符串值并打印十进制数。
此外,如果字符串值不是1或0,我需要打印一条消息。
我写了这段代码,但它总是进入 if 命令。
非常感谢您的支持!
谢谢
import java.util.Random;
public class Decimal {
public static void main(String[] args) {
String input = (args[0]);
int sum = 0;
for (int i = 0; i <= input.length(); i++) {
if (!(input.charAt(i) == '0') || (input.charAt(i) == '1')) {
System.out.println("wrong string");
break;
}
char a = input.charAt(i);
if (a == '1') {
sum |= 0x01;
}
sum <<= 1;
sum >>= 1;
System.out.println(sum);
}
}
}
if
语句的!
(非)运算符只适用于第一部分:
if ( ! (input.charAt(i) == '0')
||
(input.charAt(i) == '1')
) {
所以这与:
if ((input.charAt(i) != '0') || (input.charAt(i) == '1')) {
当你真正打算做的时候:
if (input.charAt(i) != '0' && input.charAt(i) != '1') {
不过这是一件好事,因为一旦成功,您将在 i == input.length()
时获得 IndexOutOfBoundsException
。将循环更改为:
for (int i = 0; i < input.length(); i++) {
为了提高性能,将变量 a
向上移动并在第一个 if
语句中使用它。重命名为 c
或 ch
更 descriptive/common.
同时执行 sum <<= 1
和 sum >>= 1
让您回到起点。那是你想要的吗?您还应该在 设置最右边的位之前进行左移 。
应用所有这些,我相信你打算这样做:
String input = args[0];
int sum = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c != '0' && c != '1') {
System.out.println("wrong string");
break;
}
sum <<= 1;
if (c == '1')
sum |= 1;
}
System.out.println(sum);
我想编写一个程序来接收字符串值并打印十进制数。
此外,如果字符串值不是1或0,我需要打印一条消息。
我写了这段代码,但它总是进入 if 命令。
非常感谢您的支持!
谢谢
import java.util.Random;
public class Decimal {
public static void main(String[] args) {
String input = (args[0]);
int sum = 0;
for (int i = 0; i <= input.length(); i++) {
if (!(input.charAt(i) == '0') || (input.charAt(i) == '1')) {
System.out.println("wrong string");
break;
}
char a = input.charAt(i);
if (a == '1') {
sum |= 0x01;
}
sum <<= 1;
sum >>= 1;
System.out.println(sum);
}
}
}
if
语句的!
(非)运算符只适用于第一部分:
if ( ! (input.charAt(i) == '0')
||
(input.charAt(i) == '1')
) {
所以这与:
if ((input.charAt(i) != '0') || (input.charAt(i) == '1')) {
当你真正打算做的时候:
if (input.charAt(i) != '0' && input.charAt(i) != '1') {
不过这是一件好事,因为一旦成功,您将在 i == input.length()
时获得 IndexOutOfBoundsException
。将循环更改为:
for (int i = 0; i < input.length(); i++) {
为了提高性能,将变量 a
向上移动并在第一个 if
语句中使用它。重命名为 c
或 ch
更 descriptive/common.
同时执行 sum <<= 1
和 sum >>= 1
让您回到起点。那是你想要的吗?您还应该在 设置最右边的位之前进行左移 。
应用所有这些,我相信你打算这样做:
String input = args[0];
int sum = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c != '0' && c != '1') {
System.out.println("wrong string");
break;
}
sum <<= 1;
if (c == '1')
sum |= 1;
}
System.out.println(sum);