Vereinfachung folgender Abfrage
crs.one
- java
tach auch...
bin an dem punkt angelangt, an dem ich einfach den wald vor lauter bäumen nicht mehr sehe ;)
ich würde gerne wissen ob jemand eine vereinfachung in dieser abfrage findet:
------------------------------------------------------------------
if((runner == anfang) || ((runner != anfang) && (runner != ende)))
{
runner.get_next().set_last(runner.get_last());
}
else
{
ende = runner.get_last();
}
if((runner == ende) || ((runner != anfang) && (runner != ende)))
{
runner.get_last().set_next(runner.get_next());
}
else
{
anfang = runner.get_next();
}
------------------------------------------------------------------
es liegt wahrscheinlich direkt auf der hand, doch schau ich mir diesen code-schnippel einfach schon zu lange an und hoffe nun auf den rat und die augen einiger dritter.
der OR-part der beiden if-abfragen ist ja identisch und daher sollte es irgendwie möglich sein, diese beiden zu kombinieren.
hinweis:
es handelt sich um eine doppelt verkettete dynamische listenstruktur in java bei der ich einen anfangs- und end-"zeiger" verwende.
nun sollen beim löschen die "zeiger"-strukturen umgestellt werden und beim löschen des ersten bzw. letzten elementes dabei noch der anfangs- bzw. end-"zeiger" versetzt werden.
thx für eure zeit, mühe und guten augen ;)
greez
crs
Hallo,
if(runner!=ende){
runner.get_next().set_last(runner.get_last());
}
else{
ende=runner.get_last();
}
if((runner==ende) || (runner!=anfang)){
runner.get_last().set_next(runner.get_next());
}
else{
anfang=runner.get_next();
}
Gruß aus Berlin!
eddi
hey vielen dank eddi...
schönen gruß zurück aus dem rheinland.
crs
gudn tach!
deine erste vereinfachung setzt voraus, dass anfang!=ende gilt (die zweite aber nicht).
mit dieser voraussetzung (anfang!=ende) ginge es dann noch einfacher:
if(runner!=ende)
runner.get_next().set_last(runner.get_last());
else
ende=runner.get_last();
if(runner!=anfang)
runner.get_last().set_next(runner.get_next());
else
anfang=runner.get_next();
(runner!=anfang) erlaubt ja auch (runner==ende), falls (anfang!=ende).
man kann solche probleme uebrigens mit einer kleinen tabelle loesen
werte fuer | runner==ende ||
runner | (runner!=ende &&
(disjunkt) | runner!=anfang)
-----------+-----------------
anfang | 0
ende | 1
else | 1
also waere die vereinfachung des ausdrucks: (runner!=anfang)
falls auch anfang==ende gelten koennte, wuerde die tabelle etwas komplizierter:
werte fuer | runner==ende ||
runner | (runner!=ende &&
(disjunkt) | runner!=anfang)
------------------------------+-----------------
anfang (aber nicht ende) | 0
ende (und nicht anfang) | 1
anfang (==ende) | 1
else (weder anfang noch ende) | 1
und als ausdruck wuerde sich (runner!=anfang || runner==ende) ergeben.
eine andere moeglichkeit, die aber nicht jedem leichter faellt, ist das umformen:
r=runner, a=anfang, e=ende
(r==a) || ((r!=a) && (r!=e))
<=> ((r==a) || (r!=a)) && ((r==a) || (r!=e))
<=> true && ((r==a) || (r!=e))
<=> ((r==a) || (r!=e))
eigentlich fertig. falls jedoch (a!=e) vorausgesetzt wird, kann man noch einen schritt weiter umformen:
<=> (fuer a!=e) (r!=e)
auf der sicheren seite ist man also mit:
if(runner==anfang || runner!=ende)
runner.get_next().set_last(runner.get_last());
else
ende=runner.get_last();
if(runner==ende || runner!=anfang)
runner.get_last().set_next(runner.get_next());
else
anfang=runner.get_next();
prost
seth
moin...
danke für diese echt detailierte und hilfreiche erklärung seth.
mit dieser allgemein gültigen form lässt sich echt alles minimalisieren. echt klasse.
schönen tag noch
crs