Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java按年龄对用户进行分组_Java - Fatal编程技术网

使用Java按年龄对用户进行分组

使用Java按年龄对用户进行分组,java,Java,我有一个不同年龄的1000000用户列表,我想用Java进行搜索,根据年龄范围只输出组中的人数。 例如: Age Group Age Range 1 6 years old or younger 2 7 to 18 years old 3 19 to 26 years old 4

我有一个不同年龄的1000000用户列表,我想用Java进行搜索,根据年龄范围只输出组中的人数。 例如:

Age Group                 Age Range
1                         6 years old or younger
2                         7 to 18 years old
3                         19 to 26 years old
4                         27 to 49 years old
5                         50 to 64 years old
6                         65 to 79 years old
7                         80 years old or older
如果我输入特定的年龄组,我希望我的输出显示属于该年龄组的人数。即:

If I enter 1
输出应为:

**** users found (total number of users that falls within the 
age range 6 years old or younger)
任何类型的数据结构都是完美的

这就是我到目前为止所做的:

 /**
 A template used to read data lines into java.util.ArrayList data structure.
 Input file: pjData.csv
 Input file must be saved under the same directory/folder as the program.
 Each line contains 5 fields, separated by commas. For example,
 959695171, 64, AZ, M, 1
 355480298, 101, TN, F, 1
 **/
 import java.io.*;
 import java.util.*;
 public class pj3Template2
 {
  public static void main(String args[]) 
 {
String line;
String id, s, g;
Integer a, sa;
StringTokenizer st;
HealthDS2 records = new HealthDS2(); 
try   {
      FileReader f = new FileReader("pjData.csv");
      BufferedReader in = new BufferedReader(f);
      while ((line = in.readLine()) != null)
         {
         st = new StringTokenizer(line, ",");
         id = st.nextToken(",").trim();
         a = Integer.valueOf(st.nextToken(",").trim());
         s = st.nextToken(",").trim().toUpperCase();
         g = st.nextToken(",").trim().toUpperCase();
         sa = Integer.valueOf(st.nextToken().trim());
         records.add(new HealthRec2(id, a, s, g, sa));
         } // loop until the end of file
      in.close(); 
      f.close();
      }
      catch (Exception e) {  e.printStackTrace(); };
System.out.println(records.getSize() + " records processed.");

 // Search by age
System.out.print("Enter 1-character age abbreviation to search: ");
String ui;
Scanner input = new Scanner(System.in);
ui = input.next().trim();
System.out.println("Searching all records in: " + ui);

ArrayList <HealthRec2> al = records.searchByAge(Integer.valueOf(ui.trim()));
System.out.println(al.size() + " records found.");    

     }
 }

 /**
 Data class Sample records:
 5501986, 31, WV, F, 1
 1539057187, 5, UT, M, 2
 **/
 class HealthRec2
 {
    String ID;
    Integer age;
    String state;
    String gender;
    int status;
    public HealthRec2() { }
    public HealthRec2(String i, Integer a, String s, String g, int sa)
       { ID = i; age = a;  state = s; gender = g; status = sa; }
 // Reader methods
 public String getID()     { return ID; }
 public Integer getAge()   { return age; }
 public String getState()  { return state; }
 public String getGender() { return gender; }
 public int getStatus()    { return status; }
 // Writer methods
 public void setAge(Integer a)   { age = a; }
 public void setState(String s)  { state = s; }
 public void setGender(String g) { gender = g; }
 public void setStatus(int sa)   { status = sa; }

 public String toString()
 { return ID + "  " + age + "  " + state + "   " + gender + "  " + status; }
 } // HealthRec


 // Data structure used to implement the requirement
 // This implementation uses java.util.ArrayList
 class HealthDS2
 {
 ArrayList <HealthRec2> rec;
 public HealthDS2() 
  { rec = new ArrayList <HealthRec2>(); }
 public HealthDS2(HealthRec2 r) 
 { 
 rec = new ArrayList <HealthRec2>();
 rec.add(r); 
 }
 public int getSize() { return rec.size(); }
 public void add(HealthRec2 r) { rec.add(r); }

// Search by age
// No data validation is needed -- assuming the 1-character age is valid
// Returns an ArrayList of records
public ArrayList <HealthRec2> searchByAge(Integer a)
{
ArrayList <HealthRec2> temp = new ArrayList <HealthRec2>();
  for (int k=0; k < rec.size(); ++k)
  {
  if (rec.get(k).getAge().equals(a))
     temp.add(rec.get(k));  
  }
  return temp;
  } // searchByAge
  } // HealthDS
/**
用于将数据行读入java.util.ArrayList数据结构的模板。
输入文件:pjData.csv
输入文件必须保存在与程序相同的目录/文件夹下。
每行包含5个字段,用逗号分隔。例如
959695171,64,亚利桑那州,M,1
355480298101,田纳西州,F,1
**/
导入java.io.*;
导入java.util.*;
公共类PJ3模板2
{
公共静态void main(字符串参数[])
{
弦线;
字符串id,s,g;
整数a,sa;
StringTokenizer st;
HealthDS2记录=新的HealthDS2();
试一试{
FileReader f=新的FileReader(“pjData.csv”);
BufferedReader in=新的BufferedReader(f);
而((line=in.readLine())!=null)
{
st=新的StringTokenizer(行“,”);
id=st.nextToken(“,”).trim();
a=整数.valueOf(st.nextToken(“,”).trim());
s=st.nextToken(“,”).trim().toUpperCase();
g=st.nextToken(“,”).trim().toUpperCase();
sa=整数.valueOf(st.nextToken().trim());
添加(新的HealthRec2(id、a、s、g、sa));
}//循环直到文件结束
in.close();
f、 close();
}
catch(异常e){e.printStackTrace();};
System.out.println(records.getSize()+“记录已处理”);
//按年龄搜索
System.out.print(“输入要搜索的1个字符的年龄缩写:”);
字符串用户界面;
扫描仪输入=新扫描仪(System.in);
ui=input.next().trim();
System.out.println(“在“+ui”中搜索所有记录);
ArrayList al=records.searchByAge(Integer.valueOf(ui.trim());
System.out.println(al.size()+“找到记录”);
}
}
/**
数据类示例记录:
5501986,31,西弗吉尼亚州,F,1
1539057187,5,UT,M,2
**/
HealthRec2类
{
字符串ID;
整数年龄;
字符串状态;
字符串性别;
智力状态;
公共卫生REC2(){}
public HealthRec2(字符串i、整数a、字符串s、字符串g、整数sa)
{ID=i;年龄=a;状态=s;性别=g;状态=sa;}
//读者方法
公共字符串getID(){return ID;}
公共整数getAge(){return age;}
公共字符串getState(){return state;}
公共字符串getGender(){返回性别;}
public int getStatus(){return status;}
//作者方法
公共无效设置(整数a){age=a;}
public void setState(字符串s){state=s;}
public void setGender(字符串g){gender=g;}
public void setStatus(int sa){status=sa;}
公共字符串toString()
{返回ID+“”+年龄+“”+状态+“”+性别+“”+状态;}
}//HealthRec
//用于实现需求的数据结构
//此实现使用java.util.ArrayList
类HealthDS2
{
ArrayList rec;
公共卫生2()
{rec=newarraylist();}
公共卫生DS2(HealthRec2 r)
{ 
rec=newarraylist();
建议增补(r);
}
public int getSize(){return rec.size();}
公共无效添加(healthrec2r){rec.add(r);}
//按年龄搜索
//不需要数据验证——假设1个字符的年龄有效
//返回记录的ArrayList
公共ArrayList searchByAge(整数a)
{
ArrayList temp=新的ArrayList();
对于(int k=0;k
我的目标是根据
状态
状态
性别
年龄
组进行搜索。我已经为其他人这样做了,但我只是对年龄组有一点问题,因为它是分组的,而不仅仅是在数据文件中搜索特定的年龄。我尝试为每个组创建七个ArrayList,但在组之间切换时仍有一点问题。

此代码执行以下操作:

  • 获取所选组的最小和最大年龄
  • 迭代各年龄段,并为最小/最大值内的任何年龄段增加一个计数器
  • 打印结果
  • 对于非常大的数据集,您需要使用更好的数据结构,如@kyticka

    public static void main (String[] args) throws java.lang.Exception
        {
            int[] groupMin = new int[]{0, 10, 20};
            int[] groupMax = new int[]{10, 20, 9999};
    
            int[] ages = new int[]{ 1, 2, 3, 10, 12, 76, 56, 89 };
    
            int targetGroup = 1;
            int count = 0;
            for( int age : ages ){
                if( age >= groupMin[targetGroup] && age < groupMax[targetGroup] ){
                    count++;
                }
            }
    
            System.out.println("Group " + targetGroup + " range is " + 
                            groupMin[targetGroup] + " - " + groupMax[targetGroup]);
            System.out.println("Count: " + count);
        }
    
    publicstaticvoidmain(字符串[]args)抛出java.lang.Exception
    {
    int[]groupMin=newint[]{0,10,20};
    int[]groupMax=newint[]{10,20,9999};
    int[]年龄=新的int[]{1,2,3,10,12,76,56,89};
    int targetGroup=1;
    整数计数=0;
    for(整数年龄:年龄){
    如果(年龄>=groupMin[targetGroup]&&age

    您可以在这里使用它:

    想法一:排序并使用二进制搜索


    想法二:使用区间树

    您可以使用某种方法初始化1000000个用户,甚至下面的代码都会为用户生成随机年龄:

    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Scanner;
    
    public class UserListDemo {
        int age;
        class Users{
            int age=0;
            public Users(int a)
            {
                age=a;
            }
            public void setAge(int age)
            {
                this.age=age;
            }
            public int getAge()
            {
                return this.age;
            }
        }
    
        public static void main(String a[])
        {
            UserListDemo uld=new UserListDemo();
            ArrayList<Users> data=new ArrayList<Users>();
            uld.initializeUsers(data);
            System.out.println("Enter age group choice"); 
            System.out.println("Enter 1 for age group 1-6");
            System.out.println("Enter 2 for age group 7-18");
            System.out.println("Enter 3 for age group 19-26");
            System.out.println("Enter 4 for age group 27-49");
            System.out.println("Enter 5 for age group 50-64");
            System.out.println("Enter 6 for age group 65-79");
            System.out.println("Enter 7 for age group 80-Older");
            Scanner sc=new Scanner(System.in);
            String choice=sc.nextLine();
            int ch=Integer.valueOf(choice);
            long result=0;
            switch(ch)
            {
            case 1:
                for(Users us:data)
                {
                    if(us.age<=6)
                        result++;
                }
    
            case 2:
                for(Users us:data)
                {
                    if( us.age>=7 && us.age<=18 )
                        result++;
                }
            case 3:
                for(Users us:data)
                {
                    if( us.age>=19 && us.age<=26 )
                        result++;
                }
            case 4:
                for(Users us:data)
                {
                    if( us.age>=27 && us.age<=49 )
                        result++;
                }
            case 5:
                for(Users us:data)
                {
                    if( us.age>=50 && us.age<=64 )
                        result++;
                }
            case 6:
                for(Users us:data)
                {
                    if( us.age>=65 && us.age<=79 )
                        result++;
                }
            case 7:
                for(Users us:data)
                {
                    if( us.age>=80)
                        result++;
                }
    
    
            }
            System.out.println("For the entered age group :"+ch+" ::"+result+" user has been found");
    
    
        }
        public void initializeUsers(ArrayList<Users> data)
        {
            Users us;
            Random rand=new Random();
            for(long l=0;l<1000000L;l++)
            {
                us=new Users(rand.nextInt(100));    
                data.add(us);
            }
        }
    }
    
    import java.util.ArrayList;
    导入java.util.Random;
    导入java.util.Scanner;
    公共类UserListDemo{
    智力年龄;
    类用户{
    int年龄=0;
    公共用户(INTA)
    {
    年龄=a;
    }
    公共无效设置(整数)
    {
    这个。年龄=年龄;
    }
    公共整数getAge()
    {
    返回这个年龄;
    }
    }
    公共静态void main(字符串a[]
    {
    UserListDemo uld=新的UserListDemo();
    ArrayList数据=新的ArrayList();
    uld.初始化用户(数据);
    System.out.println(“输入年龄组选择”);
    System.out.println(“为年龄组输入1
    
    // within HealthRec2
    
    int group;                              // stores group number as an attribute
    
    private static final int[] ageGroups =  // age limits for each group
         new int[]{6, 18, 26, 49, 64, 79};
    
    private void updateGroup() { // <-- called from constructor and from setAge()
       int currentGroup = 0;
       for (int limit : ageGroups) {
           currentGroup ++;         // advance to next group
           if (age <= limit) break; // stop looking at limits once we reach one
       }
       group = currentGroup;
    }
    
    private int getGroup() { return group; } 
    
    // within HealthRec2
    
    private static final int[] ageGroups =  // age limits for each group
         new int[]{6, 18, 26, 49, 64, 79};
    
    public int getGroup() { 
       int currentGroup = 0;
       for (int limit : ageGroups) {
           currentGroup ++;         // advance to next group
           if (age <= limit) break; // stop looking at limits once we reach one
       }
       return currentGroup;
    }