A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
练习:将学生姓名和语数外三门课的分数录入,然后将三门分数加和,按照总分由高到低及
          姓名默认排序的顺序存储到studentinfo.txt文件中。

思路:1.描述学生类
          2.通过键盘获取学生的数据,并将该行中的数据取出封装为学生对象
          3.定义一个可操作学生对象的工具类
          4.要将多个学生的信息存储起来且要排序,所以选用TreeSet集合
          5.将集合中的信息写入到文件中
*/

package io;

import java.util.*;
import java.io.*;

//新建一个学生类
class Student implements Comparable<Student>                //使得学生类具备比较性
{
        private String name;
        private int CN;
        private int MA;
        private int EN;
        private int sum;
        //构造函数要求内容为String name, int CN, int MA, int EN
        Student(String name, int CN, int MA, int EN)
        {
                this.name = name;
                this.CN = CN;
                this.MA = MA;
                this.EN = EN;
                this.sum = CN+MA+EN;
        }
        //继承Comparable接口必须覆盖compareTo方法,其内部比较用compareTo方法,且类内部要覆盖hashCode和equals两个方法,
        //为默认比较提供功能,注意此处整数的比较要建立基本数据类型对象包装类,equals方法中的比较与此不同,详见下
        public int compareTo(Student s)
        {
                int num = new Integer(this.sum).compareTo(new Integer(s.sum));
                if (num==0)
                {
                        return this.name.compareTo(s.name);
                }
                return num;
        }
        public String getName()
        {
                return name;
        }
        public int getSum()
        {
                return sum;
        }
        public int hashCode()
        {
                return name.hashCode()+sum*53;
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new ClassCastException("类型不一致");
                Student s = (Student)obj;
                //equals中字符串的比较用equals方法,数字的比较用==
                return this.name.equals(s.name) && this.sum==s.sum;
        }
        public String toString()
        {
                return name+":语文="+CN+";数学="+MA+";英语="+EN;
        }
}

class StudentInfoTool
{
        //注意:集合上要加泛型
        public static TreeSet<Student> getStudents() throws IOException
        {
                return getStudents(null);
        }
        public static TreeSet<Student> getStudents(Comparator<Student> cmp) throws IOException
        {
                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));                //建立一个读取流缓冲区
                String line = null;
                TreeSet<Student> stus = null;
                if (cmp==null)
                        stus = new TreeSet<Student>();                //建立一个TreeSet集合
                else
                        stus = new TreeSet<Student>(cmp);
                while ((line=bufr.readLine())!=null)
                {
                        if ("over".equals(line))
                                break;
                        String[] info = line.split(",");        //建立一个字符串数组用来存放分割后的数据元素       
                        Student stu = new Student(info[0], Integer.parseInt(info[1]),
                                                                                                Integer.parseInt(info[2]),
                                                                                                Integer.parseInt(info[3]));                //建立一个学生类对象存储之前数组红的内容并
                                                                                                                                                                //进行比较
                        stus.add(stu);
                }
                bufr.close();
                return stus;
        }

        public static void writeToFile(TreeSet<Student> stus) throws IOException
        {
                BufferedWriter bufw = new BufferedWriter(new FileWriter("studentinfo.txt"));
                for (Student s : stus)
                {
                        bufw.write(s.toString()+"\t");
                        bufw.write(s.getSum()+"");                //此处,sum即总分原为整数变为字符串后可避免乱码的产生
                        bufw.newLine();
                        bufw.flush();
                }
                bufw.close();
        }
}

class StudentInfo
{
        public static void main(String[] args) throws IOException
        {
                Comparator<Student> cmp = Collections.reverseOrder();                //通过Collections类中的reverseOrder方法构造一个反序的比较器
                TreeSet<Student> stus = StudentInfoTool.getStudents(cmp);                //新建一个Student的TreeSet集合并调用StudentInfoTool中
                                                                                                                                                //的getStudents方法
                StudentInfoTool.writeToFile(stus);                //调用writeToFile方法将数据输入到指定文件
        }
}

54 个回复

倒序浏览
看不懂,,还没学到
回复 使用道具 举报
我也还没有学到这个地方
回复 使用道具 举报
好难啊!看到都是浆糊
回复 使用道具 举报
binarycoc 发表于 2015-8-29 22:14
看不懂,,还没学到

慢慢就会学到了,这里其实不难,主要是东西多,比较繁杂,如果能有个清晰的思路,就会容易很多
回复 使用道具 举报
文件夹?
回复 使用道具 举报

不是,集合、排序、IO的综合联系
回复 使用道具 举报
这是基础班的东西吧,给你看看我们现在做的小案例
import java.util.ArrayList;

import com.itheima.news_listview.adapter.NewsAdapter;
import com.itheima.news_listview.bean.NewsBean;
import com.itheima.news_listview.utils.NewsUtils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemClickListener {

        private Context mContext;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                mContext = this;
                //1.找到控件
                ListView lv_news = (ListView) findViewById(R.id.lv_news);
                //2.获取新闻数据用list封装
                ArrayList<NewsBean> allNews = NewsUtils.getAllNews(mContext);
               
                //3.创建一个adapter设置给listview
                NewsAdapter newsAdapter = new NewsAdapter(mContext, allNews);
                lv_news.setAdapter(newsAdapter);
               
                //4.设置listview条目的点击事件
                lv_news.setOnItemClickListener(this);
               
               
               
               
               
        }
        //listview的条目点击时会调用该方法 parent:代表listviw  view:点击的条目上的那个view对象   position:条目的位置  id: 条目的id
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
               
                //需要获取条目上bean对象中url做跳转
                NewsBean bean = (NewsBean) parent.getItemAtPosition(position);
               
                String url = bean.news_url;
               
                //跳转浏览器
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                startActivity(intent);
        }
public class NewsAdapter extends BaseAdapter {
       
        private ArrayList<NewsBean> list;
        private Context context;

        //通过构造方法接受要显示的新闻数据集合
        public NewsAdapter(Context context,ArrayList<NewsBean> list){
                this.list = list;
                this.context = context;
        }

        @Override
        public int getCount() {
                return list.size();
        }

        @Override
        public Object getItem(int position) {
                return list.get(position);
        }

        @Override
        public long getItemId(int position) {
                return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View view = null;
                //1.复用converView优化listview,创建一个view作为getview的返回值用来显示一个条目
                if(convertView != null){
                        view = convertView;
                }else {
                        //context:上下文, resource:要转换成view对象的layout的id, root:将layout用root(ViewGroup)包一层作为codify的返回值,一般传null
//                        view = View.inflate(context, R.layout.item_news_layout, null);//将一个布局文件转换成一个view对象
                       
                        //通过LayoutInflater将布局转换成view对象
//                        view =  LayoutInflater.from(context).inflate(R.layout.item_news_layout, null);
                       
                        //通过context获取系统服务得到一个LayoutInflater,通过LayoutInflater将一个布局转换为view对象
                        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        view = layoutInflater.inflate(R.layout.item_news_layout, null);
                       
                }
                //2.获取view上的子控件对象
                ImageView item_img_icon = (ImageView) view.findViewById(R.id.item_img_icon);
                TextView item_tv_des = (TextView) view.findViewById(R.id.item_tv_des);
                TextView item_tv_title = (TextView) view.findViewById(R.id.item_tv_title);
                //3.获取postion位置条目对应的list集合中的新闻数据,Bean对象
                NewsBean newsBean = list.get(position);
                //4.将数据设置给这些子控件做显示
                item_img_icon.setImageDrawable(newsBean.icon);//设置imageView的图片
                item_tv_title.setText(newsBean.title);
                item_tv_des.setText(newsBean.des);
               
                return view;
        }

}
public class NewsUtils {

        //封装新闻的假数据到list中返回
        public static ArrayList<NewsBean> getAllNews(Context context) {

                ArrayList<NewsBean> arrayList = new ArrayList<NewsBean>();

                for(int i = 0 ;i <100;i++)
                {
                        NewsBean newsBean = new NewsBean();
                        newsBean.title ="谢霆锋经纪人:偷拍系侵权行为:";
                        newsBean.des= "称谢霆锋隐私权收到侵犯,将保留追究法律责任";
                        newsBean.news_url= "http://www.sina.cn";
                        newsBean.icon = context.getResources().getDrawable(R.drawable.ic_launcher);//通过context对象将一个资源id转换成一个Drawable对象。
                        arrayList.add(newsBean);


                        NewsBean newsBean1 = new NewsBean();
                        newsBean1.title ="知情人:王菲是谢霆锋心头最爱的人";
                        newsBean1.des= "身边的人都知道谢霆锋最爱王菲,二人早有复合迹象";
                        newsBean1.news_url= "http://www.baidu.cn";
                        newsBean1.icon = context.getResources().getDrawable(R.drawable.icon);//通过context对象将一个资源id转换成一个Drawable对象。
                        arrayList.add(newsBean1);



                        NewsBean newsBean2 = new NewsBean();
                        newsBean2.title ="热烈祝贺黑马74高薪就业";
                        newsBean2.des= "74期平均薪资20000,其中有一个哥们超过10万,这些It精英都迎娶了白富美.";
                        newsBean2.news_url= "http://www.itheima.com";
                        newsBean2.icon = context.getResources().getDrawable(R.drawable.icon2);//通过context对象将一个资源id转换成一个Drawable对象。
                        arrayList.add(newsBean2);
                }
                return arrayList;
        }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="20dp"
    android:paddingBottom="20dp"
    android:orientation="horizontal" >

    <ImageView
        android:layout_gravity="center"
        android:id="@+id/item_img_icon"
        android:layout_width="68dp"
        android:layout_height="68dp"
        android:layout_marginRight="10dp"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
          android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:singleLine="true"
            android:id="@+id/item_tv_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="3dp"
            android:text="title"
            android:textColor="#000000"
            android:textSize="16sp" />

        <TextView
            android:maxLines="2"
            android:id="@+id/item_tv_des"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="des"
            android:textColor="#666666"
            android:textSize="13sp" />
    </LinearLayout>

</LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/lv_news"
         />

</RelativeLayout>
这只是一个小小的案例,兄弟好好学吧,就业班进度非常快
回复 使用道具 举报
看不懂....~~~
回复 使用道具 举报
Wqi 高级黑马 2015-9-1 21:00:26
10#
不明觉历
回复 使用道具 举报
看起来好厉害的样子
回复 使用道具 举报
都是学过的知识,分解开来做就不难了。。
回复 使用道具 举报
cemabenteng 发表于 2015-9-1 20:48
这是基础班的东西吧,给你看看我们现在做的小案例
import java.util.ArrayList;

新闻客户端,我才开班几天,虽然知道哪些地方有什么作用,但是不能理解。

楼主的代码我倒是都看得懂,虽然还没学io
回复 使用道具 举报
cemabenteng 发表于 2015-9-1 20:48
这是基础班的东西吧,给你看看我们现在做的小案例
import java.util.ArrayList;

新闻客户端,我才开班几天,虽然知道哪些地方有什么作用,但是不能理解。

楼主的代码我倒是都看得懂,虽然还没学io
回复 使用道具 举报
学习了   
回复 使用道具 举报
l631356126 来自手机 中级黑马 2015-9-1 22:32:32
16#
好好学,基础扎实了,以后就看懂了。
回复 使用道具 举报
学习方法很重要,基础还是打好点。多看几遍多找几本书看看。加油吧!
回复 使用道具 举报
思路清晰就好做,其实代码不复杂
回复 使用道具 举报
不明觉厉,学习模仿下
回复 使用道具 举报
当初也是虐死我了,一个学生,有名字,年龄,要存入语文,数学,英语成绩;最后输出总成绩和平均分;并且按平均分从高到低排序;
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马