ZeldaX ZeldaX - 2 months ago 5
Java Question

From String to Integer Functions

I am trying to write a program that will receive a function as a String and solve it. For ex. "5*5+2/2-8+5*5-2" should return 41

I wrote the code for multiplication and divisions and it works perfectly:

public class Solver
{
public static void operationS(String m)
{
ArrayList<String> z = new ArrayList<String>();
char e= ' ';
String x= " ";
for (int i =0; i<m.length();i++)
{
e= m.charAt(i);
x= Character.toString(e);


z.add(x);
}
for (int i =0; i<z.size();i++)
{
System.out.print(z.get(i));
}

other(z);
}

public static void other(ArrayList<String> j)
{
int n1=0;
int n2=0;
int f=0;
String n= " ";
for (int m=0; m<j.size();m++)
{

if ((j.get(m)).equals("*"))
{
n1 = Integer.parseInt(j.get(m-1));
n2 = Integer.parseInt(j.get(m+1));
f= n1*n2;
n = Integer.toString(f);

j.set(m,n);
j.remove(m+1);
j.remove(m-1);

m=0;
}

for (int e=0; e<j.size();e++)
{

if ((j.get(e)).equals("/"))
{
n1 = Integer.parseInt(j.get(e-1));
n2 = Integer.parseInt(j.get(e+1));
f= n1/n2;
n = Integer.toString(f);

j.set(e,n);
j.remove(e+1);
j.remove(e-1);

e=0;
}

}
}

System.out.println();
for (int i1 =0; i1<j.size();i1++)
{
System.out.print(j.get(i1)+",");
}


However, for adding and subtracting, since there isnt an order for adding and subtracting, just whichever comes first, I wrote the following:

int x1=0;
int x2=0;
int x3=0;
String z = " ";

for (int g=0; g<j.size();g++)
{
if ((j.get(g)).equals("+"))
{
x1= Integer.parseInt(j.get(g-1));
x2= Integer.parseInt(j.get(g+1));
x3= x1+x2;
z = Integer.toString(x3);

j.set(g,z);
j.remove(g+1);
j.remove(g-1);

g=0;
}
g=0;

if ((j.get(g)).equals("-"))
{
x1= Integer.parseInt(j.get(g-1));
x2= Integer.parseInt(j.get(g+1));
x3= x1-x2;
z = Integer.toString(x3);

j.set(g,z);
j.remove(g+1);
j.remove(g-1);

g=0;
}

g=0;
}

System.out.println();
for (int i1 =0; i1<j.size();i1++)
{
System.out.print(j.get(i1)+",");
}


After this, it prints:


25,+,1,-,8,+,25,–,2,


. What am I doing wrong? Multiplication and dividing seem to be working perfectly

Answer

You have 2 problems:

1) g=0; statements after if and else blocks will make you go into an infinite loop.

2) From the output you gave, the first minus (-) is Unicode character HYPHEN-MINUS (U+002D), while the second minus (–) is Unicode character EN DASH (U+2013), so (j.get(g)).equals("-") fails for the second minus as they are not equal.

Comments