Элегантным решением было бы сделать ваши методы булевыми, а не void. Затем вы можете сделать
boolean light;
do{
light = true;
if(!inputNewName()) light=false;
if(!checkduplicate()) light=false;
if(!checklength()) light = false;
if(!checkcase()) light = false;
if(!checkstart()) light = false;
if(!checknumber()) light = false;
if(!checkspecial()) light = false;
}while(light==false);
Обратите внимание, что я помещаю каждый метод в отдельную инструкцию if. Это заставляет код достигать каждого метода. Если вам на самом деле не нужно вызывать каждый метод в случае сбоя только одного из них, вы можете сгруппировать их в один оператор if или фактически при условии while.
while(!inputNewName() || !checkduplicate() || !checklength() || !checkcase() || !checkstart() || !checknumber() || !checkspecial()) {}
Кроме того, вы можетедостичь того же результата, если вы создадите логическую переменную в качестве члена класса, а затем при необходимости установите для нее значение false в каждом методе void - хотя я должен посоветовать вам не делать этого, даже если это сработает, что плохой код из проектаточка зрения.
После всего сказанного, честно говоря, я бы сделал следующее:
Различайте методы, основанные на том, что они концептуально делают. У вас есть здесь методы для ввода строки, проверки дубликатов и проверки формата. Я хотел бы создать один метод, который охватывает каждую проверку формата, называемый "checkFormat ()".
Затем я бы сделал, как я сказал, каждый метод типа логический.
Мое время было бы:
boolean light;
do
{
light = inputNewName();
if(light) light = checkDuplicate(); //this D should be upper case to follow the camel-case convention.
if(light) light = checkFormat();
} while (!light);
ОБНОВЛЕНИЕ : Я только что понял, что ваш код предназначен для использования техники, которую я сказал вам не использовать,Существует переменная с именем «valid», которую вы можете использовать в свое время. Хотя я действительно советую вам не делать этого вы могли бы вместо этого продолжить:
do{
//all your stuff
} while(!valid);