omkumarbitsindri
BAN USERThanks..
- omkumarbitsindri December 13, 2012it works without parenthesis ....
public class MainCalc {
public static void main(String[] args) {
System.out.println("Enter Expression:");
Scanner scan=new Scanner(System.in);
String equation=scan.next();
//String equation="(2*3)/5"; //MY CHALLENGE
//System.out.println(equation);
String answer=equation;
Operation opcode=new Operation();
StringTokenizer sto=new StringTokenizer(equation, "0123456789");
StringBuffer sbuf=new StringBuffer();
while (sto.hasMoreTokens()) {
sbuf.append(sto.nextToken());
}
String opcheck =sbuf.toString();
if(opcheck.contains("(")){
}
if(opcheck.contains("/")){
opcode.divMethod(equation);
answer= opcode.resultFinal;
// System.out.println(answer);
}
if(opcheck.contains("*")){
//
// System.out.println(answer);
opcode.multMethod(answer);
answer=opcode.resultFinal;
// System.out.println(answer);
}
if(opcheck.contains("+")){
opcode.plusMethod(answer);
answer=opcode.resultFinal;
}
if(opcheck.contains("-")){
opcode.minusMethod(answer);
answer=opcode.resultFinal;
}
System.out.println(answer);
}
}
public class Operation {
public String resultFinal;
public void divMethod( String string){
StringTokenizer sto=new StringTokenizer(string, "+-*/");
int lenght=0;
while(sto.hasMoreTokens()){
sto.nextToken();
lenght++;
}
if(lenght==1){}
else{
int [] numberlist=new int[lenght];
StringTokenizer stnk=new StringTokenizer(string,"+-*/");
int i=0;
while(stnk.hasMoreTokens()){
numberlist[i]=Integer.parseInt(stnk.nextToken());
i++;
}
StringBuffer strbuf=new StringBuffer();
StringTokenizer stoken=new StringTokenizer(string, "[0123456789]");
while(stoken.hasMoreElements()){
strbuf.append(stoken.nextToken());
}
for(int k=0;k<1;k++){
int divindexfield=string.indexOf("/");
if(divindexfield!=-1){
int indexof=strbuf.indexOf("/");
// System.out.println(strbuf);
// System.out.println(indexof);
int temp=numberlist[indexof++]/numberlist[indexof];
indexof--;
int firstlenght=String.valueOf(numberlist[indexof++]).length();
int secondlengh=String.valueOf(numberlist[indexof]).length();
StringBuffer stb=new StringBuffer();
stb.append(string);
stb.replace(divindexfield-firstlenght,divindexfield+secondlengh+1,String.valueOf(temp) );
String finalnewstring="";
finalnewstring=stb.toString();
resultFinal=finalnewstring;
// System.out.println(finalnewstring);
divMethod(finalnewstring);
}
}
}
}
public void multMethod( String string){
StringTokenizer sto=new StringTokenizer(string, "+-*/");
int lenght=0;
while(sto.hasMoreTokens()){
sto.nextToken();
lenght++;
}
if(lenght==1){}
else{
StringTokenizer strtok=new StringTokenizer(string, "+-*/");
int i=0;
int [] numberarray=new int[lenght];
while(strtok.hasMoreTokens()){
//System.out.println(strtok.nextToken());
numberarray[i]=Integer.parseInt(strtok.nextToken());
i++;
}
StringBuffer strbuf=new StringBuffer();
StringTokenizer strtoken=new StringTokenizer(string, "[0123456789]");
while(strtoken.hasMoreTokens()){
strbuf.append(strtoken.nextToken());
}
for(int k=0;k<1;k++){
int multindex=string.indexOf("*");
// System.out.println(multindex);
if(multindex!=-1){
int index=strbuf.indexOf("*");
int temp=numberarray[index++]*numberarray[index];
index--;
// System.out.println(strbuf);
int firststring=String.valueOf(numberarray[index++]).length();
// System.out.println(firststring);
int secondstring=String.valueOf(numberarray[index]).length();
//System.out.println(secondstring);
StringBuffer b=new StringBuffer();
b.append(string);
b.replace(multindex-firststring, multindex+secondstring+1, String.valueOf(temp));
String Finalstring="";
Finalstring=b.toString();
// System.out.println(Finalstring);
resultFinal =Finalstring;
multMethod(Finalstring);
}
}
}
}
public void minusMethod( String string){
StringTokenizer stkn = new StringTokenizer(string, "+-*/");
int length = 0;
while(stkn.hasMoreTokens()){
stkn.nextToken();
length++;
}
if(length==1){
}
else{
int[] numbersList = new int[length];
StringTokenizer noToken = new StringTokenizer(string, "-/*+");
int i=0;
while(noToken.hasMoreTokens()){
numbersList[i] = Integer.parseInt(noToken.nextToken());
i++;
}
StringBuffer noop = new StringBuffer();
StringTokenizer noOp = new StringTokenizer(string, "[0123456789]");
while(noOp.hasMoreTokens()){
noop.append(noOp.nextToken());
}
for(int k=0;k<1;k++){
int divIndexFind = string.indexOf("-");
if(divIndexFind!=-1){
int indexOp = noop.indexOf("-");
int temp = numbersList[indexOp++]-numbersList[indexOp];
indexOp--;
int firstLength = String.valueOf(numbersList[indexOp++]).length();
int secondLength = String.valueOf(numbersList[indexOp]).length();
StringBuffer b = new StringBuffer();
b.append(string);
b.replace(divIndexFind-firstLength,divIndexFind+secondLength+1, String.valueOf(temp));
String finalNewString = "";
finalNewString = b.toString();
resultFinal = finalNewString;
minusMethod(finalNewString);
}
}
}
}
public void plusMethod( String string){
StringTokenizer stkn = new StringTokenizer(string, "+-*/");
int length = 0;
while(stkn.hasMoreTokens()){
stkn.nextToken();
length++;
}
if(length==1){
}
else{
int[] numbersList = new int[length];
StringTokenizer noToken = new StringTokenizer(string, "-/*+");
int i=0;
while(noToken.hasMoreTokens()){
numbersList[i] = Integer.parseInt(noToken.nextToken());
i++;
}
StringBuffer noop = new StringBuffer();
StringTokenizer noOp = new StringTokenizer(string, "[0123456789]");
while(noOp.hasMoreTokens()){
noop.append(noOp.nextToken());
}
for(int k=0;k<1;k++){
int divIndexFind = string.indexOf("+");
if(divIndexFind!=-1){
int indexOp = noop.indexOf("+");
int temp = numbersList[indexOp++]+numbersList[indexOp];
indexOp--;
int firstLength = String.valueOf(numbersList[indexOp++]).length();
int secondLength = String.valueOf(numbersList[indexOp]).length();
StringBuffer b = new StringBuffer();
b.append(string);
b.replace(divIndexFind-firstLength,divIndexFind+secondLength+1, String.valueOf(temp));
String finalNewString = "";
finalNewString = b.toString();
resultFinal = finalNewString;
plusMethod(finalNewString);
}
}
}
}
}
Many thanks...
- omkumarbitsindri December 13, 2012