Hej! Som rubriken lyder försöker jag mig på att skapa en miniräknare som ska ta input av en sträng, parsea till double. Mitt problem är helt enkelt jag vet inte vad jag ska använda mig av för att det ska funka. Tillexempel input "5*5+2-10/2"
Och även att man ska prioritera tex multiplikation före addition.
Någon som har tips om hur man kan gå till väga?
Alltså metoderna i testCalc ( priorityTest testWithDifferentOperators)
Och även att man ska prioritera tex multiplikation före addition.
Någon som har tips om hur man kan gå till väga?
Alltså metoderna i testCalc ( priorityTest testWithDifferentOperators)
Kod:
package tests; import org.junit.Test; import calculatorprojekt.Calculator; import static org.junit.Assert.assertEquals; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; /*KVAR ATT GÖRA * Använda olika operators * Fixa prioriteten med operators */ public class testCalc { @Test(expected=ArithmeticException.class) public void divideByZero_ExecptionThrows(){ //Arrange Calculator calc = new Calculator(); //Act double actual = calc.divide(5,0); // Vi försöker dividera fem med noll. Går ej, förväntar oss ett undantag! } @Test public void testSimpleDivision() { //Arrange Calculator calc = new Calculator(); //Act String input="6/2"; String actual=calc.calculateExpression(input); //Assert assertEquals("3.0",actual); } @Test public void testSimpleAddition() { //Arrange Calculator calc = new Calculator(); //Act String input="1+1"; String actual=(calc.calculateExpression(input)); //Assert assertEquals("2.0",actual); } @Test public void testAdditionWithMultipleTerms() { //Arramnge Calculator calc=new Calculator(); //Act String input="1+2+3"; String actual=calc.calculateExpression(input); //Assert assertEquals("6.0",actual); } @Ignore @Test public void testWithDifferentOperators() { //Arrange Calculator calc = new Calculator(); //Act String input="5*4+7-3*0+4-10"; String actual=(calc.calculateExpression(input)); //Assert assertEquals("21",actual,0.111); } @Test public void priorityTest() { // Arrange Calculator calc=new Calculator(); //Act String input="5+6/2*2"; double actual=Double.parseDouble(calc.calculateExpression(input)); //Assert assertEquals(11d,actual,0.111); } @Test public void add_test() { // AAA - arrange act assert // Arrange Calculator calc=new Calculator(); // Act double actual=calc.add(1,2); // Assert assertEquals(3d, actual, 0.111); } @Test public void testSimpleSubtractTest() { //Arrange Calculator calc=new Calculator(); //Act String input = "2-1"; String actual = calc.calculateExpression(input); //Assert assertEquals("1.0",actual); } @Test public void testSimpleMultiplyTest() { // Arrange Calculator calc=new Calculator(); // Act String input = "1*1"; String actual = calc.calculateExpression(input); // Assert assertEquals("1.0",actual); } @Test public void modulus_Test() { // Arrange Calculator calc=new Calculator(); //Act String input="11%2"; String actual=calc.calculateExpression(input); //Assert assertEquals("1.0",actual); } }
Kod:
package calculatorprojekt;
import java.util.Scanner;
public class Calculator {
static Scanner s=new Scanner (System.in);
public static void main(String []args) {
String input=s.nextLine();
Calculator calc=new Calculator();
String output=calc.calculateExpression(input);
System.out.println(output);
s.close();
}
//--------------HUVUDMETOD--------------------
public String calculateExpression(String expression) {
//TESTING DIVISION | expression "6/2"
double result = 0;
String [] split = expression.split("[/]");
if(split.length>1) {
double d1=Double.parseDouble(split[0]);
double d2=Double.parseDouble(split[1]);
result = divide(d1,d2);
}
//TESTING ADDITION | expresssion "1+2+3"
split = expression.split("[+]");
if(split.length>1) {
for(int i=0;i<split.length;i++) {
double d=Double.parseDouble(split[i]);
result = add(result,d);
}
}
//TESTING MULTIPLY | expression "1*1"
split=expression.split("[*]");
if(split.length>1) {
double d1=Double.parseDouble(split[0]);
double d2=Double.parseDouble(split[1]);
result=multiply(d1,d2);
}
//TESTING SUBTRACTION | expression "2-1"
split=expression.split("[-]");
if(split.length>1) {
double d1 = Double.parseDouble(split[0]);
double d2 = Double.parseDouble(split[1]);
result = sub(d1,d2);
}
//TESTING MODULUS | expression "11%2"
split=expression.split("[%]");
if(split.length>1) {
double d1=Double.parseDouble(split[0]);
double d2=Double.parseDouble(split[1]);
result=modulus(d1,d2);
}
//TESTING PRIORITY | expression "5+2/2*2"
return Double.toString(result);
}
// Add
public double add(double i, double x) {
double sum=i+x;
return sum;
}
// subtract
public double sub(double i, double x) {
return i-x;
}
//Multiply
public double multiply(double i,double x) {
return i*x;
}
//Divide
public double divide(double i, double x) {
if(x==0) { // Om man delar med 0 kastas det ett ArithmeticException
throw new ArithmeticException();
}
return i/x; //Annars returnera i dividerat med x
}
//Modulus
public double modulus(double i, double x) {
return i%x;
}
}