Java数组解析字符串和int

时间:2016-11-18 23:05:39

标签: java arrays parsing

我正在尝试编写一个包含2个数组的程序,两个数组都固定为值10。

程序应该询问用户名称(字符串)10次,每个姓名的年龄(整数)10次

直到阵列已满(已输入10个姓名和年龄,或者用户输入'完成'一词)

然后打印出每个人的姓名和相关年龄以及最年轻和最年长的成员。

如何将数组限制为10个类型字符串项,而不是用户决定(代码当前正在执行)

有什么建议吗?

感谢。

import java.util.Scanner;

public class NameAge {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);    

        System.out.print("Enter number of elements to be sorted: ");
        String numElements = input.nextLine();

        String[] num = new String[Integer.parseInt(numElements)];

        for (int i = 0; i < Integer.parseInt(numElements); i++) {
            System.out.print("Enter name " + (i + 1) + ": ");
            num[i] = input.nextLine();
        }

        for(String element : num) {
            System.out.println(element);
        }
    }    
} 

3 个答案:

答案 0 :(得分:0)

我使用ArrayList来获得列表的动态大小,而String []是不可能的。程序循环10次并在此之后停止,或者如果用户输入&#34;完成&#34;作为名称(使用break;)。我将数据保存为Pair,这使得关联数据变得简单。

import javafx.util.Pair;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class NameAge {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Pair<String, Integer>> names = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            System.out.print("Enter name " + (i + 1) + ": ");
            String line = input.nextLine();
            if (line.equals("done")) break;
            System.out.print("Enter age for user " + (i + 1)+ ": ");
            Integer age = Integer.parseInt(input.nextLine());
            names.add(new Pair<String, Integer>(line, age));
        }
        names.forEach(System.out::println);
    }
}

答案 1 :(得分:0)

我争论使用while循环代替休息(因为我厌恶休息)。

entry.toUpperCase.equals("DONE")

循环直到完成输入已输入10个条目。而不只是检查&#34;完成&#34;我还检查null是否允许不区分大小写。对于数组,如果您不打算填写它,那么在输出时也值得检查{{1}}。

顺便说一句:当你完成它们时,不要忘记关闭扫描仪!

答案 2 :(得分:0)

我认为max_agemin_age只有一个。我使用class Person来整理nameage信息。

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class NameAge {
class Person{
    String name;
    int age;

    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}

private final int MAX_NUMS = 10;
private final String END_FLAG = "done";
private List<Person> personList = new LinkedList<Person>();

public void process(){
     Scanner scan = new Scanner(System.in);
     Person oldestPerson = new Person(null,Integer.MIN_VALUE);
     Person youngestPerson = new Person(null,Integer.MAX_VALUE);
     System.out.println("input name and age, split them by space");
     int number = 1;
     while(number<=MAX_NUMS){
         String curLine = scan.nextLine();
         if(curLine.toLowerCase().trim().equals(END_FLAG)){
             break;
         }
         else{
             String[] strs = curLine.split(" ");
             String name = strs[0];
             int age = Integer.valueOf(strs[1]);
             Person newPerson = new Person(name,age);
             personList.add(newPerson);
             if(oldestPerson.age<newPerson.age){
                 oldestPerson = newPerson;
             }
             if(youngestPerson.age>newPerson.age){
                 youngestPerson = newPerson;
             }
         }
     }
     scan.close();
     for(Person p :personList){
         System.out.println(p.name+"  "+p.age);
     }
     System.out.println("yougest Person:" + youngestPerson.name+" "+youngestPerson.age);
     System.out.println("oldest Person:" + oldestPerson.name+" "+oldestPerson.age);
}

  public static void main(String[] args) {
     NameAge na = new NameAge();
     na.process();
  }    
}