Ho fatto un po 'di ricerca per voi.
Ho trovato this stackexchange question esaminando come creare tutte le combinazioni possibili per un determinato set di caratteri. È possibile utilizzare questo per generare tutte le possibili combinazioni di +, -, /, * utilizzando il metodo descritto nella domanda
public static void combinations(int maxLength, char[] alphabet, String curr) {
// If the current string has reached it's maximum length
if (curr.length() == maxLength) {
System.out.println(curr);
// Else add each letter from the alphabet to new strings and process these new strings again
} else {
for (int i = 0; i < alphabet.length; i++) {
String oldCurr = curr;
curr += alphabet[i];
combinations(maxLength, alphabet, curr);
curr = oldCurr;
}
}
}
e chiamandolo con qualcosa come
char[] operators = new char[]{'+', '-', '/', '*'};
combinations(3, operators , ""); //You want to call it with 3 since you only need 3 operators.
Dopo (o al posto di) stampando la nuova combinazione (System.out.println(curr);
) è possibile chiamare un metodo per interpretare l'output.
È possibile uscire da qualcosa di simile a questo stackoverflow simple calculator example.
Per esempio, si può avere qualcosa di simile:
if(curr.charAt(0) == '+'){
//add the first and second number
}
Penso che questo dovrebbe essere sufficiente a farti andare.
EDIT
avuto il tempo sulle mie mani e voleva finire questo dato che ho trovato interessante. Ecco, vai. Funziona esattamente per quello che ti serve.
Per renderlo interessante ho usato numeri casuali. Non sei sicuro di come stai ricevendo il tuo numero. Una cosa da tenere a mente è che i decimali sono scesi in divisione quando si ha a che fare con l'intero. Quindi qualcosa come 12/64 = 0 o 11/5 = 2.
Ecco un esempio di output:
run:
+++
0+0+10+10= 20
++-
59+3+38-80= 20
++/
19+0+66/53= 20
++*
15+5+0*54= 20
+-+
23+26-97+68= 20
+--
87+66-73-60= 20
+-/
15+5-0/33= 20
+-*
63+57-50*2= 20
+/+
8+61/37+11= 20
+/-
72+38/55-52= 20
+//
20+61/71/8= 20
+/*
18+5/28*14= 20
+*+
2+0*14+18= 20
+*-
35+1*75-90= 20
+*/
20+8*5/54= 20
+**
20+91*0*2= 20
-++
37-100+17+66= 20
-+-
65-89+46-2= 20
-+/
52-32+33/84= 20
-+*
52-32+44*0= 20
--+
39-74-22+77= 20
---
92-0-54-18= 20
--/
62-41-45/73= 20
--*
54-34-0*82= 20
-/+
22-98/9+9= 20
-/-
66-27/71-45= 20
-//
20-0/17/41= 20
-/*
42-20/71*76= 20
-*+
9-2*0+11= 20
-*-
90-6*10-10= 20
-*/
40-75*24/90= 20
-**
20-0*26*90= 20
/++
65/47+6+13= 20
/+-
91/5+56-54= 20
/+/
64/4+69/16= 20
/+*
54/81+2*10= 20
/-+
80/89-68+88= 20
/--
65/2-11-1= 20
/-/
86/4-96/98= 20
/-*
80/4-0*100= 20
//+
12/64/57+20= 20
//-
64/1/1-44= 20
///
82/1/4/1= 20
//*
45/7/18*57= 20
/*+
45/12*4+5= 20
/*-
44/21*45-74= 20
/*/
87/6*55/38= 20
/**
29/76*5*11= 20
*++
0*36+3+17= 20
*+-
4*13+55-87= 20
*+/
2*10+14/72= 20
*+*
0*100+2*10= 20
*-+
49*1-29+0= 20
*--
48*2-54-22= 20
*-/
1*21-11/73= 20
*-*
44*52-27*84= 20
*/+
7*8/56+19= 20
*/-
38*77/55-33= 20
*//
95*99/6/77= 20
*/*
2*9/72*83= 20
**+
0*11*40+20= 20
**-
8*6*1-28= 20
**/
29*59*1/82= 20
***
4*1*5*1= 20
BUILD SUCCESSFUL (total time: 34 minutes 35 seconds)
Ha preso 34 minuti per completare la corsa a causa quelli veramente difficili come /// e *** dovuta al tappo intero casuale 100. Inoltre, non mi sono preoccupato di rendere questo più pulito ed efficiente possibile e non ho guardato per perdite di oggetti/creazione di oggetti non necessari. Spetterà a voi :)
Cheers!
Non è necessario un nuovo metodo per la sola sottrazione. È possibile utilizzare lo stesso metodo utilizzato per l'aggiunta ma inviare invece un valore negativo. – Ceelos
Diventa più complicato Non penso che mi risparmierebbe molto tempo, perché ho un metodo in cui somma, sottrazione e divisione sono combinati –
Dovresti essere in grado di mettere la logica di tutti e 4 i metodi in un unico metodo. – yogidilip