2014-10-16 6 views
0

Моя программа запрашивает у пользователя ввод кода элемента. Дублированные коды не допускаются, поэтому, когда он вводит код, цикл for проверяет, существует ли он. Цикл for должен быть break для моего условия, потому что я получаю вывод «Код элемента существует», но он все еще не добавляет элемент в массив. Что мне не хватает?Моя петля не заканчивается, когда условие истинно

tems[] items = new Items[200]; 
AddItem add = new AddItem(); 
Scanner s = new Scanner(System.in); 
int z,x; 
double c,v; 
String n,m,b; 
public void addItem(){ 
    int r; 
    z = add.getCode(); 
    x = add.getQuantity(); 
    c = add.getCostPrice(); 
    n = add.getDescription(); 
    m = add.getDiscount(); 
    v = add.getSellingPrice(); 
    b = add.getStatus(); 

    for(r = 0; r < items.length; r++){ 
     for(int q=0; q<r; q++){ 
      if(z==items[q].getCode()){ 
       System.out.println("Item's code exists"); 
       break; 
      } 
     } 
     if(items[r]==null){ 
      items[r] = new Items(z, n, x, c, v, b, m); 
      break; 
     }else if (items[r]!=null){ 
      continue; 
     }    
    } 
} 
+2

'break' только выходит из внутреннего большинства циклов -' for (int q' –

+0

Вы должны разделить цикл for на логическую функцию –

+0

и, пожалуйста, улучшите свои имена переменных .. И они должны быть локальными для функции , а не globals –

ответ

5

Если вы хотите break внешний контур, используйте labeled break. Нечто подобное,

out: for(r = 0; r < items.length; r++){ 
    for(int q=0; q<r; q++){ 
    if(z==items[q].getCode()){ 
     System.out.println("Item's code exists"); 
     break out; 
    } 
    } 
+1

его первый раз, увидев «вне». thx его сработало, но еще один вопрос, могу ли я использовать его в других вещах, кроме цикла for? или это единственное его использование? – mazin

+0

@mazin Нажмите ссылка в моем ответе на тему учебника, но короткий ответ - это метки, которые можно использовать для * 'switch' *, *' break'/'continue' *, *' for' *, * 'while' * и *' do-while' *. Кроме того, 'out' может быть любой ярлык, который вам нужен. –

0

Ваш код немного сложно понять. Попробуйте улучшить имена переменных и создавать комментарии, чтобы другие могли лучше понимать код. I Поверьте, проблема заключается в ваших петлях. Оператор break вырывается из первого цикла for, но он не выйдет из обоих. Если я понимаю ваш код, тогда было бы лучше разместить флаг, чтобы правильно вырваться из обоих циклов.

0

Альтернативой использованию перерыв использует логическую переменную:

boolean codeExists = false; 
for(r = 0; r < items.length && !codeExists; r++){ 
    for(int q=0; q<r && !codeExists; q++){ 
     if(z==items[q].getCode()) { 
      System.out.println("Item's code exists"); 
      codeExists = true; 
     } 
    } 
} 

Обе петли будут выходили один раз codeExists становится правдой.

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