2013-05-03 2 views
0

Мой код работает нормально. Однако вывод кажется неправильным, когда я ввожу -1 из имени или возраста. Как удалить нулевые значения и «-1» и отобразить существующий массив?Как удалить/не отобразить нулевые значения из двух массивов?

import java.util.Scanner; 

public class quizLoop { 
    private static Scanner key = new Scanner(System.in); 
    private static Scanner keyNum = new Scanner(System.in); 

    public final static int arrayLoop = 5; 
    public static String[] nameList = new String[arrayLoop]; 
    public static int[] age = new int[arrayLoop]; 

    public static void main(String[] args) { 
     System.out.println("NAME & AGE SYSTEM\n-----------------\n"); 
     for(int i=0; i<arrayLoop; i++) { 
      System.out.print("Name: "); 
      nameList[i] = key.nextLine(); 
      if(nameList[i].equals("-1")) 
       break; 

      System.out.print("Age: "); 
      age[i] = keyNum.nextInt(); 
      if(age[i] < 0) 
       break; 
     } 

     System.out.println("----------"); 
     for(int i=0; i<nameList.length; i++) { 
      System.out.println(nameList[i] + " " + age[i]); 
     } 
    } 
} 
+0

Что должно вводить '-1'? – wchargin

+0

Каков ваш вклад и ожидаемый результат? Вы никогда не упоминаете .... – Drogba

ответ

0

В настоящее время, когда вы вводите -1, цикл завершается. То есть, как только вы вводите -1, цикл не запускается снова. Это связано с тем, что вы используете инструкцию break.

Если вы хотите, чтобы -1 позволить пользователю начать текущую запись снова, вам нужно сделать две вещи:

if (nameList[i].equals("-1")) { 
    // Take the loop variable down one. 
    i--; 
    // Instead of break, continue to the next iteration. 
    continue; 
} 

Если вы хотите сохранить петлю, как она есть, но только печати не- null значения, изменить код печати:

for(int i=0; i<nameList.length; i++) { 
    if (nameList[i] == null || nameList[i].equals("-1") || age[i] < 0) { 
     // Invalid; go to the next one. 
     continue; 
    } else { // (not strictly necessary) 
     System.out.println(nameList[i] + " " + age[i]); 
    } 
} 
+0

Отлично! Спасибо: D – Shuvo0o

+0

Рад помочь! Пожалуйста, подумайте над этим ответом, если это поможет, или нажав галочку, чтобы принять его, если он полностью решил вашу проблему. – wchargin

+0

Btw вы можете добавить код для сортировки по возрасту без использования Array.sort? – Shuvo0o

0

Попробуйте использовать список вместо массива, что-то вроде этого:

import java.util.Scanner; 

public class quizLoop { 
private static Scanner key = new Scanner(System.in); 
private static Scanner keyNum = new Scanner(System.in); 

public final static int arrayLoop = 5; 
public static List<String> nameList = new ArrayList<String>(); 
public static List<Integer> ages = new ArrayList<Integer>(); 

public static void main(String[] args) { 
    System.out.println("NAME & AGE SYSTEM\n-----------------\n"); 

    while (true){ 
     System.out.print("Name: "); 
     String name = key.nextLine(); 
     if(name.equals("-1")) 
      break; 

     System.out.print("Age: "); 
     Integer age = keyNum.nextInt(); 
     if(age < 0) 
      break; 
     nameList.add(name); 
     ages.add(age); 
    } 

    System.out.println("----------"); 
    for(int i=0; i<nameList.length; i++) { 
     System.out.println(nameList[i] + " " + age[i]); 
    } 
} 
} 
Смежные вопросы