View Full Version : [Frage] Ich steh am Schlauch...
... Ehrlich, irgendwas scheine ich seit gestern zu übersehen, ich checke es einfach nicht.
Habe in Runde 3 ein Programm von jemandem bekommen, es leicht geändert und passt.
Die Boolean-Variable spezerror ist aber aus irgendeinem Grund auf true gesetzt, und ich komme nicht drauf wieso!!!
Hier mal der Anfang des Proggis:
import eprog.*;
public class Test extends EprogIO {
public static void main (String args[]) {
int anzahl;
float a=0,b=0,c=0,A = 0;
float a2=0,b2=0,c2=0;
float a3=0,b3=0,c3=0;
float a4=0,b4=0,c4=0;
boolean spezerror = false;
String ret="";
try {
anzahl = readInt();
if (anzahl<5)
{
if (anzahl>=2 && anzahl<=4)
{a = readFloat();
b = readFloat();
c = readFloat();}
// Hier ist Spezerror bereits true!
if (spezerror = true)
{println ("FALSCHE EINGABE");} /// Testanweisung
....
....
....
Ich verstehe das nicht. Er schreibt mir tatsächlich "FALSCHE EINGABE", also muss spezerror = true sein. Aber wo wird bis hierher spezerror auf true gesetzt?!?!?! Fuck.... übersehe ich was?
// Hier ist Spezerror bereits true!
if (spezerror = true)
{println ("FALSCHE EINGABE");} /// Testanweisung
wieso ueberpreufst du ueberhaupt spezerror, wenn sichs gar nicht aendern kann? oder fehlt da noch was im code?
ansonsten wuerd ich sagen sollt da ein "==" stehn statt "=", sonst setzt du es auf true und damit is die if bedingung natuerlich erfuellt. (vorausgesetzt das is kein typo von dir :))
.... nein, nein... ich habe nicht den ganzen Code reingepostet, wäre wohl sonst zu unübersichtlich.
Aber später wird der Spezerror relevant und ich habe die Testanweisung hier eingeschoben um zu sehen wo spezerror fälschlicherweise schon auf true ist.
Äh, == ... Mann, das war's, so'n SCHEISS, echt!
Einfach nur peinlich...
... trotzdem danke für die schnelle Hilfe!
... noch nicht zu stimmen.
Hier mal der ganze Code:
import eprog.*;
public class Test extends EprogIO {
public static void main (String args[]) {
int anzahl;
float a=0,b=0,c=0,A = 0;
float a2=0,b2=0,c2=0;
float a3=0,b3=0,c3=0;
float a4=0,b4=0,c4=0;
boolean spezerror = false;
String ret="";
try {
anzahl = readInt();
if (anzahl<=4 || anzahl>=2)
{
if (anzahl>=2 && anzahl<=4)
{a = readFloat();
b = readFloat();
c = readFloat();}
if (a<=0 || a>30 || b<=0 || b>30 || c<=0 || c>30)
{spezerror = true;}
if (spezerror == true)
{println ("FALSCHE EINGABE");}
if (anzahl>=2 && anzahl<=4)
{a2 = readFloat();
b2 = readFloat();
c2 = readFloat();}
if (a2<=0 || a2>30 || b2<=0 || b2>30 || c2<=0 || c2>30)
{spezerror = true;};
if (anzahl>=3 && anzahl<=4)
{a3 = readFloat();
b3 = readFloat();
c3 = readFloat();}
if (a3<=0 || a3>30 || b3<=0 || b3>30 || c3<=0 || c3>30)
{spezerror = true;};
if (anzahl==4)
{a4 = readFloat();
b4 = readFloat();
c4 = readFloat();}
if (a4<=0 || a4>30 || b4<=0 || b4>30 || c3<=0 || c4>30)
{spezerror = true;};
}
else {spezerror=true;}
if (spezerror==true)
{println ("FALSCHE EINGABE");}
if (spezerror==false)
{
if (anzahl == 2 && Math.abs(c*c - a*a - b*b) <= 0.3 && Math.abs(c2*c2 - a2*a2 - b2*b2) <= 0.3 && c-c2 <= 0.3)
{ret += ("J");}
else {ret += ("N");}
if (anzahl == 4 && Math.abs(c*c - a*a - b*b) <= 0.3 && Math.abs(c2*c2 - a2*a2 - b2*b2) <= 0.3 && Math.abs(c3*c3 - a3*a3 - b3*b3) <= 0.3 && Math.abs(c4*c4 - a4*a4 - b4*b4) <= 0.3 && c-c2+c3+c4 <= 0.3)
{ret += ("J");}
else {ret += ("N");}
if (anzahl == 3 && Math.abs(a+b-c3-c2) <= 0.3 || Math.abs(a2+b2-c2-c) <= 0.3 || Math.abs(a3-b3+c2-c) <= 0.3 )
{ret +=("J");}
else {ret += ("N");}
println (ret);
}
}
catch (EprogException e){
println("?");
}
}
}
Zur Erklärung:
Man soll zuerst die Anzahl der Dreiecke (2,3 oder 4) eingeben, dann die Seitenkanten der 2, 3 oder 4 Dreiecke (zwischen null und max. 30).
Das Programm soll prüfen ob sich die Dreiecke so aneinanderlegen lassen das ein Quadrat oder eine Raute entsteht (Toleranz der Seitenkanten 0,3). Ist dies möglich soll "J" ausgegeben werden, ansonsten "N".
Bei Eingabe von 5, 88 oder 1534 Dreiecken sollte "FALSCHE EINGABE" ausgegeben werden. Bei mir tut er das aber auch wenn ich 2 Dreiecke und dazu passende Seitenlängen angebe.
Was ist da los?
Sie ist true, weil Du sie im if auf true setzt...
if (spezerror = true)
Richtiger:
if (spezerror == true)
[EDIT]Mmmmh...selbe Antwort bereits übersehen, tralala.
... habe ich noch irgendwo ein if indem ich = true geschrieben habe? Ich denke nicht... trotzdem klappt's nicht.
... habe ich noch irgendwo ein if indem ich = true geschrieben habe? Ich denke nicht... trotzdem klappt's nicht.
Also, davon abgesehen, dass der Code sehr, sehr unübersichtlich ist...
Probier mal folgenden Trick. Einfach nach jedem "if... spezerror=true" ein "System.out.println(spezerror? "true" : "false"); einbauen.
Du brauchst dann nur mehr abzählen, beim wievielten spezerror-check Du das Problem hast und wirst es dann sehr schnell finden. Wenn nicht: Bitte genau die Stelle posten, bei der das Ding "unerwarteter Weise" true wird ;-)
Liebe Grüße // René!
derbrain
29-05-2004, 01:06
http://hades.gothic.at/iforum/images/smilies/ahhh.gif himmel hilf, hast du noch nie was von schleifen und arrays gehört? hab übrigens das selbe beispiel http://hades.gothic.at/iforum/images/smilies/biggrin.gif ich hoff ich kriegs morgen fertig.
warum machst du jedesmal diese if (anzahl>=2 && anzahl<=4) - abfrage? einmal würd doch reichen http://hades.gothic.at/iforum/images/smilies/confused.gif. und wozu soll die abfrage if (anzahl<=4 || anzahl>=2) gut sein? die ist doch IMMER wahr (jede zahl ist kleiner als 4 ODER größer als 2). übernimmst du dich mit dem beispiel nicht ein wenig? ich find es eigentlich ziemlich schwer (von den algorithmen her), und ich würd meine programmierkenntnisse doch als ziemlich fortgeschritten einstufen...
naja, vielleicht kriegst dus ja noch hin. gute arbeit http://hades.gothic.at/iforum/images/smilies/thumb.gif
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.