接頭辞計算クラスのエラーを特定しようとしていますが、うまくいきません。
予想される出力は次のようになります: InFix: "2+4" (例) PostFix: "24+" PreFix: " 24" (ここにエラーがあります)
プレフィックスを計算するクラスは次のとおりです。
public class PreEva {
private String prefijo;
private String iString;
public PreEva(String iString){
int longitud = iString.length(); //kinda redundant
char p1[]=new char[longitud], p2[]=new char[longitud];
prefijo="";
int contp1=0, contp2=0;
for(int i=longitud-1;i>=0;i--){
char tmp=iString.charAt(i);
switch(tmp){
case '^':case')':
if(contp2<=0){ //If p2 is empty, inputs the operator
p2[contp2]=tmp;
contp2++;
}
else{
p2[contp2]=tmp;
contp2++;
}break;
case '/':case '*':
if(contp2<=0){ //If p2 is empty, inputs the operator
p2[contp2]=tmp;
contp2++;
}
else{
if(p2[contp2-1]=='^'){
while(p2[contp2]-1=='^'){
for(int j=contp2; j>0; j--){ //Passes to p1
if(p2[contp2-1]==p2[contp2-2]){
contp2=j-1;
j=0;
}
else{
p1[contp1]=p2[j-1];
contp1++;
}
contp2++;
}
p2[contp2]=tmp;
contp2++;
}
}
else{
p2[contp2]=tmp;
contp2++;
}
}break;
case '+':case '-':
if(contp2<=0){ //Ifthere's nothing in p2, inputs the operator
p2[contp2]=tmp;
contp2++;
}
else{
if(p2[contp2-1]==')'||p2[contp2-1]=='+'||p2[contp2-1]=='-'){
p2[contp2]=tmp;
contp2++;
}
else{
while(!(p2[i-1]==')'||p2[i-1]=='+'||p2[i-1]=='-')){
for(int j=contp2; j>0; j--){ //Paso a p1
if(p2[contp2-1]==p2[contp2-2]){
contp2=j-1;
j=0;
}
else{
p1[contp1]=p2[j-1];
contp1++;
}
contp2++;
}
p2[contp2]=tmp;
contp2++;
}
}
}break;
case '(':
if(contp2<=0){ //If there is nothing adds to p2
p2[contp2]=tmp;
contp2++;
}
else{
for(int j=contp2; j>0; j--){ //To p1
if(p2[contp2-1]==')'){ //If the one under tmp is ')', drops the counter(subtracs from counter i believe is more accurate)
contp2=j-1;
j=0;
}
else{
p1[contp1]=p2[j-1];
contp1++;
}
}
}break;
default:p1[contp1]=tmp;
contp1++;
break;
}
}
for(int i=longitud-1; i>=0 ;i--){
prefijo=""+prefijo+""+p1[i];
}
}
/* Retornar Resultado */
public String getOS(){
return prefijo;
}
私のコードを改善する方法やこのエラーを修正する方法について誰かが提案を持っている場合は、大歓迎です!
事前にthx。