2016-08-22 4 views
2

Я использую обработку в режиме Java, и я хочу сделать больше, чем 32, если условия, когда я это сделать, как обычным способом, как этотКак сделать несколько если заявления

If (-------- == --------){//dosomething} 

Else If (-------- == --------){//dosomething} 

Else If (-------- == --------){//dosomething} 

Else If (-------- == --------){//dosomething} 

Else If (-------- == --------){//dosomething} 

Else {//dosomething} 

Но только первое условие работы и остальные условия не работают Иногда он дает мне ошибку «EOF»

Я попытался также этот стиль

If (-------- == --------){//dosomething} 

Else {//dosomething} 

If (-------- == --------){//dosomething} 
Else {//dosomething} 


If (-------- == --------){//dosomething} 
Else {//dosomething} 

он также не работает только первый, если с ondition работы

Примечание есть один раз гуй не показывать кнопки или этикетки

Как я мог ответить на этот вопрос, как я мог бы написать много, если условия

это пример значение y1 и у происходит от другого устройства и меняет один и ноль, когда я нажимаю кнопку аппаратного обеспечения, этот код не является полным, но только концепция, а также от y1 до y20 и от x1 до x20 выполняется только первое условие, и я стараюсь использовать все прямоугольники с it

Это обновление для вопроса полный код

** в этом коде Я использую 17 кнопочную кнопку, чтобы читать их, если она нажата, цвет прямоугольника будет черным, и если он не будет нажат, прямоугольник будет белым, он работает хорошо, но только для 9 входов, но остальная часть 17 не работала, обратите внимание, что я проверил все входы и все соединения, и они работают хорошо, так как я могу решить эту проблему. **

импорт обрабатывающий.сериальный. *;

импорт cc.arduino.*;

Arduino arduino;

int x1 = 255;

int x2 = 255;

int x3 = 255;

int x4 = 255;

int x5 = 255;

int x6 = 255;

int x7 = 255;

int x8 = 255;

int x9 = 255;

int x10 = 255;

int x11 = 255;

int x12 = 255;

недействительными установки()

{

размер (780, 600);

// println (Arduino.list());

arduino = новый Arduino (это, Arduino.список() [0], 57600);

arduino.pinMode(13, Arduino.INPUT); 

arduino.pinMode(12, Arduino.INPUT); 

arduino.pinMode(11, Arduino.INPUT); 

arduino.pinMode(10, Arduino.INPUT); 

arduino.pinMode(9, Arduino.INPUT); 

arduino.pinMode(8, Arduino.INPUT); 

arduino.pinMode(7, Arduino.INPUT); 

arduino.pinMode(6, Arduino.INPUT); 

arduino.pinMode(5, Arduino.INPUT); 

arduino.pinMode(4, Arduino.INPUT); 

arduino.pinMode(3, Arduino.INPUT); 

arduino.pinMode(2, Arduino.INPUT); 

}

недействительными дро()

{

RoundRect (10, 10, 150, 90, x1);

roundRect (180, 10, 150, 90, x2);

roundRect (350, 10, 150, 90, x3);

roundRect (520, 10, 150, 90, x4);

roundRect (10, 120, 150, 90, x5);

roundRect (180, 120, 150, 90, x6);

roundRect (350, 120, 150, 90, x7);

roundRect (520, 120, 150, 90, x8);

roundRect (10, 230, 150, 90, x9);

roundRect (180, 230, 150, 90, x10);

roundRect (350, 230, 150, 90, x11);

roundRect (520, 230, 150, 90, x12);

////////////////////////////////////////////// /////////////////////////

if (arduino.digitalRead (13) == Arduino.HIGH) {////

x1=0;                        //// 

} ////

иначе, если (arduino.digitalRead (13) == Arduino.LOW) {////

x1=255;                     //// 

} ////

//////////////////////////////////////// /////////////////////

///////////////////////// //////////////////////////////////////////////

если (arduino.digitalRead (12) == Arduino.HIGH) {////

x2=0;                        //// 

} ////

иначе, если (arduino.d igitalRead (12) == Arduino.НИЗКИЙ) {////

x2=255;                     //// 

} ////

/////////////////////////// //////////////////////////////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (11) = = Arduino.HIGH) {////

x3=0;                         //// 

} ////

иначе, если (arduino.digitalRead (11) == Arduino.LOW) {////

x3=255;                      //// 

} ////

/////////// ////////////////////////////////////////////////// //

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (10) == Arduino.HIGH) {////

x4=0;                         //// 

} ////

иначе, если (arduino.digitalRead (10) == Arduino.LOW) {////

x4=255;                      //// 

} ////

// ////////////////////////////////////////////////// ///////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (9) == Arduino.HIGH) {////

x5=0;                         //// 

} ////

иначе, если (arduino.digitalRead (9) == Arduino.LOW) {////

x5=255;                      //// 

} ////

//////////////////////////////////////////////// //////////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (8) == Arduino.HIGH) {////

x6=0;                         //// 

} ////

иначе, если (arduino.digitalRead (8) == Ардуино ,НИЗКИЙ) {////

x6=255;                      //// 

} ////

/////////////////////////// ////////////////////////////////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (7) == Arduino.HIGH) {////

x7=0;                         //// 

} ////

иначе, если (arduino.digitalRead (7) == Arduino.LOW) {////

x7=255;                      //// 

} ////

////////// ////////////////////////////////////////////////// ////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (6) == Arduino.HIGH) {////

x8=0;                         //// 
4444516410 +617451515053691368888

} ////

иначе, если (arduino.digitalRead (6) == Arduino.LOW) {////

x8=255;                       //// 

} ////

// ////////////////////////////////////////////////// /////////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (5) == Arduino.HIGH) {/ ///

x9=0;                         //// 

} ////

иначе, если (arduino.digitalRead (5) == Arduino.LOW) {////

x9=255;                       //// 

} ////

///////////////////////////////////////////// ///////////////////

//////// ////////////////////////////////////////////////// /////////////

, если (arduino.digitalRead (4) == Arduino.HIGH) {////

x10=0;                        //// 

} ////

else if (arduino.digitalRead (4) == Arduino.НИЗКИЙ) {////

x10=255;                     //// 

} ////

/////////////////////////// ////////////////////////////////////

/////////////////////////////////////////////////////////////////////// 

, если (arduino.digitalRead (3) == Arduino.HIGH) {////

x11=0;                        //// 

} ////

иначе, если (arduino.digitalRead (3) == Arduino.LOW) {////

x11=255;                     //// 

} ////

////////// ////////////////////////////////////////////////// //

//////////////////////////////////////////// ///////////////////////////

if (arduino.digitalRead (2) == Arduino.HIGH) {////

x12=0;                        //// 

} ////

иначе, если (arduino.digitalRead (2) == Arduino.HIGH) {////

x12=255;                     //// 

} ////

///////////////////////////////////////////////// /////////////

недействительными RoundRect (с плавающей точкой х, плавать у, плавать ш, флоат ч, поплавок е) {

float corner = w/10.0; 

float midDisp = w/20.0; 

fill(f); 

beginShape(); 

curveVertex(x+corner, y); 

curveVertex(x+w-corner, y); 

curveVertex(x+w+midDisp, y+h/2.0); 


curveVertex(x+w-corner, y+h); 

curveVertex(x+corner, y+h); 

curveVertex(x-midDisp, y+h/2.0); 



curveVertex(x+corner, y); 

curveVertex(x+w-corner, y); 

curveVertex(x+w+midDisp, y+h/2.0); 

endShape(); 

} `

enter image description here

+4

На самом деле, это вонючий код с 50+ if/elseif ... Поэтому вместо того, чтобы пытаться исправить это, вы должны думать о другом подходе в конце концов. – Fildor

+0

Ошибка EOF может быть вызвана случайным замыкающим кронштейном. – byxor

+1

Также Java чувствителен к регистру. Используйте 'if',' else' и 'else if'. – byxor

ответ

10

Когда вы пишете

if (-------- == --------){//dosomething}; 

Это все заявление. ; означает, что вы не можете поместить else после него.

Вместо этого вы должны написать

if (-------- == --------) { 
    //dosomething 
} else if (-------- == --------) { 
    //dosomething else 
} 

Если первое условие является единственным, который называется, это означает, что это всегда так.

BTW Если у вас длинные цепочки, то, вероятно, есть лучший способ сделать это, например, используя switch или полиморфизм в зависимости от того, что вы пытаетесь сделать.

+1

Полиморфизм - хороший способ уменьшить сцепление. Вы также можете использовать State-pattern и chaing обработчиков. 'handlers.stream(). filter (isApplicable to state func) .findFirst(). get(). apply()' –

2

Короткий ответ: вы этого не делаете.

Длинные ответы: такие длинные цепи if/else противоположны хорошему дизайну OO! Вы не спрашиваете объекты о каком-либо состоянии; затем внести изменения в некоторые другие вещи.

Вместо этого вы должны использовать полиморфизм.

Пример:

abstract class Whatever { 
    void doSomething(); 
// ... probably other methods as well 

с и различных конкретных подклассов, как

class SpecificWhatever extends Whatever { 
    @Override void doSomething() { // ... 

И, наконец, у вас есть

class WhateverFactory { 
    Whatever createFrom(...) { 
    // here you might actually need a switch or if/else 

Существенным моментом здесь является: вы пытаетесь трудно избежать стиль if/else/switch. Он добавляет лот сложности к вашему коду, и это затрудняет поддержание базы кода (потому что это вызывает так много связей внутри ваших классов).

И, чтобы дать более прямой намек на ваш вопрос; один образец, который мне нравится:

if (whatever) { 
    doSomething(); 
    return; 
} 

if (somethinElse) { 
    doSomethingElse(); 
    return; 
} 

Это очень удобно, если ваши методы должны возвращать значение; и вы можете уменьшить две линии к одному:

return doSomething(); 

Да, это является нарушением старой доброй «однократная единого выхода» парадигмы; но я думаю, что это делает, если цепочки/elses (те, которых вы не можете избежать) намного легче читать.

Учитывая ваши данные, мне интересно, не можете ли вы использовать один или несколько объектов Map<Integer, Integer>. Итак, вы спрашиваете карту, каково значение X для некоторого Y-ввода (если эти числа являются действительно постоянными литералами).

+1

Хотя я абсолютно согласен с утверждением - и @PeterLawrey также упоминает об этом в своем ответе - это отчасти избегает для решения проблемы вопроса. Я не хочу оскорблять, просто говорю. Вот почему я написал это как комментарий, а не ответ. – Fildor

+0

Мое внимание было сосредоточено на предоставлении «полиморфизма». Всегда есть люди, дающие «точный конкретный ответ», который фиксирует конкретную проблему в вопросе. Я пытаюсь заработать свою репутацию, предоставляя «второй взгляд на более широкую контекстную точку зрения». – GhostCat

+1

Вопрос @Fildor OP действительно [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem): «Я борюсь с моим решением», скорее чем «Я борюсь с моей проблемой». Вполне возможно предложить другой подход, если подход OP не является хорошим. –

1

Другие вопросы говорят вам избегать помещать точку с запятой после инструкции if (о которой вы сказали, что вы этого не сделали) или изменить свой дизайн (что на самом деле не отвечает на ваш вопрос). Эти ответы не являются неправильными, но они также не затрагивают ваш основной вопрос.

Похоже, вы просто смущены основным синтаксисом цепи if else-if else.

Вот базовый синтаксис:

if(x > 75){ 
    println("A"); 
} 
else if(x > 50){ 
    println("B"); 
} 
else{ 
    println("C"); 
} 

Обратите внимание, что Java (и, следовательно, обработка) является чувствительным к регистру, поэтому if, else if и else все строчной.

Также важно удостовериться, что вы считаете свои открывающиеся и закрывающиеся фигурные скобки. Если они не совпадают точно, вы получите ошибку, о которой говорите. Вот пример плохой код:

if(x > 75){ 
    println("A"); 
else if(x > 50){ 
    println("B"); 
} 

Вы можете также поместить несвязанные if заявления один за другим.Они синтаксис для этого просто выглядит следующим образом:

if(x > 75){ 
    println("A"); 
} 
else if(x > 50){ 
    println("B"); 
} 
else{ 
    println("C"); 
} 

if(y < 1){ 
    println("D"); 
} 
else if(y < 2){ 
    println("E"); 
} 
else{ 
    println("F"); 
} 

Вы можете получить более сложными и делать такие вещи, как положить if заявления в другом if заявлении, но это не похоже, что это то, что вы пытаетесь сделать здесь ,

+0

работает^_ ^, но только для 18 и я хочу 34 условия, так что я могу сделать? –

+0

@mamdouhabdelfatah Я не уверен, что вы просите. Это будет работать для любого количества блоков. Если он не работает, вы, вероятно, пропустили скобку или фигурные скобки. Убедитесь, что ваш код правильно отступом, чтобы сделать так, как это легче видеть. Если вы все еще не можете заставить его работать, опубликуйте обновленный код, и мы пойдем оттуда. –

+0

Я обновил вопрос, добавив в него код –

Смежные вопросы