Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

import java.util.

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...

Scanner in=new Scanner(System.in);

String a;

public void djeli(){


int brojac=0;
System.out.println("Unesi niz");
a=in.nextLine();

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
}
}

for(int i=0;i<holder.size();i++){ // brojac otvorenih zagrada, trebat ce mi


if(holder.get(i).equals("(")){
brojac++;
}

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

String temp=broj(i+1,j-1); // predajem temp


varijabli vrijednost koju ce vratit fja broj
int h=i; // kojoj predajem izraz
od ( do ), tj dajem da izracuna izraz izmedju

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());
}
///////////////////////////////////////////////////////////

public String broj(int poc,int kraj){


iz.clear(); //cistim buffer hehe
for(int i=poc ;i<=kraj;i++){

iz.add(holder.get(i)); // predajem izraz od zagrade najdublje do


zatvorene

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;

case "-": rez= pr-dr; // pa oduzimaje


t = Integer.toString(rez);
iz.set(i,t );
iz.remove(i-1);
iz.remove(i);
i--; break;
}

}}

return iz.get(0);
}
}

You might also like