在不确定对象的数目情况下,如何确定无限new对象呢?
首先,创造这个对象必须具备4个属性,姓名 和三个成绩。而姓名和三个成绩也必须都是由键盘读入。而且NEW得对象要装入集合中。
我现在写到这里已经卡住了,不知道如何往下写了。
一下是我的代码,希望高手指点一下。如何实现无限循环创建对象!
import java.util.*;
import java.io.*;
class Student {
private String name;
private int maths;
private int english;
private int java;
private int resSum;
public String toString() {
  return "姓名 : "+name+"\r\n数学成绩: "+maths+"\r\n英语成绩: "+english+"\r\nJava成绩: "+java+"\r\n总分:"+resSum; 
}

Student(String name, int maths, int english, int java) {
  this.name = name;
  this.maths = maths;
  this.english = english;
  this.java = java;
  resSum = maths+english+java;
}
   public int resSum() {
   return resSum = maths+english+java;
  }
  
  public String getName() {
   return name;
  }
  public int getMaths() {
   return maths;
  }
  public int getEnglish() {
   return english;
  }
  public int getJava() {
   return java;
  }
  public void setName(String name) {
   this.name = name;
  }
  public void setMaths(int maths) {
   this.maths = maths;
  }
  public void setEnglish(int english) {
   this.english = english;
  }
  public void setJava(int java) {
   this.java = java;
  } }
 
 class Com implements Comparator<String>{
   public int compare(String s1,String s2){         return s1.compareTo(s2);        
  }
}class inputRes {
  String name; 
  int maths,english,java;
  public String inputName() {
  System.out.println("请输入学生姓名");
  name = inputstring();
  return name;
  }
 public int inputmath() {
  System.out.println("请输入数学成绩");
  maths = resinput();
  return maths;
  }
  public int inputenglish() {
  System.out.println("请输入英语成绩");
  english = resinput();
  return english;
  }
  public int inputjava() {
  System.out.println("请输入Java成绩");
  java = resinput();
  return java;
  }
  public int resinput(){
  BufferedReader i = null;
  String j = null;
  int s = 0;
  while(true) {
  try{
  i = new BufferedReader(new InputStreamReader(System.in));
  j = i.readLine();
  s = Integer.parseInt(j);
  }catch(IOException e){}
   catch(NumberFormatException se) {
   System.out.println("输入错误!不能输入非数字类型");
   continue;
    }
  return s;
  }
  
  
}
  public String inputstring(){
  BufferedReader i = null;
  String j = null;
  i = new BufferedReader(new InputStreamReader(System.in));
  try{
  j = i.readLine();
  }catch(IOException e){}
  return j;
}}public class Result {
  public static void main(String args[]) throws Exception{
    System.out.println("请设置第一个学生的成绩");
    TreeMap<String,Student>m = new TreeMap<String,Student>(new Com());
    inputRes in = new inputRes();
    Student stu1 = new Student(in.inputName(),in.inputmath(),in.inputenglish(),in.inputjava());
    System.out.println("请设置第二个学生的成绩");
    Student stu2 = new Student(in.inputName(),in.inputmath(),in.inputenglish(),in.inputjava());
    System.out.println(stu1);
    System.out.println(stu2);
    m.put("0001",stu1);
    m.put("0002",stu2);
    Set<String> se = m.keySet();
    Iterator<String> iter = se.iterator();
    System.out.println("录入学生人数为:"+se.size()+"人");    FileWriter fw = new FileWriter("F:\\学生成绩表.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    while(iter.hasNext()) {
      String key = iter.next();
      Student value = m.get(key);
    bw.write("学生ID :"+key);
  bw.newLine();
  bw.write(value.toString());
bw.newLine();
bw.flush(); // System.out.println(key+":"+value);
    } bw.close();
        
  }
}

解决方案 »

  1.   

    所谓简化问题就是这样
    首先 把类简化
    class A{
    int i;
    public A(int i){
    this.i=i;
    }
    }
    然后 就能关注本质问题 怎么样无限new对象呢?
    先new一个list 再new一个scanner sc String s=1;
    while(!"exit".equals(s=sc.readLine)){
    list.add(new A(Integer.parseInt(s)));
    }
    当用户输入exit时结束 大概是这样 不知道有没有错误
      

  2.   

    关键是new出来的对象,需要传递4个参数,而4个参数又要读取数据,而读完数据又要写入集合。
    所以我把全部代码贴出来,我想是不是应该全盘考虑,所以贴了全部代码。
      

  3.   

    楼上,你写的代码,我看不懂,我是初学者,J2SE还没学完呢,刚学到IO
      

  4.   

    写的总体来说思路很清晰
    最后面改一下就行了
    参照前面写的while(true)来创建新类
    比如改成int i = 0;
    while(true){
        System.out.println("请设置第"+ i + "个学生的成绩");
        TreeMap<String,Student>m = new TreeMap<String,Student>(new Com());
        inputRes in = new inputRes();//记得类名要大写
        Student stu = new Student(in.inputName(),in.inputmath(),in.inputenglish(),in.inputjava());
        System.out.println(stu);
        m.put(i + "", stu);
        //这里加一句
        if(输入退出命令){
            break;
        }
    }
        Set<String> se = m.keySet();
        Iterator<String> iter = se.iterator();
        System.out.println("录入学生人数为:"+se.size()+"人");
      

  5.   

    while无限循环创造对象,可是,还得把文件从集合里读出来写到文本上。这样在while里写,是不是会出问题
      

  6.   

    上面写掉了很重要的一句,看这个int i = 0;
    while(true){
        System.out.println("请设置第"+ i + "个学生的成绩");
        TreeMap<String,Student>m = new TreeMap<String,Student>(new Com());
        inputRes in = new inputRes();//记得类名要大写
        Student stu = new Student(in.inputName(),in.inputmath(),in.inputenglish(),in.inputjava());
        System.out.println(stu);
        m.put(i + "", stu);
        i++;
        //这里加一句
        if(输入退出命令){
            break;
        }
    }
        Set<String> se = m.keySet();
        Iterator<String> iter = se.iterator();
        System.out.println("录入学生人数为:"+se.size()+"人");
      

  7.   

    new stu这个对象,在次循环的时候,会同名吧~
      

  8.   

    MAP里,KEY的值需要String 类型的
    m.put(i + "", stu); 这个i能否传进去啊?
    我复制了你的代码,正在改。不知道能否成功哈
      

  9.   

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;class Student {
        private String name;
        private int maths;
        private int english;
        private int java;
        private int resSum;
        public String toString() {
      return "姓名 : "+name+"\r\n数学成绩: "+maths+"\r\n英语成绩: "+english+"\r\nJava成绩: "+java+"\r\n总分:"+resSum; 
            }
        
        Student(String name, int maths, int english, int java) {
          this.name = name;
          this.maths = maths;
          this.english = english;
          this.java = java;
          resSum = maths+english+java;    
        }
       public int resSum() {
       return resSum = maths+english+java;    
      }
      
      public String getName() {
          return name;
      }
      public int getMaths() {
          return maths;
      }
      public int getEnglish() {
          return english;
      }
      public int getJava() {
          return java;
      }
      public void setName(String name) {
          this.name = name;
      }
      public void setMaths(int maths) {
          this.maths = maths;
      }
      public void setEnglish(int english) {
          this.english = english;
      }
      public void setJava(int java) {
          this.java = java;
      }
     }
    public class StudentTest{
    public static void main(String[] args) {
    List<Student> sl=new ArrayList<Student>();
    Scanner sc=new Scanner(System.in);
    String s="";
    s=sc.nextLine();
    try {
    while(!"exit".equals(s)){
    Student st=new Student(s,Integer.parseInt(sc.nextLine()),Integer.parseInt(sc.nextLine()),Integer.parseInt(sc.nextLine()));
    sl.add(st);
    s=sc.nextLine();
    }
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println("输入错误!");
    System.exit(-1);
    }
    for(Student ss:sl){
    System.out.println(ss);
    }
    }
    }
      

  10.   

    看了看楼主的意图 自己写了个
    键盘输入 学生 名字 和三个科目的成绩
    然后按总分的大小顺序排列 输出到 一个.txt文件上
    import java.util.*;
    import java.io.*;
    class Student implements Comparable<Student>{
    private int sx;
    private int yw;
    private int yy;
    private String name;
    private int sum;
    Student (String name,int sx,int yw,int yy) {
    this.name = name;
    this.sx = sx;
    this.yw = yw;
    this.yy = yy;
    sum = sx+yw+yy;
    }
    int getSum() {
    return sum;
    }
    String getName() {
    return name;
    }
    public String toString() {
    return getName()+"的总成绩是"+getSum();
    }
    public int compareTo(Student s) {
    if (this.sum<s.sum) {
    return -1;
    } else if(this.sum==s.sum) {
    return this.name.compareTo(s.name);
    } else return 1;
    }
    }
    class GetList {
    static ArrayList<Student> getList() throws Exception{
    StringBuffer sb = new StringBuffer();
    int num = 0;
    InputStream is = System.in;
    ArrayList<Student> al = new ArrayList<Student>();
    while(true) {
    num = is.read();
    if(num=='\r') continue;
    if(num=='\n') {
    String str = sb.toString();
    if(str.equals("over"))  break;
    String [] s = str.split(",",4);
    al.add (new Student(s[0],Integer.parseInt(s[1]),Integer.parseInt(s[2]),Integer.parseInt(s[3])));
    sb.delete(0,sb.length());
    } else {
    sb.append((char)num);
    }
    }
    return al;
    }
    }
    class MyWrite {
    static void myWrite(ArrayList<Student> al)throws Exception {
    FileWriter fw = new FileWriter("学生信息.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    for(Iterator iter = al.iterator();iter.hasNext();) {
    bw.write(iter.next().toString());
    bw.newLine();
    }
    bw.close();
    }
    }
    public class Test2 {
    public static void main (String [] args) throws Exception {
    ArrayList<Student> al = new ArrayList<Student>();
    al = GetList.getList();
    Collections.sort(al);
    MyWrite.myWrite(al);
    }
    }
    e:\Test\IO>java Test2
    Lili,78,90,89
    Bob,100,90,98
    Billy,67,80,78
    Tom,67,89,90
    over学生信息.txt
    Billy的总成绩是225
    Tom的总成绩是246
    Lili的总成绩是257
    Bob的总成绩是288