Professional Documents
Culture Documents
Izraz
Izraz
ArrayList;
import java.util.List;
import java.util.Scanner;
/**
*
* @author ivan
*/
public class zagrada {
List<String>iz=new ArrayList<String>(); // ovdje spremam sami
izraz tipa 12*4-1, bez zagrada
List<String>holder=new ArrayList<String>(); // ovdje pretvaram iz
une�enog stringa u listu, clan je tipa samo broj ili znak...
String a;
for(int i=0,j=0;i<=a.length()-1;i++){
if(Character.isDigit(a.charAt(i))){ // ako je prvi znak elemnta
broj, npr. 1234 prvi znak je 1
j=i; //
for(int f=j;f<a.length();f++){ //
if(!Character.isDigit(a.charAt(f))){ // provjeravam
slijedece charove, ako nisu broj znaci da sam dosao do kraja broja
holder.add(a.substring(j,f)); // stavljam iz
stringa broj, od poc znaka koji je broj, do zadnjeg znaka, kontas?
i=f-1; // i mijenjam jer sam presao nekoliko
elemenata u stringu, tj onoliko koliko ima taj broj
f=0;
break;
}
} continue;
}
if(a.substring(i,i+1).equals("(") || a.substring(i,i+1).equals(")")){
holder.add(a.substring(i,i+1));continue; // dodajem ak je
zagrada, ne da mi se prckat s malim i velikim zagradama,
// ionako pocinje
racunanje od najdublje zagrade, pa nije bitno
// mozda ima neki bug al
jebat ga ionako necu ovo znat napisat na satu
}
if(Character.isBmpCodePoint(a.charAt(i)) && !
Character.isDigit(a.charAt(i))){
holder.add(a.substring(i,i+1));continue; // ako je znak tipa + * -
stavljam ga u niz, navodno je i broj tipa BmpCidePoint
// pa sam morao brojeve
isklucit, iako su sami iskljuceni s naredbom continue od gore al nema veze
}
}
int br=0;
while(holder.size()!=1){ // dok velicina liste ne bude 1 petlja se
nastavlja, kad je jedan znac ima 1 elemnt tj samo rezultat
br=0;
for(int i=0;i<holder.size();i++){
if(holder.get(i).equals("(")){br++;} // akk naleti na otv zagradu
poveca brojac za 1
if(holder.get(i).equals("(") && br==brojac){ // ak naleti na
otvorenu i br je jednak broju zagrada naletili smo na najdublju zagradu
for(int j=i+1;j<holder.size();j++){
if(holder.get(j).equals(")")){ // idemo do zatvorene
prve zagrade, ofc
for(int b=i;b<j;b++){ //
i=0;
holder.remove(h); //izbacujem clanove liste, tj.
zagrade ( i ) i prvotni izraz i
} // zamjenjujem ga s temp
varijablom
holder.set(h, temp);
brojac--; }
}
// stavljam brojace zagrada na nulu
}
}}
System.out.println(holder.toString());
}
///////////////////////////////////////////////////////////
for(int i=0;i<iz.size();i++){
if(!Character.isDigit(iz.get(i).charAt(0)) ){ // ako je char elemnt
liste, tj *,+,..
int pr,dr;
pr=Integer.parseInt(iz.get(i-1)); // element liste prije je onda
neki broj kao i elemnt iza
dr=Integer.parseInt(iz.get(i+1)); //
int rez=0;
switch(iz.get(i)){
case "*": rez=pr*dr; String t=new String(); // prva petllja
radi samo mnozenje, moze se ubaciti i
t = Integer.toString(rez); // dijeljenje ali
nisam htio se jebat s double
iz.set(i,t ); // mnozim po 2 elemnta at a time, mijenjam rez s
znakom a brisem broj ispred i iza
iz.remove(i-1);
iz.remove(i);
i--; break; // odem nazad za jedno mjesto , tj ponovo od pocetka
prve kalkulacije
}}
for(int i=0;i<iz.size();i++){
if(!Character.isDigit(iz.get(i).charAt(0)) ){
int pr,dr;
pr=Integer.parseInt(iz.get(i-1));
dr=Integer.parseInt(iz.get(i+1));
int rez=0;
switch(iz.get(i)){
case "+": rez=pr+dr; String t=new String(); // radim onda
sabiranje
t = Integer.toString(rez);
iz.set(i,t );
iz.remove(i-1);
iz.remove(i);
i--; break;
}}
return iz.get(0);
}
}