Spaces between elements in RPN expression java - java

I have a method getRPNString(), which returns Reverse Polish Notation string. I want to split this string by spacebars to calculate it. Now I can't understand how to add spacebars in my RNP string right, because it's not working with two digits numbers.
public class Calc1 {
public static void main(String[] args) {
String in = "((5+3*(4+2)*12)+3)/(1+3)+5";
String out = getRPNString(in);
System.out.println(out);
}
private static String getRPNString(String in) {
LinkedList<Character> oplist = new LinkedList<>();
StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length(); i++) {
char op = in.charAt(i);
if (op == ')') {
while (oplist.getLast() != '(') {
out.append(oplist.removeLast());
}
oplist.removeLast();
}
if (Character.isDigit(op)) {
out.append(op);
/*int j = i + 1;
for (; j < in.length(); j++) {
if (!Character.isDigit(j)) {
break;
}
i++;
}
out.append(in.substring(i, j));*/
}
if (op == '(') {
oplist.add(op);
}
if (isOperator(op)) {
if (oplist.isEmpty()) {
oplist.add(op);
} else {
int priority = getPriority(op);
if (priority > getPriority(oplist.getLast())) {
oplist.add(op);
} else {
while (!oplist.isEmpty()
&& priority <= getPriority(oplist.getLast())) {
out.append(oplist.removeLast());
}
oplist.add(op);
}
}
}
}
while (!oplist.isEmpty()) {
out.append(oplist.removeLast());
}
return out.toString();
}
private static boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
}
private static int getPriority(char op) {
switch (op) {
case '*':
case '/':
return 3;
case '+':
case '-':
return 2;
case '(':
return 1;
default:
return -1;
}
}
}
I tried to add spacebars by append(' ') in my StringBuilder variable out. But it' s not right with two digits. I think I totally do not understand how to make it.
For example if input is String in = "((5+3*(4+2)*12)+3)/(1+3)+5"; the out will be 5342+12+3+13+/5+, when I add spacebars to all calls out.append(' ')**out is **5 3 4 2 + * 1 2 * + 3 + 1 3 + / 5 +, so numbers like "12" became "1 2".
Can you help?

Just change the code that you have commented out, right after Character.isDigit(op) to:
int j = i + 1;
int oldI = i;//this is so you save the old value
for (; j < in.length(); j++) {
if (!Character.isDigit(in.charAt(j))) {
break;
}
i++;
}
out.append(in.substring(oldI, j));
out.append(' ');

I changed my method, now it works fine. I fonded my mistake when I wroted
!Character.isDigit(j) but need !Character.isDigit(in.charAt(j)).
private static String getRPNString(String in) {
LinkedList<Character> oplist = new LinkedList<>();
StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length(); i++) {
char op = in.charAt(i);
if (op == ')') {
while (oplist.getLast() != '(') {
out.append(oplist.removeLast()).append(' ');
}
oplist.removeLast();
}
if (Character.isDigit(op)) {
int j = i + 1;
int oldI = i;//this is so you save the old value
for (; j < in.length(); j++) {
if (!Character.isDigit(in.charAt(j))) {
break;
}
i++;
}
out.append(in.substring(oldI, j));
out.append(' ');
}
if (op == '(') {
oplist.add(op);
}
if (isOperator(op)) {
if (oplist.isEmpty()) {
oplist.add(op);
} else {
int priority = getPriority(op);
if (priority > getPriority(oplist.getLast())) {
oplist.add(op);
} else {
while (!oplist.isEmpty()
&& priority <= getPriority(oplist.getLast())) {
out.append(oplist.removeLast()).append(' ');
}
oplist.add(op);
}
}
}
}
while (!oplist.isEmpty()) {
out.append(oplist.removeLast()).append(' ');
}
return out.toString();
}
Now it produce right expression.
Test: input: ((5+3*(4+2)*12)+3)/(1+3)+5
output : 5 3 4 2 + * 12 * + 3 + 1 3 + / 5 +

Related

StringBuilder delete method cannot delete all '0' in for loop

I hava a StringBuilder Object named ans which start with lots of '0'. I try to delete all the '0' from the start of the ans until I meet a non '0' charactar.
What confuse me is the for i loop didn't finish his job. I have to make a second for i loop to clear all the 0 in the beginning.
Here is my Code.
public class No402 {
public static void main(String[] args) {
System.out.println(new No402().removeKdigits("42767854615790820292944831840714943359894187047948450037336809401264092298894490339723170235305129677267060933619172682578764724528024649451075131679109777263591648456729485464839877320061461069243974933498371934575012528555827338953724780861662784034839154178040563249817555067081448332223588411419168442553970020118370358794959779864819714402968003470365044797881527445340976945193818119467023653961507607672480115226579679195083984107550649620824228334531543881248523270728845883011347557806714125988595750797445903460187069102923827814511796767245574859856245433535202213866357865001893279481556044431076323101967578726169437167866864433985495890782177337227185218722003203201794524473658120818757906858018522776715639010350584179192618574032568118118609428514149350137179799798509363342933168141703795277960609902578193965353966732758522319326510476003141627976495471194647651191765940623801848650779996861991716801192868381714592671157213385358454372258678286185038661251898041199455484881497973936886129286780686747702354266676649133047345268803970772136574778724059680910889846701031833468068701979269662983956502485168033946609770137842651146059273082836506077338453677150197865590089199161058651336150874965473699606051616750107442277197178936688141691056518266386172813294511346655182323777419242146803539629808395049965699535272276902817614992917612927025979571436056418178949140225831714010026397581438647144388850448143782384993050908181782121784294922444218824177798052454616802442043385673094510700252387351590505241357656396376170570838637068429512330065547472613577751410152513915714166057883408992271281823592172333654887223386232551975763603851710020471730161184180640812534293795148973065648040320936081719321657015873251252438179935213522036777508405231559635933218588146968578575964379037900738820562221783370763718270548271942160879283346733139062721676158522361533668704462398258010274851756504022170692557968534354343300976925558662656552021225536052236166733671370810493478857779656160557033130699196730596823835866942383406014324343783777539237677792451989779191005800821612057527173069156047746886314264888886920021988864698336973375949221207087151293792642382667520852406157133901720414180577613687865572943934469907502558232579505371542207400025172278481715443291693401941467763248672444891029778464850850998910451866532251760265573729603802891979681199941199058262753251051247038814898450192160069049824567851341865948819288467203875175473770134200197684457826486518709881470102852093201457965720215213058487673191409542861896211110569915555788853974841074076366685605058887536260221712351483096796829688703805892797869297796003334770994443794789460259639436865437812910241961445382357524033812312224783435809748252815436505470248482168172542366777257733653560456219150752921112615226017071525633643673264241122463875175583077761780573333101393148223764295110530230833646717923630745738812086412736671406343368298252156032118474543057099651798412740139013104123480347608236951823601336247508674889789494483794628001425344165783788429049730291326775455015785327577865377064397566794918739831414079787693198248140637113125565595305998282580721676261634498566237966614318941397734268015425568890740425312778238252662876746954156253519077411732018085846119889733839268453412968907858943693089597738545774072868871022839381446938075550039536742864199000908389925554691777850180161524332130073243881970286384249150136987633055208076388268958344328919145620288311537387853748176907053434533948744876865239789707206727054699151876690589023127693784859005126867245144990541144502571475179281742590537105515917376706167473011218582298393879651200544930737095993892411425220115292455512046640587174478149165594377091626060310391405243838577142799370503965244703765138756627518023743947119802986986532252546116477951027231307131628103042104039629499919572735529345439335549727142664736202293026484344441050630567027253471369103560266482945879441209004770164675020115476783653466174012741661723993500655369697109626010269380076073933015864761704176611703072139146747597003865521022642104228419619843927108260238084570397138708740181474347163241522446780620603392403687603888076553679045954833871460870755109132271738691459746851320926797113625441143010401758187073392500078061166186149727409676020612731477477496862648324993156390312514509978182394005049176325656482925314334308846020046440000639094498194888324242274543355772503522914560552598223947118463742841515723677871749503874006924229568354106404788800337347740726960903805684221263837486950787248911647072244868181616958029769190594368044110679179639645980860201597430267777459655372871993352465518117174671133742384885531127239604520105123727230849911680326443684000340446147937873667767227624842441390296900995179520080641610292722850119464836580325090471323736225890294980142988595694394073053215895013346101834933981247547372697246437008031025334926870805534589643288626312674442549515696840972195844322623489776395993997725883102424374473386242230020052319139538725050694563793252575203302986006568926586341522483619750551265949811840701660706687971699572637332236706033725130460780147305930796689592739802762127602300331109088320407488753453562201443009583869340530260133192585867600117793558618622877626140608235883463446585052941889282771610713456594091731994663257672424562807919185250771570978748558016087655314386429181778154999037395977801201222536602668579318195917221851258101758083465833807764504478328133760033685582322103480724065531895932039917203779203156040553746346772387443929520551627122239575483559165994485703508677722865190370481258839816840706093115274279356732858077656941579688491810646089766375954256605013212947107680641700379830628558534532701353225658907237335822869646320919937486195881402477347072922997644748078880017641720321497893274887727279247817230724007001520405446788235407924339589275318658718824019308723325037628135839936194865389246778785484224136240513164802724185350906503263939998152201969404224284851353929162842159002494160461334274924788445418313020719064697643073211899597216839617241323956298475147631936745340993794786362122100021070985418754276295234662670333162104340353095385544657319880579379906274682249802800845859334842970692716308206359497045039047894058089399866389624780981978085896624346900360571598520216940381587071285958497155631482721452214648993874243450874956631856720123296440913509093669827146153180469767433504561046437484524515293979237377991209712765962632838588822180359961992788574139615251950913574644651207439995528858114472995911722528828790960400270676875166161939741700924096377882962772526118510149529098157733017933337496630319171190616687753486928733354625068986857196646261563989044574797981270617089057226390794666311751192327631540192548655459578506043592663616062769069836457346194068474176132510064511610117400341310411426000998578144122817400179584819131405912398612085587124626912794546013764785843274068027858995747888172680971572206968091015445337290861835783980747471461015521311208355915962202714480089884097249709377165451728632422251230084667248727648072440251993269156317610868685295846232492883010588697174635533597605834450249882921427658569868883414799635112078926523707047988262628826843234898036034699263633285219983947947102364186704490860419225940767023498819222899748637736136929299603365634669304329289193002180868079267831256753666692578016598885536576757243005565124272778934460000656133474422706312579704797332965888987321865639934115540341358438065159979966516649509059972742742859883148151328808103859578112480441464277834533174833896376621814776042440697291859846516369392086372254665861285937409320474020680208941413993134675771984152737919309617874095184511004441704637414657377204495521150940370391369816136133983987959653102357045282415379947968251076420098012505820501069271733453309150705588274173445852803861126110689326352001921046066346433959229953549279092972503658190837209557302503876248001129441633640343374507764567392795980560783306587466656895994346821030188171996741604459649768510697714192580042040101750692371398942842500442445462269343139517683266487839338542443169246460653530698650325346136357734184681042975047635944793223022235246268651870018710450581435529607254366048869493833744884331399960456341161524764264081615200455615465925723132075411240169896584999493701334792763601560521725937880035580427191600072833098777060365102978298741740559073275852763938780836609797603716875112885764040607658550533844408290490010802790842002942292935369291644839617793990910895308977723653062881593207714109720695034340437197019621968080117519794848132586742911614980669439330348142456126849768719198483462298008318935405664818315956667907954514033766806239587330742325680711653716183320470951491901907421070418246355033490024779722775524553362711286647617964163847164933401979458666304006708368763218332476561345205255639459643444256743045787508311558394991701816915267581835649555296896252897237006404723594796400109216516930136483261469100739753281302804818082275735965571356243205409672153514152830169411991633125429246600926046750109377245075186063774301024268884824103787866848063266853457600668442319180654169447895010411843408292686118099805402852556814966811008369348597110442872837094072059087232837205291461239853639994518924479438927379348327739109781565914159761167665584025124425923844801188360781762018699315163461229173330894272797116474430040071501881164984840886621509629770804885731934408262630754177569630312231904935609457496213783238786007928894185681679202644961896031520772120429456532334651866707926275039616875628244135012101648429121896413946679889877828086708457516884940565793756567939396973544976573326617620245079002790968407887831523704293463842790307287785628353910524550357149296905848302331279051221613790082068853444332742995671850649946821132877723913186786300652152247618157706125750578092402909964449626211673467131785274416643250628726377006207603592185", 8222));
}
public String removeKdigits(String num, int k) {
if (num.length() == k) {
return "0";
}
Deque<Character> deq = new LinkedList<>();
int howmany2cut = k;
char[] numsChar = num.toCharArray();
int finalIndx = 0;
for (int i = 0; i < numsChar.length && k > 0; i++) {
if (deq.isEmpty()) {
deq.add(numsChar[i]);
continue;
}
if (deq.peekLast() <= numsChar[i]) {
deq.add(numsChar[i]);
continue;
}
if (deq.peekLast() > numsChar[i]) {
while (k > 0) {
if (!deq.isEmpty() && (deq.peekLast() > numsChar[i])) {
deq.pollLast();
k--;
} else {
break;
}
}
deq.add(numsChar[i]);
finalIndx = i + 1;
}
}
StringBuilder ans = new StringBuilder();
for (Character n : deq) {
ans.append(n);
}
if (deq.size() < num.length() - k) {
ans.append(num.substring(finalIndx));
}
if (ans.length() > 1) {
for (int i = 0; i < ans.length(); i++) {
if ('0' == ans.charAt(0)) {
ans.delete(0, 1);
} else {
break;
}
}
} else {
return ans.toString();
}
if (ans.length() > 1) {
for (int i = 0; i < ans.length(); i++) {
if ('0' == ans.charAt(0)) {
ans.delete(0, 1);
} else {
break;
}
}
}
if (ans.length() == 0) {
return num.length() - howmany2cut > 0 ? num.substring(0, num.length() - howmany2cut) : "0";
}
if (ans.length() > num.length() - howmany2cut) {
return ans.substring(0, num.length() - howmany2cut);
}
return ans.toString();
}}
here is my debug picture
Please help me , thank you!
The reason why all 0's are not deleting after the first loop is that you are removing elements inside the loop if the first character is zero. Which causing the decrease in ans.length() so due to this the loop is not going up to the full length.
One more thing there is no need for 2 for loops you can manage it with just one loop.
How to fix?
Just store the actual length of ans before beginning the deletion and place it in the loop condition like this
public class No402 {
public static void main(String[] args) {
System.out.println(new No402().removeKdigits("42767854615790820292944831840714943359894187047948450037336809401264092298894490339723170235305129677267060933619172682578764724528024649451075131679109777263591648456729485464839877320061461069243974933498371934575012528555827338953724780861662784034839154178040563249817555067081448332223588411419168442553970020118370358794959779864819714402968003470365044797881527445340976945193818119467023653961507607672480115226579679195083984107550649620824228334531543881248523270728845883011347557806714125988595750797445903460187069102923827814511796767245574859856245433535202213866357865001893279481556044431076323101967578726169437167866864433985495890782177337227185218722003203201794524473658120818757906858018522776715639010350584179192618574032568118118609428514149350137179799798509363342933168141703795277960609902578193965353966732758522319326510476003141627976495471194647651191765940623801848650779996861991716801192868381714592671157213385358454372258678286185038661251898041199455484881497973936886129286780686747702354266676649133047345268803970772136574778724059680910889846701031833468068701979269662983956502485168033946609770137842651146059273082836506077338453677150197865590089199161058651336150874965473699606051616750107442277197178936688141691056518266386172813294511346655182323777419242146803539629808395049965699535272276902817614992917612927025979571436056418178949140225831714010026397581438647144388850448143782384993050908181782121784294922444218824177798052454616802442043385673094510700252387351590505241357656396376170570838637068429512330065547472613577751410152513915714166057883408992271281823592172333654887223386232551975763603851710020471730161184180640812534293795148973065648040320936081719321657015873251252438179935213522036777508405231559635933218588146968578575964379037900738820562221783370763718270548271942160879283346733139062721676158522361533668704462398258010274851756504022170692557968534354343300976925558662656552021225536052236166733671370810493478857779656160557033130699196730596823835866942383406014324343783777539237677792451989779191005800821612057527173069156047746886314264888886920021988864698336973375949221207087151293792642382667520852406157133901720414180577613687865572943934469907502558232579505371542207400025172278481715443291693401941467763248672444891029778464850850998910451866532251760265573729603802891979681199941199058262753251051247038814898450192160069049824567851341865948819288467203875175473770134200197684457826486518709881470102852093201457965720215213058487673191409542861896211110569915555788853974841074076366685605058887536260221712351483096796829688703805892797869297796003334770994443794789460259639436865437812910241961445382357524033812312224783435809748252815436505470248482168172542366777257733653560456219150752921112615226017071525633643673264241122463875175583077761780573333101393148223764295110530230833646717923630745738812086412736671406343368298252156032118474543057099651798412740139013104123480347608236951823601336247508674889789494483794628001425344165783788429049730291326775455015785327577865377064397566794918739831414079787693198248140637113125565595305998282580721676261634498566237966614318941397734268015425568890740425312778238252662876746954156253519077411732018085846119889733839268453412968907858943693089597738545774072868871022839381446938075550039536742864199000908389925554691777850180161524332130073243881970286384249150136987633055208076388268958344328919145620288311537387853748176907053434533948744876865239789707206727054699151876690589023127693784859005126867245144990541144502571475179281742590537105515917376706167473011218582298393879651200544930737095993892411425220115292455512046640587174478149165594377091626060310391405243838577142799370503965244703765138756627518023743947119802986986532252546116477951027231307131628103042104039629499919572735529345439335549727142664736202293026484344441050630567027253471369103560266482945879441209004770164675020115476783653466174012741661723993500655369697109626010269380076073933015864761704176611703072139146747597003865521022642104228419619843927108260238084570397138708740181474347163241522446780620603392403687603888076553679045954833871460870755109132271738691459746851320926797113625441143010401758187073392500078061166186149727409676020612731477477496862648324993156390312514509978182394005049176325656482925314334308846020046440000639094498194888324242274543355772503522914560552598223947118463742841515723677871749503874006924229568354106404788800337347740726960903805684221263837486950787248911647072244868181616958029769190594368044110679179639645980860201597430267777459655372871993352465518117174671133742384885531127239604520105123727230849911680326443684000340446147937873667767227624842441390296900995179520080641610292722850119464836580325090471323736225890294980142988595694394073053215895013346101834933981247547372697246437008031025334926870805534589643288626312674442549515696840972195844322623489776395993997725883102424374473386242230020052319139538725050694563793252575203302986006568926586341522483619750551265949811840701660706687971699572637332236706033725130460780147305930796689592739802762127602300331109088320407488753453562201443009583869340530260133192585867600117793558618622877626140608235883463446585052941889282771610713456594091731994663257672424562807919185250771570978748558016087655314386429181778154999037395977801201222536602668579318195917221851258101758083465833807764504478328133760033685582322103480724065531895932039917203779203156040553746346772387443929520551627122239575483559165994485703508677722865190370481258839816840706093115274279356732858077656941579688491810646089766375954256605013212947107680641700379830628558534532701353225658907237335822869646320919937486195881402477347072922997644748078880017641720321497893274887727279247817230724007001520405446788235407924339589275318658718824019308723325037628135839936194865389246778785484224136240513164802724185350906503263939998152201969404224284851353929162842159002494160461334274924788445418313020719064697643073211899597216839617241323956298475147631936745340993794786362122100021070985418754276295234662670333162104340353095385544657319880579379906274682249802800845859334842970692716308206359497045039047894058089399866389624780981978085896624346900360571598520216940381587071285958497155631482721452214648993874243450874956631856720123296440913509093669827146153180469767433504561046437484524515293979237377991209712765962632838588822180359961992788574139615251950913574644651207439995528858114472995911722528828790960400270676875166161939741700924096377882962772526118510149529098157733017933337496630319171190616687753486928733354625068986857196646261563989044574797981270617089057226390794666311751192327631540192548655459578506043592663616062769069836457346194068474176132510064511610117400341310411426000998578144122817400179584819131405912398612085587124626912794546013764785843274068027858995747888172680971572206968091015445337290861835783980747471461015521311208355915962202714480089884097249709377165451728632422251230084667248727648072440251993269156317610868685295846232492883010588697174635533597605834450249882921427658569868883414799635112078926523707047988262628826843234898036034699263633285219983947947102364186704490860419225940767023498819222899748637736136929299603365634669304329289193002180868079267831256753666692578016598885536576757243005565124272778934460000656133474422706312579704797332965888987321865639934115540341358438065159979966516649509059972742742859883148151328808103859578112480441464277834533174833896376621814776042440697291859846516369392086372254665861285937409320474020680208941413993134675771984152737919309617874095184511004441704637414657377204495521150940370391369816136133983987959653102357045282415379947968251076420098012505820501069271733453309150705588274173445852803861126110689326352001921046066346433959229953549279092972503658190837209557302503876248001129441633640343374507764567392795980560783306587466656895994346821030188171996741604459649768510697714192580042040101750692371398942842500442445462269343139517683266487839338542443169246460653530698650325346136357734184681042975047635944793223022235246268651870018710450581435529607254366048869493833744884331399960456341161524764264081615200455615465925723132075411240169896584999493701334792763601560521725937880035580427191600072833098777060365102978298741740559073275852763938780836609797603716875112885764040607658550533844408290490010802790842002942292935369291644839617793990910895308977723653062881593207714109720695034340437197019621968080117519794848132586742911614980669439330348142456126849768719198483462298008318935405664818315956667907954514033766806239587330742325680711653716183320470951491901907421070418246355033490024779722775524553362711286647617964163847164933401979458666304006708368763218332476561345205255639459643444256743045787508311558394991701816915267581835649555296896252897237006404723594796400109216516930136483261469100739753281302804818082275735965571356243205409672153514152830169411991633125429246600926046750109377245075186063774301024268884824103787866848063266853457600668442319180654169447895010411843408292686118099805402852556814966811008369348597110442872837094072059087232837205291461239853639994518924479438927379348327739109781565914159761167665584025124425923844801188360781762018699315163461229173330894272797116474430040071501881164984840886621509629770804885731934408262630754177569630312231904935609457496213783238786007928894185681679202644961896031520772120429456532334651866707926275039616875628244135012101648429121896413946679889877828086708457516884940565793756567939396973544976573326617620245079002790968407887831523704293463842790307287785628353910524550357149296905848302331279051221613790082068853444332742995671850649946821132877723913186786300652152247618157706125750578092402909964449626211673467131785274416643250628726377006207603592185", 8222));
}
public String removeKdigits(String num, int k) {
if (num.length() == k) {
return "0";
}
Deque<Character> deq = new LinkedList<>();
int howmany2cut = k;
char[] numsChar = num.toCharArray();
int finalIndx = 0;
for (int i = 0; i < numsChar.length && k > 0; i++) {
if (deq.isEmpty()) {
deq.add(numsChar[i]);
continue;
}
if (deq.peekLast() <= numsChar[i]) {
deq.add(numsChar[i]);
continue;
}
if (deq.peekLast() > numsChar[i]) {
while (k > 0) {
if (!deq.isEmpty() && (deq.peekLast() > numsChar[i])) {
deq.pollLast();
k--;
} else {
break;
}
}
deq.add(numsChar[i]);
finalIndx = i + 1;
}
}
StringBuilder ans = new StringBuilder();
for (Character n : deq) {
ans.append(n);
}
if (deq.size() < num.length() - k) {
ans.append(num.substring(finalIndx));
}
int tempLength = ans.length(); //Store length like this
if (ans.length() >= 1) {
for (int i = 0; i < tempLength; i++) { //pass the tempLength as termination condition like this
if ('0' == ans.charAt(0)) {
ans.delete(0, 1);
} else {
break;
}
}
}
if (ans.length() == 0) {
return num.length() - howmany2cut > 0 ? num.substring(0, num.length() - howmany2cut) : "0";
}
if (ans.length() > num.length() - howmany2cut) {
return ans.substring(0, num.length() - howmany2cut);
}
return ans.toString();
}}

I need to create a program that will read a text file, figure out in the parentheses are valid, and solve the equation

This is my assignment on number 6:
And this is what I have so far. It's not working properly and I am not sure why. Any help would be greatly appreciated. I showed what error I get at the bottom of the code. I'm not sure how to fix it and where to go from here.
import java.util.Arrays;
public class st {
public static void main(String[] args) {
String aa = "8 + (2+2)";
Init init = new Init(aa);
}
}
public final class Init {
public int top = 1;
Integer[] stack = new Integer[10];
String[] queue = new String[10];
int number, x, y, z, op, front, rear;
int finalValue;
int CurrValue;
String queueOperand;
Character s;
public Init(String s) {
ValidateEquation(s);
int finalVal = postFix(s);
System.out.printf("The answer is " + finalVal + "\n");
}
void ValidateEquation(String s) {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
push(c);
} else if (c == ')') {
if (isStackEmpty()) {
System.out.printf("Error: Too many ')'");
System.exit(0);
} else {
int closeParen = pop();
}
}
}
}
public int postFix(String s) {
int CurrentCalculation;
int i = 0;
while (i < s.length()) {
char c = s.charAt(i);
if ((int) c > 47 && (int) c < 58) {
int numVal = Character.getNumericValue(c);
push(numVal);
} else if ((int) c > 41 && (int) c < 48) {
String StrVal = Character.toString(c);
pushQ(StrVal);
}
if (c == '(' || c == ')' || i == s.length()-1) {
String newString = "";
for (Integer stack1 : stack) {
/* iterate through the stack */
if (stack1 != null) {
newString = newString + stack1 + " ";
}
}
for (String queue1 : queue) {
/* iterate through the queue */
if (queue1 != null) {
newString = newString + queue1 + " ";
queueOperand = queue1;
}
}
if (newString.length() > 2) {
int CurrValue = calculateEquation(newString);
if ("+".equals(queueOperand)) {
finalValue = finalValue + CurrValue;
} else if ("-".equals(queueOperand)) {
finalValue = finalValue - CurrValue;
} else if ("*".equals(queueOperand)) {
finalValue = finalValue * CurrValue;
} else if ("/".equals(queueOperand)) {
finalValue = finalValue / CurrValue;
}
popAll();
}
}
i++;
}
return finalValue;
}
int calculateEquation(String s) {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ((int) c > 47 && (int) c < 58) {
int numVal = Character.getNumericValue(c);
push(numVal);
}
if ((int)c > 41 && (int)c < 48) {
if (s.length() <= 4) {
x = pop();
if (c == '*' || c == '/') {
y = 1;
} else {
y = 0;
}
} else {
x = pop();
y = pop();
}
System.out.println("\n" + x + " " + y + " " + c);
if (c == '+') {
z = x + y;
} else if (c == '-') {
z = x - y;
} else if (c == '*') {
z = x * y;
} else if (c == '/') {
z = x / y;
}
}
}
return z;
}
void push(int x) {
top = top + 1;
/* Increment stack pointer. */
stack[top] = x;
/* Place x on top of stack. */
}
void pushQ(String x) {
rear = rear + 1;
/* Increment stack pointer. */
queue[rear] = x;
/* Place x on top of stack. */
}
int pop() {
int x;
x = stack[top];
/* Retrieve item from top of stack. */
top = top - 1;
/* Decrement stack. */
return x;
}
void popAll() {
Arrays.fill(stack, null);
Arrays.fill(queue, null);
}
boolean isStackEmpty() {
boolean empty;
empty = false;
if (top == -1) {
/* If top = -1, that indicates an empty stack. */
empty = true;
}
return empty;
}
}
This is the error I get:
"/st.java:12: error: class Init is public, should be declared in a file named Init.java
public final class Init {"
You should put each public class in separate file and file name must be class name.

Exception in thread “main” java.util.IllegalFormatConversionException: g != java.lang.String [duplicate]

This question already has answers here:
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
(3 answers)
Closed 3 years ago.
I am a bit new to java and was hoping if anyone could help me. I'm writing this code on virtual machine Ubuntu using the text editor. The RAM errors is right here if you would like to reference the file. http://users.cis.fiu.edu/~crahn/CGS3767/RAMerrors. The error is located in the public static readingLine in the System.out.printf. If anyone could help me idenify the error, I would greatly appreciate it. Thank you!
import java.io.*;
import java.util.*;
public class MemoryCalculator
{
private static Scanner convertingFiles;
public static String convertFile = "RAMerrors.txt";
public static void readFile(String nameOfFile) throws IOException
{
convertingFiles = new Scanner(new File(nameOfFile));
}
public static void readingLine(String nameOfFile) throws IOException
{
System.out.println();
int recordingNum = 0;
while(convertingFiles.hasNext())
{
recordingNum = recordingNum +1;
String recordingLine = convertingFiles.nextLine();
System.out.printf("( %d) %g ) \n", recordingNum, recordingLine );
String conv = fromHexToBi(recordingLine);
long decimal = fromBiToDec(conv);
System.out.println(errorRamRangeWeb(decimal));
}
}
public static String fromHexToBi(String input)
{
int fromHexToBi = 0;
String record = "";
char var;
for(int x = 0; x < input.length(); x++)
{
var = input.charAt(x);
if(var == '0')
{
record += "0000";
}
else if (var == '1')
{
record += "0001";
}
else if (var == '2')
{
record += "0010";
}
else if (var == '3')
{
record += "0011";
}
else if (var == '4')
{
record += "0100";
}
else if (var == '5')
{
record += "0101";
}
else if (var == '6')
{
record += "0110";
}
else if (var == '7')
{
record += "0111";
}
else if (var == '8')
{
record += "1000";
}
else if (var == '9')
{
record += "1001";
}
else if (var == 'A')
{
record += "1010";
}
else if (var == 'B')
{
record += "1011";
}
else if (var == 'C')
{
record += "1100";
}
else if (var == 'D')
{
record += "1101";
}
else if (var == 'E')
{
record += "1110";
}
else if (var == 'F')
{
record += "1111";
}
else
{
System.out.print("Sorry, the error is .out of range");
}
}
System.out.println(record);
return record;
}
public static long fromBiToDec(String bi)
{
long decimal = 0;
for(int y = 0; y < bi.length(); y++)
{
if(bi.charAt(y) == '1')
{
decimal = (long) (decimal + Math.pow(2, bi.length() - 1 - y));
}
}
System.out.println(decimal);
return (long) decimal;
}
public static String errorRamRangeWeb(long decimal)
{
String chipRangeFall = "";
long errorRamRange0 = 0;
long errorRamRange1 = 8589934584L;
long errorRamRange2 = 8589934585L;
long errorRamRange3 = 1717986184L;
long errorRamRange4 = 17179869185L;
long errorRamRange5 = 25769803768L;
long errorRamRange6 = 25769803769L;
long errorRamRange7 = 34359738368L;
long result = decimal;
if((result >= errorRamRange0) && (result <= errorRamRange1))
{
chipRangeFall = "1";
}
else if ((result >= errorRamRange2) && (result <= errorRamRange5))
{
chipRangeFall = "2";
}
else if ((result >= errorRamRange4) && (result <= errorRamRange3))
{
chipRangeFall = "3";
}
else if ((result >= errorRamRange6) && (result <= errorRamRange7))
{
chipRangeFall = "4";
}
else
{
System.out.println("ram chip does not exist");
}
return chipRangeFall;
}
public static void main(String[] args) throws IOException
{
readFile(convertFile);
readingLine(convertFile);
}
}
You want a %s conversion for your String argument recordingLine, not %g
recordingLine is expected to be float but found to be string.

Why subsequence(a,b).toString() is faster than substring(a,b)?

Why subsequence(a,b).toString() is faster than substring(a,b)?
when i convert my all subsequences to substring it slows up to %7 all the time. why does it happen?
Below is my code;
private static String filterStr(String s)
{
for(int a = 0; a < s.length(); a++)
{
int c = s.charAt(a);
if(((c < 65) || ((c >90) &&(c < 97)) || (c > 122)))
{
if(c!=34 && c!=96 && c!=39)// tırnak değillerse
{
String temp = s.substring(0,a);
temp+= s.subSequence(a+1,s.length());
s = temp;
a--;
}
else
{
if(a !=0) // if not at the beginning
{
if(a == s.length()-1)
s = s.subSequence(0,s.length()-1).toString();
else
s = s.subSequence(0,s.length()-2).toString();
}
else
s = s.subSequence(1,s.length()).toString();
}
}
if(c >= 65 && c <= 90) // convert to lower case first character.
{
String temp = s.substring(1,s.length());
c+=32;
s = (char)c + temp;
}
}
return s;
}
CharSequence subSequence(int beginIndex, int endIndex) {
return this.substring(beginIndex, endIndex);
}
this is the implementation of subSequence method, It can not be faster/slower.

Java print certain characters from an array

I have a string array that looks like this:
[67, +, 12, -, 45]
I want to print it out so that it looks like this:
67 12 + 45 -
Here's the code I'm trying to use to do this.
String[] temp = line.split(" ");
String tmp = line.replaceAll("\\s+","");
for(int i = 0; i < temp.length; i++)
{
if(isInt(temp[i]) == false)
{
expression = temp[i];
firstExp = true;
}
else if(isInt(temp[i]) == false && firstExp == true && secondExp == false)
{
System.out.print(expression);
secondExp = true;
}
else if(isInt(temp[i]) == false && firstExp == true && secondExp == true)
{
System.out.print(expression);
firstExp = false;
secondExp = false;
}
else
{
System.out.print(temp[i]);
}
}
firstExp and secondExp are Booleans that check for the expressions that should appear in the array. isInt() is just a method used to determine if the string is a number. Right now, all this code does is output this:
671245
public static void main (String[] args) throws java.lang.Exception
{
String[] expr = new String[]{"67", "+", "45", "-", "12", "*", "5", "/", "78"};
int current = 0;
StringBuilder postfix = new StringBuilder();
// handle first three
postfix.append(expr[current]).append(" ");
postfix.append(expr[current+2]).append(" ");
postfix.append(expr[current+1]).append(" ");
current += 3;
// handle rest
while( current <= expr.length-2 ){
postfix.append(expr[current+1]).append(" ");
postfix.append(expr[current]).append(" ");
current += 2;
}
System.out.println(postfix.toString());
}
Outputs:
67 45 + 12 - 5 * 78 /
You can run/edit this at: http://ideone.com/zcdlEq
I guess what you are trying to do is converting infix expression to post fix. Some time back I had written the following code:
public class InfixToPostfix {
private Stack stack;
private String input;
private String output = "";
public InfixToPostfix(String in) {
input = in;
int stackSize = input.length();
stack = new Stack(stackSize);
}
public String translate() {
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '+':
case '-':
hastOperator(ch, 1);
break;
case '*':
case '/':
hastOperator(ch, 2);
break;
case '(':
stack.push(ch);
break;
case ')':
hasSuperior(ch);
break;
default:
output = output + ch;
break;
}
}
while (!stack.isEmpty()) {
output = output + stack.pop();
}
System.out.println(output);
return output;
}
public void hastOperator(char op, int precedence) {
while (!stack.isEmpty()) {
char opTop = stack.pop();
if (opTop == '(') {
stack.push(opTop);
break;
}
else {
int prec2;
if (opTop == '+' || opTop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < precedence) {
stack.push(opTop);
break;
}
else
output = output + opTop;
}
}
stack.push(op);
}
public void hasSuperior(char ch){
while (!stack.isEmpty()) {
char chx = stack.pop();
if (chx == '(')
break;
else
output = output + chx;
}
}
public static void main(String[] args)
throws IOException {
String input = "67 + 12 - 45";
String output;
InfixToPostfix theTrans = new InfixToPostfix(input);
output = theTrans.translate();
System.out.println("Postfix is " + output + '\n');
}
class Stack {
private int maxSize;
private char[] stackArray;
private int top;
public Stack(int max) {
maxSize = max;
stackArray = new char[maxSize];
top = -1;
}
public void push(char j) {
stackArray[++top] = j;
}
public char pop() {
return stackArray[top--];
}
public char peek() {
return stackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
}
}
You may need to modify this program to read from an array, but that is very trivial.
Here's how you do it in one line:
System.out.println(Arrays.toString(temp).replaceAll("[^\\d +*/-]", "").replaceAll("[+*/-]) (\\d+)", "$2 $1"));

Categories