Как исправить это условие while и цикл for
Я пытаюсь выяснить правильный способ программирования цикла while, который должен выйти, как только условие сортировки всех черных шариков в начало массива станет истинным, но может сделать это только с помощью оператора if с инструкцией break.
Вторая проблема-это последний цикл for в методе main, который не должен быть нужен и на самом деле не имеет смысла, но заставляет сортировщик повторять дополнительные разы и исправляет один случай, когда белый мрамор пропускается, но условие того, что все черные шарики находятся в начале, все равно каким-то образом выполняется.
Любая помощь с улучшениями будет оценена по достоинству.
import java.util.Arrays; public class lostMyMarbles{ public static void main(String[] args){ String[] marbles = {"wMarble", "bMarble", "wMarble", "wMarble", "bMarble", "bMarble"}; //String[] marbles = {"bMarble", "bMarble", "bMarble", "bMarble", "bMarble", "wMarble"}; //String[] marbles = {"wMarble", "wMarble", "wMarble", "wMarble", "wMarble", "bMarble"}; //String[] marbles = {"wMarble", "wMarble", "wMarble", "wMarble", "wMarble", "wMarble"}; //String[] marbles = {"wMarble", "wMarble", "bMarble", "wMarble", "wMarble", "bMarble"}; int counter = 0; int newCount = 0; for(String element: marbles){ if(element.equals("bMarble")) counter++; } while(newCount != counter){ for(int i = 0; i < counter; i++){ if(marbles[i].equals("bMarble")){ newCount++; if(newCount == counter) break; } } if(newCount != counter){ for(int i = 0; i < counter; i++) sorter(marbles); } } System.out.println(Arrays.toString(marbles)); } public static void sorter(String[] marbles){ for(int i = 1; i < marbles.length; i++){ if(marbles[i].equals("bMarble") && (marbles[i-1]).equals("wMarble")){ String temp = marbles[i]; marbles[i] = marbles[i-1]; marbles[i-1] = temp; } } } }
Что я уже пробовал:
Я пробовал использовать логическое условие и использовать счетчик, который увеличивается внутри цикла для выхода, но кажется, что это условие должно быть выполнено снаружи каким-то образом (проблема области действия?).
Последний цикл for предотвращает один из моих тестовых случаев от предоставления неправильного вывода, даже если условие всех черных шариков, находящихся в начале, выполняется... но я не могу вспомнить, почему я положил его туда, чтобы начать с".;