2010-12-26 13 views
1

Ich bin ein neuer Student, der versucht, Java zu verwenden, wenn andere Aussagen im Moment.java wenn sonst Aussage

Ich habe meine Klasse erreicht und ich muss sagen, wenn dieser Code 0 Fehler für alle 4 Fehler (error11, error12, error13 und error14) bekommen, müssen Sie den Text "Answer" anzeigen. Dieser Code funktionierte ohne die Anweisungen if else und es gibt 2 Fehler in diesen 2 Zeilen. Bitte erklären Sie mir, wie es geht?

public static void deltaR() 
{ 
int x; 
int x11, x12, x13, x14; 
int x21, x22, x23, x24; //inputs 

double w10, w11, w12;//weights for first neuron 
int d11, d12, d13, d14;//desired output for first neuron 
double net11, net12, net13, net14;//sum of weights times inputs 
int y11, y12, y13, y14;//outputs 
int error11, error12, error13, error14;//error 

//double w20, w21, w22;//weights for second neuron 
//int d21, d22, d23, d24;//desired output for second neuron 
//double net21, net22, net23, net24;//sum of weights times input 
//int y21, y22, y23, y24;//outputs 
//int error21, error22, error23, error24;//error 

if (error11 = 0, error12 = 0, error13 = 0, error14 = 0) 
{ 
    System.out.println("Answer"); 
} 
else if (error11 != 0, error12 != 0, error13 != 0, error14 != 0) 
{ 
double coe=0.5;//learning coefficient 
x=1; 

x11=0; 
x12=0; 
x13=1; 
x14=1; 

x21=0; 
x22=1; 
x23=0; 
x24=1; 

d11= 0; 
d12= 1; 
d13= 0; 
d14= 1; 

w10=0.5; 
w11=-1; 
w12=1.5; 

net11=(x*w10 + x11*w11 + x21*w12); 
net12=(x*w10 + x12*w11 + x22*w12); 
net13=(x*w10 + x13*w11 + x23*w12); 
net14=(x*w10 + x14*w11 + x24*w12); 

if (net11>=0) 
    y11=1; 
else 
    y11=0; 

if (net12>=0) 
    y12=1; 
else 
    y12=0; 

if (net13>=0) 
    y13=1; 
else 
    y13=0; 

if (net14>=0) 
    y14=1; 
else 
    y14=0; 

error11=(d11-y11); 
error12=(d12-y12); 
error13=(d13-y13); 
error14=(d14-y14); 

System.out.println("net value 1: "+net11); 
System.out.println("net value 2: "+net12); 
System.out.println("net value 3: "+net13); 
System.out.println("net value 4: "+net14); 

System.out.println("output 1: "+y11); 
System.out.println("output 2: "+y12); 
System.out.println("output 3: "+y13); 
System.out.println("output 4: "+y14); 

System.out.println("error1: "+error11); 
System.out.println("error2: "+error12); 
System.out.println("error3: "+error13); 
System.out.println("error4: "+error14); 
} 
} 
} 

Antwort

3

Sie können Kommas nicht verwenden - Sie müssen boolean logical operators verwenden.

Wenn Sie or möchten, verwenden Sie ||, wenn Sie and&& verwenden möchten:

// If ANY of the error variables are 0 the if clause will execute 
if(error11 == 0 || error12 == 0 || error13 == 0 || error14 == 0) 

// If ALL of the error variables are 0 the if clause will execute 
if(error11 == 0 && error12 == 0 && error13 == 0 && error14 == 0) 

Sie auch den Zuweisungsoperator = anstelle des Betreibers Gleichheit verwenden ==. Sie sollten auf Ihrem operators nachlesen.

Wenn Sie darüber hinaus immer die else Klausel ausgeführt werden soll, wenn die if Klausel nicht korrekt ist, müssen Sie nicht die zweite if bedingte hinzuzufügen:

if(error11 == 0 || error12 == 0 || error13 == 0 || error14 == 0) 
{ 
} 
else 
{ 
    // Code here will run if the above `if` clause evaluates to false 
} 

nicht zu Ihrer Frage, aber Als eine Sache des Stils, Benennung Ihrer Variablen x, y, d und w (mit den Zahlen oder ohne) ist eine schlechte Praxis - verwenden Sie mehr beschreibende Namen und Lesbarkeit wird zunehmen.

Wenn Sie Nummern für verwandte Variablen angeben, sollten Sie arrays verwenden.

int[] inputs = new int[9]; // inputs is an array of 9 integers 
+1

Haben Sie erwartet, == statt = zu verwenden? –

+0

@Peter Lawrey - heh. Ich habe dieses Bit komplett verpasst ... – Oded

+0

@Kumu - Sie beenden das 'if' mit dem'; 'nach der schließenden Klammer (' error14 == 0); '). Das ist eine falsche Syntax. Entferne das ';'. – Oded

0

Verwenden von Kommas in if Anweisungen ist unmöglich. Sie müssen logische Operatoren verwenden: && was bedeutet and und || was or bedeutet.

1

Wenn Sie mehrere Bedingungen prüfen, müssen Sie angeben, ob es sich um eine UND-Bedingung (&&) oder eine ODER-Bedingung handelt (||).

|| stoppt den Booleschen Ausdruck Auswertung, sobald es einen true Ausdruck findet, und das Rück true oder Rückkehr false anders. Zum Beispiel:

if (userIsMale || userIsFemale) { /* user is male OR female */ } 

&& stoppt den Booleschen Ausdruck Auswertung, sobald es einen false Ausdruck findet, und das Rück false oder Rückkehr true anders. Zum Beispiel:

if (userIsHuman && userIsMale) { /* user is human AND is male */ } 
+0

Danke für alle Antworten und jetzt habe ich es wie folgt geändert: if (error11 == 0 && error12 == 0 && error13 == 0 && error14 == 0); \t { \t \t System.out.println ("Antwort"); \t} \t sonst \t {} es jetzt auf Token "else" den Fehler Syntaxfehler angezeigt werden, löschen Sie dieses Token \t bei Learn_1.deltaR (Learn_1.java:55) wie diese Bitte jemand eine Idee? – Leo

0

Der einfachste Weg zu testen, was es scheint, Sie testen wollen, ist:

if ((error11 | error 12 | error13 | error 14) == 0) { //all are zero 
//...do stuff 
} else if ((error11 & error12 & error13 & error14) != 0) { //all are not zero 
//...do different stuff 
} 

dies macht die Verwendung der Integer-Bit-Operationen.

Allerdings scheint Ihr Code den Fall für einige Fehler fehlen, sind einige nicht - oder zumindest, dass Fall nichts tut. Wenn dieser Fall nicht nichts sein sollte, fügen Sie entweder sein Verhalten mit einem else am Ende hinzu oder verbinden Sie es in einem der anderen Fälle, indem Sie diesen Fall als else anstatt als if Test schreiben.

1

Für mathematische Vergleiche können Sie Folgendes verwenden.

if (error11 == 0 && error12 == 0 && error13 == 0 && error14 == 0) 

kann mit der folgenden Annahme errorXX ersetzt ist 0 oder 1.

if (error11 + error12 + error13 + error14 == 0) 

und

if (error11 == 0 || error12 == 0 || error13 == 0 || error14 == 0) 

wird

if (error11 * error12 * error13 * error14 == 0) 

Anstatt jedoch einen int des Verwendens für wahr/falsch solltest du verwende einen Booleschen Wert. Das ist es, was es ist. z.B.

if (!(error11 || error12 || error13 || error14)) 

Sie können den Code so vereinfachen.

d11= 0; 
net11=(x*w10 + x11*w11 + x21*w12); 
if (net11>=0) 
    y11=1; 
else 
    y11=0; 

error11=(d11-y11); 
System.out.println("error1: "+error11); 

wird

double net11=(x*w10 + x11*w11 + x21*w12); 
System.out.println("error1: "+ (net11 >=0 ? -1 : 0)); 
0

über logische Operation erfahren .. sie sind OR (||) UND (& &) GLEICH (==) und NICHT (!)

+0

und NICHT ';' nach if-Anweisung nur wenn (bla bla) {bla bla} – amateurs

+0

das ist, was gab Ihnen den neuen Fehler – amateurs