如何在实例方法中添加基于14的数字?

时间:2018-08-07 01:39:30

标签: java class instance

因此,我在创建实例方法以添加两个基于14的数字时遇到麻烦,我想知道是否有人可以提供帮助?我对Java有点陌生,但在整体上还是有些困惑。到目前为止,我已经有了将基于14的数字转换为以10为底的代码,然后需要添加它们并将其转换回以14为底。我想将它们全部放在一个实例类中,但是我觉得把一个实例类放进去实在太多了。

这是我要让客户端代码像这样的输入:

  

PokerNum sum = num1.add(num2);

 import java.util.Scanner;
 public class PokerNum{

  String alienNum;
  int num1, num2;

   public PokerNum(String alienNum) throws IllegalArgumentException{
   this.alienNum = alienNum;
   String toUpper = alienNum.toUpperCase();
   for (int i = 0; i < toUpper.length(); i++){
    char c = toUpper.charAt(i);
     if (!(Character.isDigit(c) || c == 'A' || c == 'J' || c == 'Q' || c == 'K')){
      throw new IllegalArgumentException("invalid input"); 
      }
  }
}


  // initialized at zero 
  public PokerNum() {
  this.num1=0;
  this.num2=0;

  }

    @Override public String toString(){
    return PokerNum()+ " ";
     }

  //add pokernums
  public PokerNum add(PokerNum another){
     PokerNum num = new PokerNum();
     this.num1 = another.num1;
     this.num2 = another.num2;

  public PokerNum convert(PokerNum pn){
     char[] firstNum = num1.toCharArray();
     int amountValue = 0;
     int length = characters.length;
     for (int index = 0; index < length; index++){
        int symbolValue;
        switch (characters[index]) {
           case 'A':
              symbolValue = 10; 
              break;
           case 'J':
              symbolValue = 11;
              break;
           case 'Q':
              symbolValue = 12;
              break;
           case 'K': 
              symbolValue= 13;
              break;
           default: 
              symbolValue = characters[index] - 48;
     }
     amountValue += symbolValue*Math.pow(14, length - index - 1);
  }



     StringBuilder result1 = new StringBuilder();
     while(amountValue > 0){
        int digit = amountValue%14;
        switch (digit) {
           case 10:
              result.insert(0, 'A');
              break;
           case 11:
              result.insert(0, 'J');
              break; 
           case 12:
              result.insert(0, 'Q');
              break;
           case 13:
              result.insert(0, 'K');
              break; 
           default:
              result.insert(0, digit);
     }
     amountValue-=digit;
     amountValue/=14;
     String firstValue = result1.toString();
  }
}






     char[] secNum = num2.toCharArray();
     int amountValue2= 0;
     int length = secNum.length;
     for (int index = 0; index < length; index++){
        int symbolValue;
        switch (characters[index]) {
           case 'A':
              symbolValue = 10; 
              break;
           case 'J':
              symbolValue = 11;
              break;
           case 'Q':
              symbolValue = 12;
              break;
           case 'K': 
              symbolValue= 13;
              break;
           default: 
              symbolValue = characters[index] - 48;
     }
     amountValue2+= symbolValue*Math.pow(14, length - index - 1);
  }

     StringBuilder result = new StringBuilder();
     while(amountValue2> 0){
        int digit = amountValue%14;
        switch (digit) {
           case 10:
              result.insert(0, 'A');
              break;
           case 11:
              result.insert(0, 'J');
              break; 
           case 12:
              result.insert(0, 'Q');
              break;
           case 13:
              result.insert(0, 'K');
              break; 
           default:
              result.insert(0, digit);
     }
     amountValue2-=digit;
     amountValue2/=14;
     PokerNum secondValue = result.toString();
  }
  return firstValue + secondValue; 









   /*PokerNum sum = num1 + 
  PokerNum another.num2 = 





  return sum;*/
 }

感谢提前提供帮助的人:)

1 个答案:

答案 0 :(得分:1)

我相信您可以将其保存在一个实例中。一种建议是使用以下功能进行转换:

Integer.parseInt(String s, int radix)
Integer.toString(int i, int radix)

javadoc说产生的字符串将使用:

  

0123456789abcdefghijklmnopqrstuvwxyz

因此,如果我们选择radix = 14,它将具有0123456789abcd。

逻辑思想是将实际数字保持为int,并在创建和打印输出时将String转换为String。我们只需保留成员变量num1并删除成员变量alienNumnum2

构造函数

您的带有String参数的构造函数似乎可以很好地进行错误检查。我们需要的只是将字符串转换为整数并将其存储在成员变量中。首先,我们需要将所有有效的字符串从AJQK转换为ABCD。此处的示例效率低下,但可以使您理解:

//alienNum = alienNum.replace('A', 'A'); // no need
alienNum = alienNum.replace('J', 'B');
alienNum = alienNum.replace('Q', 'C');
alienNum = alienNum.replace('K', 'D');

然后我们可以调用解析方法:

num1 = Integer.parseInt(alienNum , 14);

通过将num1的值初始化为0,您的空arg构造函数已经可以了。

添加

加法中的方法不正确,因为它正在将当前值设置为加法。这里有三个对象:numthisanother。您要将this中的another添加到num中并返回num

num.num1 = this.num1 + another.num1;

输出

我假设输出将来自toString()。在这种情况下,您要从整数转换为字符串,然后将其转换为正确的字符

String out = Integer.toString(num1, 14).toUpper();
//alienNum = alienNum.replace('A', 'A'); // no need
alienNum = alienNum.replace('B', 'J');
alienNum = alienNum.replace('C', 'Q');
alienNum = alienNum.replace('D', 'k');

您现在可能不需要转换方法。