Hej! Som rubriken lyder frsker jag mig p att skapa en minirknare som ska ta input av en strng, parsea till double. Mitt problem r helt enkelt jag vet inte vad jag ska anvnda mig av fr att det ska funka. Tillexempel input "5*5+2-10/2"
Och ven att man ska prioritera tex multiplikation fre addition.
Ngon som har tips om hur man kan g till vga?
Allts metoderna i testCalc ( priorityTest testWithDifferentOperators)
Och ven att man ska prioritera tex multiplikation fre addition.
Ngon som har tips om hur man kan g till vga?
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 GRA * Anvnda 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 frsker dividera fem med noll. Gr ej, frvntar 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;
}
}