2015-12-19 3 views
2

Я написал этот фрагмент кода ниже, и мне было интересно, можно ли проверить ввод кода для «playname». Мне нужно иметь возможность проверить, не было ли что-либо введено в эту строку пользователем, и мне было интересно, можно ли это сделать каким-либо образом, кроме использования прерывания, поскольку это не в цикле, я не могу использовать перерыв. Также, когда я получаю ввод от пользователя, я использую двоеточие в качестве моего разделителя полей, чтобы разделить пользовательский ввод на отдельные элементы массива. Мне было интересно, есть ли способ проверить, используется ли пользователем правильный разделитель полей.Подтверждение ввода пользователя

import java.util.Scanner; 

public class REQ2 { 

    public static void main (String[] args) { 
     String playername;  
     String line; 
     String[] list = new String[100]; 
     int count = 0; 
     int score; 
     int time; 
     int totalScore =0; 

     Scanner sc = new Scanner(System.in); 
     System.out.println("Please enter your name"); 

     playername = sc.nextLine(); 

     System.out.println("Please enter your game achievements (Game name:score:time played) E.g. Minecraft:14:2332"); 

     while (count < 100) { 
      line = sc.nextLine(); 

      if(line.equals("quit")) { 
       break; 
      } 

      list[count]=line; 
      System.out.println("list[count]" + list[count]); 
      count++; 

      for (int i = 0; i < count; i++) { 
       line = list[i]; 
       String[] elements = line.split(":");  
       if (line.length() != 3) { 
        System.out.println("Error please try again, Please enter in the following format: game name:score:timeplayed"); 
        break; 
       } 
       score = Integer.parseInt(elements[1].trim());    
       time=Integer.parseInt(elements[2].trim()); 
      } 
     } 
    } 
} 

ответ

1

После playername = sc.nextLine(); используйте этот код.

while(playername.equals("")) 
{ 
    playername = sc.nextLine(); 
} 

Это не позволит программе продолжать до переменной playername имеет значение строки значение, которое не является пустым

Редактировать

Если вы хотите, чтобы выйти из программы, если ничего не введено использовать

if(playername.equals("")) 
{ 
    System.exit(0); 
} 

Edit 2

Что касается проверки того, использовался ли в строке :, попробуйте добавить этот код после line = sc.nextLine();. (Не забудьте использовать это вам придется назвать эту строку коды, import java.util.regex.*;, в верхней части файла Java)

Pattern pattern = Pattern.compile(":"); 
Matcher matcher = pattern.matcher(line); 

int patternMatch = 0; 
while (matcher.find()) 
{ 
    patternMatch++; 
} 

while(patternMatch!=2) 
{ 
    patternMatch=0; 

    line = sc.nextLine(); 

    if(line.equals("quit")){ 
     break; 
    } 

    Pattern pattern = Pattern.compile(":"); 
    Matcher matcher = pattern.matcher(line); 

    while (matcher.find()) 
    { 
     patternMatch++; 
    } 
} 
+0

Спасибо, что мне нужно, чтобы программа была прекращена, если ничего не было введено? –

+0

@ A.hussain Я отредактировал ответ – Dan

+0

@ A.hussain Я считаю, что это все, что вы просили. Если это произойдет, вы сможете щелкнуть по галочке рядом с моим ответом, чтобы принять его спасибо :) Если это не дает мне знать – Dan

3

Для playername вопроса я хотел бы предложить следующее фиктивного доказательства:

System.out.println("Please enter your name:"); 
int ErrCounter=0; 
while(true) 
{ 
    playername = sc.nextLine(); 
    if(playername!="") 
     breake; 
    System.out.println("No name was entered.\n Please enter your name:"); 
    ErrCounter++; 
    if(ErrCounter>=2/*or any other count you choose*/) 
     System.err.println("No name wase entered. Exiting..."); 
} 

Что касается проблемы с разделителем, вы можете использовать ту же систему для проверки. Для проверки правильности использования разделителя используйте:

+0

Во-первых, было бы возможно использовать «ErrCounter» для последующего отображения всех неправильных записей сделанный пользователем, или было бы лучше использовать try try exepction, а также моя программа не распознает содержимое, я получаю эту ошибку «Метод содержит (CharSequence) в типе String не применим для аргументов (char)» –

+0

@ A.hussain для использования содержит вам 'import java.lang. *;' – Dan

+0

Я не уверен, что попытка и уловка сделают для вас работу. Метод nextLine() работает, он ищет от разделителя строк (т. Е. «\ N») от пользователя при буферизации линии до этого разделителя. он вернет строку в буфер. если буфер пуст, он вернет строку "", пустую строку. Другими словами, не будет ошибки, брошенной для улова. – havakok

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