Я пытаюсь написать программу, которая будет проверять, является ли введенная пользователем строка двоичным числом, и если она есть, она выведет число 1 в номер. У меня была эта работа с целым значением, но поскольку int не может содержать более 2 миллиардов или что-то большее, я пытаюсь переписать его для работы со строками.Проверка, была ли строка введена двоичным числом, получение неправильного вывода
На данный момент любое число, которое я вводил, будет выводить «Введенный номер не является двоичным». и когда я введу 0, я получу исключение StringIndexOutofBoundsException. Я довольно начинающий программист, поэтому прощайте любые очевидные ошибки, которые я, возможно, пропустил, я просто прошу о возможном решении моей проблемы или толчке в правильном направлении. Вот мой код (после попытки заставить его работать со строками, а не целые числа):
import java.util.*;
public class BinaryHW {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.println("Enter a binary number: ");
String bin = kb.nextLine();
//the method I used to check whether or not user entered a binary
//number requires changing the value of 'bin'.
//Therefore, 'origBin' set equal to 'bin' for later use.
String origBin = bin;
int count = 0;
boolean isBinary = true;
/* if bin = 0, then this loop will be skipped because
* 0 is a binary number and need not be checked.
*/
while (Integer.parseInt(bin) != 0) {
int lastDigit = bin.charAt(bin.length() - 1);
if (lastDigit > 1) {
System.out.println("Number entered is not binary.");
isBinary = false;
break;
} else {
bin = bin.substring(bin.length() - 2);
}
}
//Again, the method I used to count the 1s in the bin number
//requires changing the value of origBin, so origBin2 is introduced
String origBin2 = origBin;
for (int i = 0; i < origBin.length(); i++) {
if (origBin.charAt(origBin.length() - 1) == 1) {
count ++;
origBin2 = origBin.substring(origBin2.length() - 2);
} else {
origBin2 = origBin.substring(origBin2.length() - 2);
}
}
if (isBinary)
if (count == 1)
System.out.println("There is "
+ count + " 1 in the binary number entered.");
else
System.out.println("There are "
+ count + " 1s in the binary number entered.");
}
}
В вашей петле нет никакого смысла. Что вы пытаетесь достичь? Конечно, вы получите индекс за пределами поля, когда вы вызываете 'origBin2.length() - 2' на строку длиной 1 – redFIVE
. Вы также были смущены символом« 1 »и шестнадцатеричным 1, поэтому вы всегда получить «введенный номер не является двоичным» –
Джонатан, вам нужно действительно потратить некоторое время на чтение документации о ваших методах, которые вы пытаетесь использовать. – redFIVE