2010-12-26 3 views
1

Я новый студент, который пытается использовать java if else statements на данный момент.java if else statement

Я включил мой класс, и мне нужно сказать, если этот код получает 0 ошибок для всех 4 ошибок (error11, error12, error13 и error14), необходимо отобразить текст «Ответ». Этот код работал без инструкций if else, и в этих двух строках есть 2 ошибки. Пожалуйста, объясните мне, как это сделать?

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); 
} 
} 
} 

ответ

3

Вы не можете использовать такие запятые - вам нужно использовать boolean logical operators.

Если вы хотите or, используйте ||, если вы хотите использовать and&&:

// 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) 

Вы также с помощью оператора присваивания = вместо оператора равенства ==. Вы должны прочитать на своем operators.

Кроме того, если вы всегда хотите, пункт else бежать, когда пункт if неверен, вам не нужно, чтобы добавить второй if условно:

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

Не относится к вашему вопросу, но как указано в стиле, имена ваших переменных x, y, d и w (с цифрами или без) - это плохая практика - используйте более описательные имена и читаемость увеличится.

Наличие номеров для смежных переменных предполагает, что вы должны использовать arrays.

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

Вы ожидали использовать == вместо =? –

+0

@Peter Lawrey - heh. Полностью пропущен этот бит ... – Oded

+0

@Kumu - Вы завершаете 'if' с'; 'после замыкающей скобки (' error14 == 0); '). Это неправильный синтаксис. Удалите это ';'. – Oded

0

Использование запятых в if утверждения невозможны. Вы должны использовать логические операторы: &&, что означает and, и ||, что означает or.

1

При проверке нескольких условий необходимо указать, является ли это условие И (&&) или условием ИЛИ (||).

|| перестанет оценивать логическое выражение, когда он встречает выражение true, и вернуть true или вернуть false иначе. Например:

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

&& перестанет оценивать логическое выражение, когда он встречает выражение false, и вернуть false или вернуть true иначе. Например:

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

Спасибо за все ответы, и теперь я изменил его как следующее, если (error11 == 0 && error12 == 0 && error13 == 0 && error14 == 0); \t { \t \t System.out.println («Ответ»); \t} \t еще \t {} Теперь отображается ошибка синтаксиса ошибок на знак «другой», удалите этот маркер \t на Learn_1.deltaR (Learn_1.java:55), как это пожалуйста, кто-нибудь есть идеи? – Leo

0

Самый простой способ проверить, что это, кажется, вы хотите, чтобы проверить это:

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 
} 

это делает использование битовых целочисленных операций.

Однако, ваш код, кажется, отсутствует в случае, если некоторые ошибки равны нулю, некоторые не являются - или, по крайней мере, этот случай ничего не делает. Если этот случай не должен быть быть ничем, добавьте его поведение с else на конец или присоедините его к одному из других случаев, написав этот случай как else, а не как тест if.

1

Для математических сравнений вы можете использовать следующее.

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

может быть заменена на следующую предполагающей errorXX равно 0 или 1.

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

и

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

становится

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

Однако вместо того, чтобы использовать Int для true/false вы должны используйте логическое значение. Это для чего. например

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

Вы можете упростить этот код.

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); 

становится

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

узнать о логической операции .. они ИЛИ (||) И (& &) РАВНО (==) и НЕ (!)

+0

и НЕ ДОБАВИТЬ ';' после этого утверждения, если (bla bla) {bla bla} – amateurs

+0

вот что дало вам новую ошибку – amateurs