Создание класса, который обрабатывает двоичные числа и преобразует их в десятичное значение, которое клиентский класс выводит на печать - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть класс 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;
}
}
...