У меня есть класс HexStringHandlerClient, который выглядит следующим образом:
package experiment7;
import java.util.Scanner;
public class HexStringHandlerClient
{
public static void main( String [] args )
{
Scanner scan = new Scanner( System.in );
System.out.print( "Enter a hexadecimal number > " );
String hex = scan.next( );
HexStringHandler hsh = new HexStringHandler( );
hsh.parse( hex );
if ( hsh.isValid( ) )
System.out.println( hex + " = " + hsh.getNumber( ) );
else
System.out.println( hex + " is not a valid hex number." );
}
}
У меня также есть класс HexStringHandler, который выглядит следующим образом:
package experiment7;
public class HexStringHandler
implements StringHandler, Validator
{
private boolean validHex;
private int number;
/** default constructor
* initializes number to 0
* and validHex to true
*/
public HexStringHandler( )
{
validHex = true;
number = 0;
}
/** processLetter method
* @param c the character to process
* if c is between 10 and 15 (hex A through F),
* uses its value to update the decimal number
* otherwise, character is invalid letter
*/
@Override
public void processLetter( char c )
{
int n = Character.getNumericValue( c );
if ( n >= 10 && n <= 15 ) // valid hex character?
number = 16 * number + n; // update number
else // invalid hex character
validHex = false;
}
/** processDigit method
* @param c the character to process
* uses numeric value to update the decimal value
*/
@Override
public void processDigit( char c )
{
int n = Character.getNumericValue( c );
number = 16 * number + n; // update number
}
/** processOther method
* @param c the character to process
* character is not a valid hex digit
*/
@Override
public void processOther( char c )
{
// c is an invalid hex character
validHex = false;
}
/** isValid method
* @return true if all characters
* in String are valid hex characters,
* else returns false
*/
public boolean isValid( )
{
return validHex;
}
/** getNumber method
* @return if valid, returns the calculated decimal value
* else, returns -1
*/
public int getNumber( )
{
if ( isValid( ) )
return number;
else
return -1;
}
}
Наконец, у меня есть другой клиентский класс для класса BinStringHandler:
package lab7;
import java.util.Scanner;
public class BinStringHandlerClient
{
public static void main( String [] args )
{
Scanner scan = new Scanner( System.in );
System.out.print( "Enter a binary number > " );
String bin = scan.next( );
BinStringHandler bsh = new BinStringHandler( );
bsh.parse( bin );
if ( bsh.isValidBin( ) )
System.out.println( bin + " = " + bsh.getBinNumber( ) );
else
System.out.println( bin + " is not a valid binary number." );
}
}
Мой вопрос заключается в том, как бы создать класс BinStringHandler, который бы обрабатывал двоичные числа (а не шестнадцатеричные, как класс HexStringHandler) и преобразовывал их в десятичные значения, которые его клиент класс распечатал бы? Класс должен выглядеть аналогично моему классу HexStringHandler, но я немного растерялся из-за того, как его настроить, особенно в методах processLetter и processDi git. Это то, что я до сих пор:
package experiment7;
public class BinStringHandler
implements StringHandler, Validator
{
private boolean validBin;
private int binNumber;
public BinStringHandler( )
{
validBin = true;
binNumber = 0;
}
@Override
public boolean isValid() {
return false;
}
@Override
public void processLetter(char c) {
//Insert code here
}
@Override
public void processDigit(char c) {
//Insert code here
}
@Override
public void processOther(char c) {
validBin = false;
}
public boolean isValidBin() {
return validBin;
}
public int getBinNumber() {
if ( isValidBin( ) )
return binNumber;
else
return -1;
}
}