I am developing a Sorting Algorithm Simulator in NetBeans using an applet. I have a Timer and a TimerTask. I want to change the background color of labels according to how they sort. The first run changes the colors but after that the colors don't change. I ran the program in debug mode and saw that after the first run a InterruptedException is thrown from the TimerTask. I have no idea why this is happening.
This is my TimerTask method which has the run() method in it.
Sorry if its lengthy code.
private class AnimationUpdator extends TimerTask {
JLabel[] values = {valuejLabel3, valuejLabel4, valuejLabel5, valuejLabel6, valuejLabel7,
valuejLabel8, valuejLabel9, valuejLabel10, valuejLabel11, valuejLabel12};
JLabel[] pointer = {pointerjLabel3, pointerjLabel4, pointerjLabel5, pointerjLabel6, pointerjLabel7,
pointerjLabel8, pointerjLabel9, pointerjLabel10, pointerjLabel11, pointerjLabel12};
JLabel[] okPointer = {okjLabel3, okjLabel4, okjLabel5, okjLabel6, okjLabel7,
okjLabel8, okjLabel9, okjLabel10, okjLabel11};
int runCount = 0;
public void run() {
if (order.equals("Ascending")) {
if (i == 10) {
pointer[i - 1].setVisible(false);
jLabel3.setText("Sorted!!!");
stop();
} else {
JLabel key = values[i];
key.setBackground(Color.red);
j = i - 1;
int init = 0;
pointer[i].setText("i-->");
pointer[j].setText("j-->");
pointer[i].setVisible(true);
pointer[j].setVisible(true);
while (j >= 0 && Integer.parseInt(values[j].getText()) > Integer.parseInt(key.getText())) {
values[j].setBackground(Color.blue);
insert.setLabel1x(values[j].getX());
insert.setLabel1y(values[j].getY());
if (swap) {
insert.setLabel2x(values[i].getX());
insert.setLabel2y(values[i].getY());
} else {
insert.setLabel2y(key.getY());
insert.setLabel2x(key.getX());
}
int xCounterForward = 0;
int xCounterBackward = 0;
int yCounter = 0;
for (int maincount = 0; maincount < 60; maincount++) {
onLoop = true;
if (xCounterForward < 20) {
insert.setLabel1x(values[j].getX() + 1);
if (init == 0) {
insert.setLabel2x(values[i].getX() - 1);
}
xCounterForward++;
} else if (xCounterForward == 20 && yCounter < 20) {
insert.setLabel1y(values[j].getY() + 1);
if (swap) {
insert.setLabel2y(values[i].getY() - 1);
} else {
insert.setLabel2y(key.getY() - 1);
}
yCounter++;
} else if (yCounter == 20 && xCounterBackward < 20) {
insert.setLabel1x(values[j].getX() - 1);
xCounterBackward++;
}
values[j].setLocation(insert.getLabel1x(), insert.getLabel1y());
if (swap) {
values[i].setLocation(insert.getLabel2x(), insert.getLabel2y());
} else {
key.setLocation(insert.getLabel2x(), insert.getLabel2y());
}
try {
Thread.sleep(MS_TO_WAIT2);
} catch (InterruptedException e) {
}
}
swap = false;
values[j + 1] = values[j];
init++;
pointer[j].setVisible(false);
j = j - 1;
if (j >= 0) {
pointer[j].setText("j-->");
pointer[j].setVisible(true);
}
}
if (j >= 0 && Integer.parseInt(values[j].getText()) < Integer.parseInt(key.getText())) {
values[j].setBackground(Color.green);
values[i].setBackground(Color.green);
okPointer[j].setText("Ok");
okPointer[j].setVisible(true);
}
if (j == -1) {
values[j + 1].setBackground(Color.green);
values[i].setBackground(Color.green);
okPointer[j + 1].setText("Ok");
okPointer[j + 1].setVisible(true);
}
if (onLoop) {
for (int maincount = 0; maincount < 20; maincount++) {
insert.setLabel2x(key.getX() + 1);
insert.setLabel2y(key.getY());
key.setLocation(insert.getLabel2x(), insert.getLabel2y());
try {
Thread.sleep(MS_TO_WAIT2);
} catch (InterruptedException e) {
}
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
values[j + 1] = key;
onLoop = false;
i++;
if (j >= 0) {
try {
Thread.sleep(MS_TO_WAIT2);
} catch (InterruptedException e) {
}
okPointer[j].setVisible(false);
pointer[j].setVisible(false);
} else if (j == -1) {
okPointer[j + 1].setVisible(false);
}
}
}
}
}
Related
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 am doing an assignment for school. It is a towers of hanoi assignment. (I didn't add the larger-disk-over-smaller-disk code yet). When I set tower3 as 4, 3, 2, 1, it says I won, but when I do it while playing the game, nothing happens. Please help! This is due Monday 8:30pm EST.
import java.util.Scanner;
/**
* Simulates a tower that can hold disks.
* #author S. Camilleri
* #author <Hasan Zafar>
*/
public class Challenge {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// This array holds the disks. A 0 represents no disk.
int[] tower = {4,3,2,1};
int[] tower2 = {0,0,0,0};
int[] tower3 = {0,0,0,0};
// This index represents the first available empty spot for a disk.
int index = 0;
int towerCounter = 0;
int length = tower.length;
int length2 = tower2.length;
int length3 = tower3.length;
int diskChoice = 1;
int i;
int held = 0;
int placeChoice;
boolean playing = true;
while (playing)
{
//Check if Won
if (tower3[0] == 4 && tower3[1] == 3 && tower3[2] == 2 && tower[3] == 1) {
System.out.println("Congratulations! You win!");
playing = false;
break;
}
/********************
* Display the towers
********************/
System.out.println();
//Tower1
System.out.print("{ ");
for (int x=0; x<length; x++)
{
System.out.print(tower[x]);
}
System.out.println();
//Tower2
System.out.print("{ ");
towerCounter = 0;
for (int x=0; x<length2; x++)
{
System.out.print(tower2[x]);
}
System.out.println();
//Tower3
System.out.print("{ ");
towerCounter = 0;
for (int x=0; x<length3; x++)
{
System.out.print(tower3[x]);
}
/********************
* Select the highest disk from the tower
********************/
System.out.println();
System.out.println("Pick a tower (The disk highest on that tower will be chosen)");
diskChoice = input.nextInt();
// If user uses the first tower
if (diskChoice == 1) {
i = 3;
while (tower[i] == 0) {
i--;
}
held = tower[i];
tower[i] = 0;
} else if (diskChoice == 2) { // If user uses the second tower
i = 3;
while (tower2[i] == 0) {
i--;
}
held = tower2[i];
tower2[i] = 0;
} else if (diskChoice == 3) { // If user uses the third tower
i = 3;
while (tower3[i] == 0) {
i--;
}
held = tower3[i];
tower3[i] = 0;
}
/********************
* Place the disk
********************/
System.out.println("Where would you like to place" + " " + held + "?");
placeChoice = input.nextInt();
if (placeChoice == 1) {
i = 3;
if (tower[3] == 0){
while (tower[i] == 0) {
i--;
if (i == 0) {
break;
}
}
}
if (tower[i] == 0) {
tower[i] = held;
} else if (tower[i] != 0) {
tower[i+1] = held;
}
} else if (placeChoice == 2) {
i = 3;
if (tower2[3] == 0){
while (tower2[i] == 0) {
i--;
if (i == 0) {
break;
}
}
}
if (tower2[i] == 0) {
tower2[i] = held;
} else if (tower2[i] != 0) {
tower2[i+1] = held;
}
} else if (placeChoice == 3) {
i = 3;
if (tower3[3] == 0){
while (tower3[i] == 0) {
i--;
if (i == 0) {
break;
}
}
}
if (tower3[i] == 0) {
tower3[i] = held;
} else if (tower3[i] != 0) {
tower3[i+1] = held;
}
}
}
}
}
If I set tower3 as 4321 manually, it says I won.
If I set tower3 as 4321 in-game, it just keeps playing.
I figured it out. I forgot to write the 3 at the of win statement.
I have a JTextField.I want after each character the user types,a method call and change the order of character in same JTextField,but in my code displayArrestNo2() method call and print in consol right answer but dont update content of JTextField.How can do it?
public static void main(String args[]) {
final JTextField textField = new JTextField();
textField.setSize(100, 100);
textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
}
public void removeUpdate(DocumentEvent e) {
}
public void insertUpdate(DocumentEvent e) {
try{
Stringx=displayArrestNo2(e.getDocument().getText(0,e.getDocument().getLength()));
System.out.println(x);
}catch(Exception ex){
ex.printStackTrace();
}
}
public void warn() {
}
public String displayArrestNo2(String aValue){
System.out.println("oroginal value: " + aValue);
aValue = " "+aValue+" ";
System.out.println("space added value: "+aValue);
final String validStr = " ابپتثجچحخدرزژسشصضطظعغفقکگلمنوهیي";
int lPos, fPos, i, j, k;
boolean flgEnterIntSection, lastWasChar;
String result = "";
flgEnterIntSection= false;
lastWasChar = false;
lPos = 0;
i = aValue.length()-1;
while( i >= 0) {
char[] aValueArr = aValue.toCharArray();
/* char[] tmpArr = aValue.toCharArray();
char[] aValueArr = new char[tmpArr.length];
for(int x=0; x<tmpArr.length; x++)
aValueArr[x]= tmpArr[tmpArr.length-x-1]; */
if (aValueArr[i] == 'ß')
aValueArr[i] = '˜';
if (convert(aValueArr[i]) == -1)
{
if(validStr.indexOf(aValueArr[i]) > 0)
{
j = 0;
while ( ( (i - j) > 0) && (validStr.indexOf(aValueArr[i-j]) > 0 ))
j = j + 1;
if (j >1)//j>1
{
k = j;
while (j > 0)
{
result = result + aValueArr[i - j+1];//i-j+1
j--;
}
i = i - k+1;//i-k+1
}
else
result = result + aValueArr[i];
}
else
result = result + aValueArr[i];
i--;
flgEnterIntSection = false;
}
else
{
fPos = i;
j = i;
while ((j >= 0) && ((!flgEnterIntSection) || (convert(aValueArr[j]))!=-1))// (StrToIntDef(AValue[j], -1) <> -1)
{
flgEnterIntSection = true;
while ((j >= 0) && (convert(aValueArr[j]))!=-1) // StrToIntDef(AValue[j], -1) <> -1)
j--;
if ((j > 0) && ((aValueArr[j] == '.') || (aValueArr[j] == '/')) )
if (((j-1) >= 0) && (convert(aValueArr[j-1]))!=-1) //StrToIntDef(AValue[j - 1], -1) <> -1)
j--;
}
lPos = j + 1;
for (j = lPos; j <= fPos; j++)
{
result = result + aValueArr[j];
}
i = lPos-1;
}
}
// return result;
// System.out.println("before reverse "+result);
return reverseOrder(result);
}
String reverseOrder(String input){
String [] inArr = input.split(" ");
String reversed = "";
for(int i = inArr.length-1; i>=0; i--){
reversed += inArr[i] + " ";
}
return reversed;
}
public int convert(char ch) {
try {
int m = Integer.parseInt(String.valueOf(ch));
return m;
} catch (Exception e) {
return -1;
}
}
TestJTextField x=new TestJTextField();
x.add(textField);
x.setVisible(true);
}
in insertUpdate() method ,displayArrestNo2() is called per character but dont change content of JTextField.
public class TicTacToe
{
private char currentPlayer;
private char[][] board;
public TicTacToe()
{
board = new char [3][3];
currentPlayer = 'x';
startBoard();
}
public void startBoard()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
board[i][j] = '-';
}
}
}
public void makeBoard()
{
System.out.println("---------------");
for (int i = 0; i < 3; i++)
{
System.out.print("| ");
for (int j = 0; j < 3; j++)
{
System.out.print(board[i][j] + " | ");
}
System.out.println();
System.out.println("---------------");
}
}
public boolean fullBoard()
{
boolean full = true;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i][j] == '-')
{
full = false;
}
}
}
return full;
}
public boolean win()
{
return (rowWin() || columnWin() || diagWin());
}
private boolean rowWin()
{
for (int i = 0; i < 3; i++)
{
if (rowColumn(board[i][0], board[i][1], board[i][2]) == true)
{
return true;
}
}
return false;
}
private boolean columnWin()
{
for (int i = 0; i < 3; i++)
{
if (rowColumn(board[0][i], board[1][i], board[2][i]) == true)
{
return true;
}
}
return false;
}
private boolean diagWin()
{
return ((rowColumn(board[0][0], board[1][1], board[2][2]) == true) ||
(rowColumn(board[0][2], board[1][1], board[2][0]) == true));
}
private boolean rowColumn(char rc1, char rc2, char rc3)
{
return ((rc1 != '-') && (rc1 == rc2) && (rc2 == rc3));
}
public void playerChange()
{
if (currentPlayer == 'x')
{
currentPlayer = 'o';
}
else
{
currentPlayer = 'x';
}
}
public boolean placeMark(int row, int column)
{
if ((row >= 0) && (row < 3))
{
if ((column >= 0) && (column < 3))
{
if (board[row][column] == '-')
{
board[row][column] = currentPlayer;
return true;
}
}
}
return false;
}
}
public class TicTacToedemo
{
public static void main(String[] args)
{
TicTacToe demo = new TicTacToe();
demo.makeBoard();
if (demo.win())
System.out.println("Winner! Hooray!");
else if (demo.fullBoard())
System.out.println("Cat Scratch, Draw.");
demo.playerChange();
}
}
I am not sure how to play the game right, every time I input numbers when I run it, I get the error code. What have I done wrong with this? The code can be compiled and runs and displays the board but when I go to put in the place I want the x or the o to go I get the error code " invalid Top level statement "
You have to use the Scanner class to make a player input using import java.util.Scanner then storing the input. After the import it going to look like this:
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
And you have to manage the sc.nextInt() result, in this example the input variable.
I was designing a simple parser(it works on a simple version of Shunting Yard Algorithm). Here's my code(I haven't dealt with associativity).
public class Parser {
String stack[] = new String[50];
String res = "";
int top = 0;
Operator o1 = new Operator("", 0, 0);
public String parse(String x) {
push("(");
x = x + ")";
for (int i = 0; i < x.length(); i++) {
if (o1.isNumber(x.charAt(i) + "")) {
res = res + x.charAt(i);
} else if (x.charAt(i) == '(') {
push("(");
} else if (o1.isOperator("" + x.charAt(i))) {
if (top != -1) {
while ((top != -1) && (o1.isOperator(stack[top]))) {
int m = o1.getOperatorIndex(stack[top]);
int mp = o1.op[m].prec;
int xp = o1.op[o1.getOperatorIndex("" + x.charAt(i))].prec;
if (m >= xp) {
res = res + stack[top];
}
top--;
}
}
push("" + x.charAt(i));
} else {
if (top != -1) {
while ((top != -1) && (stack[top] != ")")) {
if (o1.isOperator(stack[top])) {
res = res + stack[top];
}
top--;
}
}
}
}
return res;
}
public void push(String m) {
if (top != 49) {
stack[top] = m;
top++;
} else {
System.out.println("Overflow");
}
}
}
I guess you won't need the Operator class's code. When I try executing parse("1+2"), it just returns 12 and not the + sign. What is wrong? and yes, o[0] is +,o[1] is -,o[2] is*, o[3] is /