Java - 通过构造函数从String输入中提取多项式变量

时间:2012-03-17 18:33:15

标签: java

我希望有人可以帮我解决这个问题。我试图添加一个构造函数,允许从3x^y形式的字符串输入多项式数据,并将系数,变量和指数值放入类中定义的相应变量。我实现的构造函数允许程序编译,但在运行应用程序时会冻结...

这样:

trinomial[0] = new Term (3,'x',2);

设置为:

trinomial[0] = new Term ("3x^y");

基本上,我试图让定义的类接受两种形式的输入(字符串和双/字符/指数格式)。对此的任何帮助将不胜感激。

public class TrinomialTest {

  static void printTrinomial(Term [] x) {

    for(int i=0;i<x.length;i++){
       System.out.print(x[i]);   //AUTOMATICALLY CALLS TOSTRING() WHEN PRINTLN

    }
  }

public static void main(String[] args) {

Term [] trinomial = new Term [3];

trinomial[0] = new Term (3,'x',2);

trinomial[1] = new Term (12, 'x', 1);

trinomial[2] = new Term (-23, 'x', 0);

printTrinomial(trinomial);

}

}

class Term {

private double coefficient; //the number

private char variable; // the letter

private int exponent;



public Term (double c, char v, int e) {

coefficient = c;

variable = v;

exponent = e;

}
//New Constructor
//
public Term (String Term) {

String c = "";
String v = "";
String e = "";
int exponentIndex = 0; 
exponentIndex = Term.indexOf("^");


if(Term.substring(0,1).matches("[0-9]")){
    c = Term.substring(0,1);
    v = Term.substring(1,2);
}   
else{
    c = "0";
    v = Term.substring(0,1);
}


do{
    e = Term.substring(exponentIndex,exponentIndex+1);
}while(Term.indexOf("^")!=-1);



coefficient = Double.parseDouble(c);
variable = v.charAt(0);
exponent = Integer.parseInt(e);
}

public String toString() {

  int c = (int)coefficient;



if (exponent==1&&c>0)
return (""+"+"+c+variable);
else if (exponent==1&&c<0)
return (""+c+variable); 
else if (exponent==0&&c>0)
return (""+"+"+c);
else if (exponent==0&&c<0)
return (""+c);


return (""+c+variable+"^"+exponent);    
}




}           

1 个答案:

答案 0 :(得分:2)

简单的解决方案:

String term = "32x^33";
String[] tokens = term.split("\\^");
String coeff = tokens[0].substring(0, tokens[0].length()-1);
String var = tokens[0].substring(tokens[0].length()-1, tokens[0].length());
String exp = tokens[1];
System.out.println("coeff = "+coeff+", var = "+var+", exp = "+exp);