📄 rate.java
字号:
{
return 1;
}
case RateType.Strung_tag:
{
return 1;
}
case RateType.Plus_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Mult_tag:
{
Rate.Mult case11 = (Rate.Mult)this;
Rate out2 = case11.r2;
Rate out1 = case11.r1;
{
switch (r.type) {
case RateType.Mult_tag:
{
Rate.Mult case21 = (Rate.Mult)r;
Rate in2 = case21.r2;
Rate in1 = case21.r1;
int temp = out1.compare(in1);
if (temp != 0) return temp;
return out2.compare(in2);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
{
return 1;
}
case RateType.Strung_tag:
{
return 1;
}
case RateType.Plus_tag:
{
return 1;
}
case RateType.Sub_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Div_tag:
{
Rate.Div case11 = (Rate.Div)this;
Rate out2 = case11.r2;
Rate out1 = case11.r1;
{
switch (r.type) {
case RateType.Div_tag:
{
Rate.Div case21 = (Rate.Div)r;
Rate in2 = case21.r2;
Rate in1 = case21.r1;
int temp = out1.compare(in1);
if (temp != 0) return temp;
return out2.compare(in2);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
{
return 1;
}
case RateType.Strung_tag:
{
return 1;
}
case RateType.Plus_tag:
{
return 1;
}
case RateType.Sub_tag:
{
return 1;
}
case RateType.Mult_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Min_tag:
{
Rate.Min case11 = (Rate.Min)this;
Rate out2 = case11.r2;
Rate out1 = case11.r1;
{
switch (r.type) {
case RateType.Min_tag:
{
Rate.Min case21 = (Rate.Min)r;
Rate in2 = case21.r2;
Rate in1 = case21.r1;
int temp = out1.compare(in1);
if (temp != 0) return temp;
return out2.compare(in2);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
{
return 1;
}
case RateType.Strung_tag:
{
return 1;
}
case RateType.Plus_tag:
{
return 1;
}
case RateType.Sub_tag:
{
return 1;
}
case RateType.Mult_tag:
{
return 1;
}
case RateType.Div_tag:
{
return 1;
}
}
throw new Error(); // inserted for safety
}
}
}
return -1;
}
public Rate evalRate() throws RateException
{
Rate first;
Rate second;
switch(this.type)
{
case RateType.Spec_tag:
{
return this;
}
case RateType.Strung_tag:
{
String s=((Strung)this).item;
if(iseval==true) return Rate.Number(new Double(1.0));
if(Rate.def(s).equals((Object)new Double(1.0))) return this;
else return Spec(s);
}
case RateType.Unspec_tag:
{
return this;
}
case RateType.Number_tag:
{
return this;
}
case RateType.Plus_tag:
{
Plus r=(Plus)this;
Rate r1=r.r1;
Rate r2=r.r2;
switch(r1.type)
{
case RateType.Spec_tag:
{
first=r1;
break;
}
case RateType.Unspec_tag:
{
first=r1;
break;
}
default:
{
first=r1.evalRate();
break;
}
}
switch(r2.type)
{
case RateType.Spec_tag:
{
second=r2;
break;
}
case RateType.Unspec_tag:
{
second=r2;
break;
}
default:
{
second=r2.evalRate();
break;
}
}
return first.plus(second);
}
case RateType.Min_tag:
{
Min r=(Min)this;
Rate r1=r.r1;
Rate r2=r.r2;
switch(r1.type)
{
case RateType.Spec_tag:
{
first=r1;
break;
}
case RateType.Unspec_tag:
{
first=r1;
break;
}
default:
{
first=r1.evalRate();
break;
}
}
switch(r2.type)
{
case RateType.Spec_tag:
{
second=r2;
break;
}
case RateType.Unspec_tag:
{
second=r2;
break;
}
default:
{
second=r2.evalRate();
break;
}
}
return first.min(second);
}
case RateType.Mult_tag:
{
Mult r=(Mult)this;
Rate r1=r.r1;
Rate r2=r.r2;
switch(r1.type)
{
case RateType.Spec_tag:
{
first=r1;
break;
}
case RateType.Unspec_tag:
{
first=r1;
break;
}
default:
{
first=r1.evalRate();
break;
}
}
switch(r2.type)
{
case RateType.Spec_tag:
{
second=r2;
break;
}
case RateType.Unspec_tag:
{
second=r2;
break;
}
default:
{
second=r2.evalRate();
break;
}
}
return first.mult(second);
}
case RateType.Sub_tag:
{
Sub r=(Sub)this;
Rate r1=r.r1;
Rate r2=r.r2;
switch(r1.type)
{
case RateType.Spec_tag:
{
first=r1;
break;
}
case RateType.Unspec_tag:
{
first=r1;
break;
}
default:
{
first=r1.evalRate();
break;
}
}
switch(r2.type)
{
case RateType.Spec_tag:
{
second=r2;
break;
}
case RateType.Unspec_tag:
{
second=r2;
break;
}
default:
{
second=r2.evalRate();
break;
}
}
return first.minus(second);
}
case RateType.Div_tag:
{
Div r=(Div)this;
Rate r1=r.r1;
Rate r2=r.r2;
switch(r1.type)
{
case RateType.Spec_tag:
{
first=r1;
break;
}
case RateType.Unspec_tag:
{
first=r1;
break;
}
default:
{
first=r1.evalRate();
break;
}
}
switch(r2.type)
{
case RateType.Spec_tag:
{
second=r2;
break;
}
case RateType.Unspec_tag:
{
second=r2;
break;
}
default:
{
second=r2.evalRate();
break;
}
}
return first.div(second);
}
}
throw new Error();
}
public String toString()
{
switch(this.type)
{
case RateType.Div_tag:
{
Div r=(Div)this;
Rate r1=r.r1;
Rate r2=r.r2;
return "("+r1.toString()+"/"+r2.toString()+")";
}
case RateType.Min_tag:
{
Min r=(Min)this;
Rate r1=r.r1;
Rate r2=r.r2;
return "("+r1.toString()+","+r2.toString()+")";
}
case RateType.Mult_tag:
{
Mult r=(Mult)this;
Rate r1=r.r1;
Rate r2=r.r2;
return "("+r1.toString()+"*"+r2.toString()+")";
}
case RateType.Plus_tag:
{
Plus r=(Plus)this;
Rate r1=r.r1;
Rate r2=r.r2;
return "("+r1.toString()+"+"+r2.toString()+")";
}
case RateType.Sub_tag:
{
Sub r=(Sub)this;
Rate r1=r.r1;
Rate r2=r.r2;
return "("+r1.toString()+"+"+r2.toString()+")";
}
case RateType.Spec_tag:
{
String s = ((Spec)this).item;
return s+"="+this.def(s);
}
case RateType.Unspec_tag:
{
Double d=((Unspec)this).item;
return d+"*Top";
}
case RateType.Strung_tag:
{
String s=((Strung)this).item;
return s;
}
case RateType.Number_tag:
{
Double d=((Number)this).getRate();
return d.toString();
}
}
return null;
}
public boolean isPassive()
{
if(this.type==RateType.Unspec_tag)
return true;
else return false;
}
public double fintValue() throws RateException
{
switch(this.type)
{
case RateType.Spec_tag:
{
Spec r=(Spec)this;
String s=r.item;
return def(s).doubleValue();
}
case RateType.Number_tag:
{
Number r=(Number)this;
return r.getRate().doubleValue();
}
}
throw new RateException("Can't transfer the rate to double");
}
public static class Spec extends Rate
{
public String item;
public Spec(String rate)
{
type =RateType.Spec_tag;
this.item = rate;
}
public Double getRate()
{
return def(item);
}
}
public static class Number extends Rate
{
private Double item;
public Number(Double d)
{
type=RateType.Number_tag;
item=d;
}
public Double getRate()
{
return item;
}
}
public static class Unspec extends Rate
{
private Double item;
public Unspec(Double d)
{
type=RateType.Unspec_tag;
item=d;
}
}
public static class Strung extends Rate
{
private String item;
public Strung(String s)
{
type=RateType.Strung_tag;
item=s;
}
}
public static class Sub extends Rate
{
Rate r1;
Rate r2;
public Sub(Rate R1,Rate R2)
{
type=RateType.Sub_tag;
r1=R1;
r2=R2;
}
}
public static class Div extends Rate
{
Rate r1;
Rate r2;
public Div(Rate R1,Rate R2)
{
type=RateType.Div_tag;
r1=R1;
r2=R2;
}
}
public static class Mult extends Rate
{
Rate r1;
Rate r2;
public Mult(Rate R1,Rate R2)
{
type=RateType.Mult_tag;
r1=R1;
r2=R2;
}
}
public static class Plus extends Rate
{
Rate r1;
Rate r2;
public Plus(Rate R1,Rate R2)
{
type=RateType.Plus_tag;
r1=R1;
r2=R2;
}
}
public static class Min extends Rate
{
Rate r1;
Rate r2;
public Min(Rate R1,Rate R2)
{
type=RateType.Min_tag;
r1=R1;
r2=R2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -