Я создаю программу для своего конвертера номера gui. Я хочу, чтобы моя программа запрашивала у пользователя двоичную строку, и если он не вводит двоичный номер, программа покажет ему сообщение об ошибке и попросит его войти снова. Проблема состоит в том, что я могу добавить ограничение на алфавиты, но когда дело доходит до чисел, то это выходит из строя или оно продолжает показывать сообщение об ошибке.
import java.util.*;
public class test {
Scanner key = new Scanner(System.in);
String in;
int b;
public test(){
do{
System.out.println("Enter the binary string of 5 numbers");
in = key.nextLine();
int i,j;
char ch;
for (i=0 ; i<=5 ; i++){
b = 0;
ch = in.charAt(i);
j = ch;
if (Character.isDigit(ch) && ch<=0 && ch>=1)
b = 1;
else
System.out.println("Please enter a binary number (1 , 0)");
break;
//b = 1;
}
}while(b != 1);
int c;
c = Integer.parseInt(in);
System.out.println("your number is: " + c );
}
public static void main (String args[]){
test obj = new test();
}
}
ch<=0 && ch>=1
не делает того, что вы думаете. Коды символов для "0" и "1" равны 48 и 49, поэтому вы должны их проверить. Кроме того, ваши >=
компараторы назад, но это не самый ясный способ написать этот код. И поскольку вы сравниваете только эти два значения, Character.isDigit(ch)
является избыточным.
Попробуйте один из них:
ch == 48 || ch == 49
ch == '0' || ch == '1'
Scanner
имеет перегруженный метод nextInt
который использует радиус
int binaryNumber = scanner.nextInt(2);
1) Первая логическая ошибка здесь for (i=0; i<=5; i++)
заменить i<=5
на i<5
2) измените условие if else, как показано ниже
if (Character.isDigit(ch) && (ch == '0' || ch == '1'))
{
b = 1;
}
else
{
System.out.println("Please enter a binary number (1 , 0)");
break;
}
{ }
в части 2) или я что-то упустил?