黑马程序员技术交流社区
标题:
输出流文本怎么左对齐
[打印本页]
作者:
当我遇上你
时间:
2015-1-10 19:31
标题:
输出流文本怎么左对齐
本帖最后由 当我遇上你 于 2015-1-10 19:44 编辑
public class Test2 {
public static class Student
{
//定义成员变量
double chinese;
double math;
double english;
double sum;
String name;
//定义有参构造方法
public Student(double chinese, double math, double english, double sum,
String name)
{
this.chinese = chinese;
this.math = math;
this.english = english;
this.sum = sum;
this.name = name;
}
//覆盖原toString方法
@Override
public String toString()
{
//格式化输出格式,每个参数间隔2个制表符,成绩保留一位小数,为了不使受到名字长度的影响,名字格式化为12位,右对齐
return String.format("%12s\t\t%2$.1f\t\t%3$.1f\t\t%4.1f\t\t%5$.1f", name,chinese,math,english,sum);
}
//主函数,程序入口
public static void main(String[] args)throws Exception
{
//调用scanner从键盘读取信息
Scanner scanner = new Scanner(System.in);
//定义一个集合用于存储学生这个对象
LinkedList<Student> linkedList = new LinkedList<Student>();
//设置交互方式
System.out.println("请按以下格式录入学生信息:name,30,30,30(姓名,语文,数学,外语)<输入时请用英文符号,输入完成后按回车键结束>:");
//以下代码完成学生对象存储进集合的过程
while(scanner.hasNextLine())
{
//每一行为一个学生的信息
String str = scanner.nextLine();
//设置程序结束方式
if(str.equals(""))
{
break;
}
/*这里可以设置三个字符串数组,第一次用英文逗号分割存储进一个数组A,
然后再对含有中文逗号的进行分割存储进B,最后把两次分割后的所有元素存进数组C,用C数组执行后续步奏
*/
//将程序按输入格式以逗号分割成4个参数(英文逗号),给相应形参赋初值
String[] inf=str.split(",");
String name1=inf[0];
double chinese1=Double.parseDouble(inf[1]);
double math1=Double.parseDouble(inf[2]);
double english1=Double.parseDouble(inf[3]);
double sum1=chinese1+math1+english1;
//将含有学生信息的参数传递给新建的学生对象,由于在循环内部,每个回车键生成一个学生对象
Student student = new Student(chinese1, math1, english1, sum1, name1);
//将所有学生信息存储进集合
linkedList.add(student);
}
//关闭输入流
scanner.close();
//调用重写的比较方法给集合由大到小排序
Collections.sort(linkedList, new MyComparator());
//对输出流进行重定向
System.setOut(new PrintStream("stu.txt"));
//打印表头
System.out.println("\t姓名\t\t语文\t\t数学\t\t外语\t\t总分");
//分别打印学生信息
for(Student stu:linkedList)
{
System.out.println(stu.toString());
}
}
//重写排序法
public static class MyComparator implements Comparator<Student>
{
@Override
public int compare(Student s1,Student s2)
{
if (s1.sum>s2.sum)
{
return (int) (s2.sum-s1.sum);
} else if(s1.sum<s2.sum)
{
return (int) (s2.sum-s1.sum);
}
else return 0;
}
}
}
}
复制代码
忘记给题目了: 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,
写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),
然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
以上是我做测试时写的代码,由于每个人名长短不同,我通过格式化字符串长度可以右对齐,有什么好办法可以左对齐吗?代码精炼最好
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2