吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 952|回复: 5
收起左侧

[求助] 新人遇到写入问题,,疑问在for循环里

[复制链接]
Newriver 发表于 2021-11-18 11:57
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class Student {
    private String name;
    private int chinese;
    private int math;
    private int english;
    public Student() {
    }

    public Student(String name, int chinese, int math, int english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }
    public int getSum()  {
        return this.chinese+this.math+this.english;
    }
}
class SaveStudent{

    public static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) throws IOException {
        TreeSet<Student> students=new TreeSet(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int num=o2.getSum()-o1.getSum();
                int num1=num==0?o2.getChinese()-o2.getChinese() : num;
                int num2=num1==0?o2.getMath()-o2.getMath():num1;
                int num3=num2 == 0 ? o2.getName().compareTo(o1.getName()) : num2;
                return num3;
            }
        });
        for (int i = 0; i < 2; i++) {
            System.out.println("请输入第"+(i+1)+"个学生的信息:");
            System.out.println("请输入学生姓名:");
            String name=sc.next();
            System.out.println("请输入语文成绩:");
            int chinese=sc.nextInt();
            System.out.println("请输入数学成绩:");
            int math=sc.nextInt();
            System.out.println("请输入英语成绩:");
            int english=sc.nextInt();
            Student student =new Student(name,chinese,math,english);
            students.add(student);
        }
            
            BufferedWriter bwriter = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\wwwjava\\day1118\\student.txt"));
           //StringBuilder sb = new StringBuilder();//这句为什么放在这里会出现写入的文本混乱?
            for (Student student : students) {
                //为什么这个要放在for循环里面,而放在外面会写入异常
                StringBuilder sb = new StringBuilder();//这句
                //为什么这里要用很多的append方法
                sb.append(student.getName()+",").append(student.getChinese()+",").append(student.getMath()+",").append(student.getEnglish()+",").append(student.getSum());
                bwriter.write(sb.toString());
                bwriter.newLine();
                bwriter.flush();
            }
        bwriter.close();
            System.out.println("信息录入成功");

    }
}

免费评分

参与人数 1热心值 +1 收起 理由
jcx521 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

layuai 发表于 2021-11-18 12:30
你每次录入一条新数据 StringBuilder sb肯定对象不一样啊,所以放在里面每次重新生成。
飞越ha 发表于 2021-11-18 12:38
StringBuilder放在外面,在你for循环结束以后内容是不会被清空的,所以你第二次写入会把第一次的内容一起带上,放在里面以后StringBuilder会在每次循环重新生成,上次的内容自然也不存在了,所以就正常了
weefun92 发表于 2021-11-18 12:39
StringBuilder 放在 for 循环外边,输出的结果并不是会乱,而是每循环一次 sb 里就会多一个 student 的信息。
至于为啥要有那么多 append,这个是 链式调用语法,你也可以只用一个 append,然后在里面有 + 把所有的字符串都连起来
soyadokio 发表于 2021-11-18 15:22
本帖最后由 soyadokio 于 2021-11-18 15:23 编辑
这句为什么放在这里会出现写入的文本混乱?

假设for每次循环的学生为A、B、C、...
你想要的结果:
第1次for循环的学生为A
第2次for循环的学生为B
第3次for循环的学生为C
...
如果StringBuilder写在for循环以外,使得前一次循环的结果未清空就直接进入后一次循环
实际的结果:
第1次for循环的学生为A
第2次for循环的学生为A、B
第3次for循环的学生为A、B、C
...




为什么这里要用很多的append方法


请参考:
https://www.matools.com/file/manual/jdk_api_1.8_google/java/lang/StringBuilder.html#append-java.lang.String-
https://www.runoob.com/java/java-stringbuffer.html
goMoney 发表于 2021-11-18 15:59
楼上已给出正确答案
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表