如何在java中将上标中的字符超过9?

时间:2014-09-28 13:30:55

标签: java math superscript binomial-theorem

所以我在BlueJ环境下用Java编写程序来计算二进制扩展。但是,我似乎无法弄清楚如何在输出中添加超过9的功率。 如果我的输入功率超过9,程序会变得混乱,大概是因为在9之后没有任何情况。

另外,我个人觉得我的程序效率非常低,但我今天早上就做了,这是我看到的第一种方法,所以如果你看到一种比使用switch case更有效的方法,那就是也很棒。

到目前为止,这是我的代码。这不是我的全部,但我不确定知识产权和资料是否适用于此,所以就把它放在那里。

    import java.util.*;
    class Binomial_Theorem_Expansion
    {
        public static void main(String args[])
        {
        Scanner s=new Scanner(System.in);
        System.out.println("Enter the value of x in (x+a)^n");
        int x=s.nextInt();
        System.out.println("Enter the value of a in (x+a)^n");
        int a=s.nextInt();
        System.out.println("Enter the value of n in (x+a)^n");
        int n=s.nextInt();
        System.out.println ("The expanded answer is");
        int r=0;
        int powx=n;
        while (r<=n)
            {
              long nCr=calculatenCr(n,r);
              if(nCr!=-1)

                 {
                    double y=Math.pow((double)x,(double)n-r);
                    double z=Math.pow((double)a,(double)r);
                    switch (powx) 
                          {
                            case 0: System.out.print ("("+nCr*y*z);
                            break;
                            case 1: System.out.print ("("+nCr*y*z+"x");
                            break;
                            case 2: System.out.print ("("+nCr*y*z+"x\u00B2");
                            break;
                            case 3: System.out.print ("("+nCr*y*z+"x\u00B3");
                            break;
                            case 4: System.out.print ("("+nCr*y*z+"x\u2074");
                            break;
                            case 5: System.out.print ("("+nCr*y*z+"x\u2075");
                            break;
                            case 6: System.out.print ("("+nCr*y*z+"x\u2076");
                            break;
                            case 7: System.out.print ("("+nCr*y*z+"x\u2077");
                            break;
                            case 8: System.out.print ("("+nCr*y*z+"x\u2078");
                            break;
                            case 9: System.out.print ("("+nCr*y*z+"x\u2079");
                            break;
                            case 10: System.out.print ("("+nCr*y*z+"x\u2071\u00B2");
                            break;
    }
    switch (r) {
        case 0: System.out.print (")"); 
        break;
        case 1: System.out.print ("y"+")");
        break;
        case 2: System.out.print ("y\u00B2"+")");
        break;
        case 3: System.out.print ("y\u00B3"+")");
        break;
        case 4: System.out.print ("y\u2074"+")");
        break;
        case 5: System.out.print ("y\u2075"+")");
        break;
        case 6: System.out.print ("y\u2076"+")");
        break;
        case 7: System.out.print ("y\u2077"+")");
        break;
        case 8: System.out.print ("y\u2078"+")");
        break;
        case 9: System.out.print ("y\u2079"+")");
        break;
    }
    r++;
    if (r<=n)
    {
                System.out.print ("+");
    }
    powx--;

}
}
    }
        public static long calculatenCr(int n,int r)
        {
                    long res=1;
                        if(n>=r)
                        {
                            res=getFact(n)/(getFact(n-r)*getFact(r));
                            return res;
                        }
                        else return -1;
                    }
                    public static long getFact(int n)
{
    long f=1;
    for(int i=n;i>=1;i--)
    {
    f*=i;
    }
return f;
}
}

感谢任何建设性的意见。 :)

1 个答案:

答案 0 :(得分:2)

  

大概是因为9之后没有案例。

您的代码使用的是UNICODE上标字符,而您覆盖的案例仅为x编号为0到10,y编号为0到9。

您可以通过定义一个方法来解决这个问题,该方法生成多位数的上标UNICODE转换,并从需要生成此类表示的两个位置调用它:

switch (powx) {
    case 0: System.out.print ("("+nCr*y*z);
        break;
    case 1: System.out.print ("("+nCr*y*z+"x");
        break;
    default: System.out.print ("("+nCr*y*z+"x"+toSuperscript(powx));
        break;
}

另一个开关(即switch (r))应该以类似的方式转换。

您可以通过生成String toSuperscript(int n)的十进制表示形式来实现n,然后将'0'替换为'\u2070',将'1'替换为'\u00B9',等等。