zoukankan      html  css  js  c++  java
  • 入学测试题

    package com.itheima;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.TreeMap;
    
    /**
     * 4、 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,
     * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),
     * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
     * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
     * 
     * 
     * 定义一个学生类,让自身具备比较性,实现Comparable,覆写compareTo。
     * 学生按照总分排序,属性应该是名字,各门成绩和总成绩
     * 因为有对应关系,所以考虑map集合
     * 用BufferedWriter写入stu.txt文件。
     */
    
    public class Test1
    {
    	public static void main(String[] args) 
    	{
    		//因为有对应关系所以可以考虑使用TreeMap集合
    		TreeMap<Student,Integer> tm = new TreeMap<Student,Integer>();
    		
    		//扫描学生信息
    		Scanner in = new Scanner(System.in);
    		
    		System.out.println("请输入学生信息(over结束):");
    		
    		c : while (true)
    		{
    			String str = in.nextLine();
    			
    			//如果输入over则跳出循环
    			if (str.equals("over"))
    				break;
    			
    			//为了方便对象数据的转换,所以切割分别进行操作
    			String[] split = str.split(",");
    			
    			//如果格式不对,则继续从新开始循环
    			if (split.length != 4)
    			{
    				System.out.print("输入有误,正确格式为name,ch,ma,en");
    				continue c;
    			}
    				//把分数都从字符串转成十进制数
    				String name = split[0];
    				int ch = Integer.parseInt(split[1]);
    				int ma = Integer.parseInt(split[2]);
    				int en = Integer.parseInt(split[3]);
    	
    			Student s = new Student(name,ch,ma,en);
    			
    			tm.put(s, s.getSum());			
    		}
    		
    		writerFile(tm);		
    	}
    	
    	//定义一个函数,函数功能是把集合里的数据打印到stu.txt文件中
    	public static void writerFile(TreeMap<Student, Integer> tm)
    	{
    		BufferedWriter bw = null;
    		try
    		{
    			bw = new BufferedWriter(new FileWriter("stu.txt"));
    			
    			//取出Map集合的方式之一,Entry迭代。
    			Set<Entry<Student,Integer>> entrySet = tm.entrySet();
    			for (Iterator<Entry<Student, Integer>> it = entrySet.iterator();it.hasNext(); )
    			{
    				Map.Entry<Student, Integer> me = it.next();
    				Student student = me.getKey();
    				Integer value = me.getValue();
    				
    				bw.write(student.toString());
    				bw.write("	总分:"+value);
    				bw.newLine();
    				bw.flush();			
    			}
    		}
    		catch (IOException e)
    		{
    			throw new RuntimeException("读写错误");
    		}
    		finally
    		{
    			try
    			{
    				if (bw != null)
    					bw.close();
    			}
    			catch (IOException e)
    			{
    				throw new RuntimeException("写入关闭失败");
    			}
    		}
    	}
    }
    
    //定义学生类,要让学生自身具备比较性,所以实现Comparable方法
    class Student implements Comparable<Student>
    {
    	private String name;
    	private int ch;
    	private int ma;
    	private int en;
    	private int sum;
    	
    	Student(String name,int ch,int ma,int en)
    	{
    		this.name = name;
    		this.ch = ch;
    		this.ma = ma;
    		this.en = en;
    		this.sum = ch + ma + en;
    	}
    	
    	//覆写compareTo方法,使学生按照总分来排序
    	public int compareTo (Student s)
    	{
    		int num = s.getSum() - this.getSum();
    		if (num == 0)
    			return s.getName().compareTo(this.getName());
    		return num;
    	}
    	
    	//覆写toString(),格式化输出
    	public String toString()
    	{
    		return "姓名:"+name+"	语文成绩:"+ch+"	数学成绩:"+ma+"	英语成绩:"+en;
    	}
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getCh() {
    		return ch;
    	}
    
    	public void setCh(int ch) {
    		this.ch = ch;
    	}
    
    	public int getMa() {
    		return ma;
    	}
    
    	public void setMa(int ma) {
    		this.ma = ma;
    	}
    
    	public int getEn() {
    		return en;
    	}
    
    	public void setEn(int en) {
    		this.en = en;
    	}
    
    	public int getSum() {
    		return sum;
    	}
    
    	public void setSum(int sum) {
    		this.sum = sum;
    	}
    }
    


     

    package com.itheima;
    
    /**
     * 2、 假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,
     * 另为还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。
     * 
     * 声明一个员工类,员工包含 3 个属性:姓名、工号以及工资。
     * 私有属性,提供属性访问方法,
     * 声明一个经理类,因为经理也是员工,包含员工的属性所以要继承员工类
     * 经理额外有个奖金属性,私有,并且提供属性访问方法,
     * 
     */
    public class Test2 
    {
    	public static void main(String[] args)
    	{
    		Employee e = new Employee("leilei","007",5000);
    		Manager m = new Manager("hanmeimei","001",10000,20000);
    		
    		System.out.println("员工姓名:"+e.getName()+"	工号:"+e.getId()+"	工资:"+e.getMoney());
    		System.out.println("经理姓名:"+m.getName()+"	工号:"+m.getId()+"	工资:"+m.getMoney()+"	奖金:"+m.getBonus());
    	}
    }
    
    //声明一个员工类,员工包含 3 个属性:姓名、工号以及工资。
    class Employee
    {
    	private String name;
    	private String id;
    	private double money;
    	
    	Employee(String name,String id,double money)
    	{
    		this.name = name;
    		this.id = id;
    		this.money = money;
    	}
    	
    	//一些获取和设置的方法
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public double getMoney() {
    		return money;
    	}
    	public void setMoney(int money) {
    		this.money = money;
    	}	
    }
    
    //声明一个经理类,经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
    class Manager extends Employee
    {
    	private double bonus;
    	
    	Manager(String name,String id,double money,double bonus)
    	{
    		super(name, id, money);
    		this.bonus = bonus;
    	}
    	
    	public double getBonus() {
    		return bonus;
    	}
    
    	public void setBonus(double bonus) {
    		this.bonus = bonus;
    	}
    }


     

    package com.itheima;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     * 3、 一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素,请用代码实现。
     * 
     * 遍历集合,如果有"abc"相同的,则remove()
     */
    public class Test3 
    {
    	public static void main(String[] args)
    	{
    		ArrayList<String> aList = new ArrayList<String>();
    		
    		aList.add("sasdabc");
    		aList.add("abc");
    		aList.add("come");
    		aList.add("osiuabcu");
    		System.out.println(aList);//删除前的aList
    		
    		//遍历元素,如果为"abc",则删除该元素
    		for (Iterator<String> lt = aList.iterator();lt.hasNext(); )
    		{
    			String str = lt.next();
    			if (str.equals("abc"))//如果"abc",则删除
    				lt.remove();
    		}
    		System.out.println(aList);//删除后的aList
    	}
    }
    


     

    package com.itheima;
    
    import java.lang.reflect.Field;
    
    /**
     * 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   
     *
     *  public void setProperty(Object obj, String propertyName, Object value)
     *   {   
     *   }
     * 
     * 反射知识,用Field方法把一个类的propertyName获取字段
     * 可以考虑反射中的暴力反射,强行修改
     * 记得修改完要关闭访问权限
     * 测试
     *
     */
    public class Test4 
    {
    	public static void main(String[] args)
    	{
    		TestClass tc = new TestClass();
    		System.out.println(tc.pri+"---"+tc.pub);
    		
    		//修改后的
    		setProperty(tc,"pub",345);
    		setProperty(tc,"pri",567);
    		System.out.println(tc.pri+"---"+tc.pub);
    	}
    	
    	public static void setProperty(Object obj,String propertyName,Object value)
    	{
    		try
    		{
    			Field f = obj.getClass().getDeclaredField(propertyName);//获取一个类的所有字段
    			f.setAccessible(true);//暴力反射,强行开启访问权限
    			f.set(obj,value);//修改
    			f.setAccessible(false);//关闭访问权限
    		}
    		catch (Exception e)
    		{
    			System.out.println("修改错误!");
    		}
    	}
    	
    	public static class TestClass//测试内部类
    	{
    		private int pri = 123;
    		public int pub = 234;
    	}
    }
    
    


     

    package com.itheima;
    
    /**
     * 5、 将字符串中进行反转。abcde --> edcba
     *
     *	字符串转成char数组
     *	定义一个反转功能的数组
     *	调用反转
     *	char数组转成字符串
     */
    public class Test5 
    {
    	public static void main(String[] args)
    	{
    		String str = "abcde";
    		
    		System.out.println(reverseAll(str));
    		
    	}
    	
    	//定义一个函数,函数功能反转一个字符串
    	public static String reverseAll(String str)
    	{
    		int start,end;
    		char[] ch = str.toCharArray();
    		for (start=0,end=ch.length-1;start<end;start++,end--)
    		{
    			change(ch,start,end);
    		}
    		return new String(ch);
    	}
    		
    	//定义一个函数,函数功能交换两个char类型函数位置函数
    	public static void change(char[] ch,int x,int y)
    	{
    		char temp =ch[x];
    		ch[x] = ch[y];
    		ch[y] = temp;
    	}
    }
    


     

    package com.itheima;
    
    import java.util.HashSet;
    import java.util.Random;
    
    /**
     * 6、 编写一个程序,获取10个1至20的随机数,要求随机数不能重复
     * 
     * Random获得随机数
     * 定义一个数组,如果不同则存入,相同不存,考虑HashSet
     * 计数器满存入10个则停滞产生随机数
     * 打印随机数
     */
    public class Test6 
    {
    	public static void main(String[] args)
    	{
    		//创建Random对象,获取随机数
    		Random r = new Random();
    		//因为考虑随机数不重复,所以用Set集合,因为没有要求排序,所以可以考虑HashSet
    		HashSet<Integer> s = new HashSet<Integer>();
    		
    		while (s.size()<10)//如果集合中元素小于10个就继续存数
    		{
    			s.add(r.nextInt(20)+1);//随机把1~20的数添加进集合
    		}
    		System.out.println(s);
    	}
    }
    


     

    package com.itheima;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    /**
     * 7、 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号
     *
     * 定义MyLineNumReader类。用StringBuffer,如果一行中有
    则代表需要换行了
     * 那么前面需要加上计数器和冒号
     */
    public class Test7 
    {
    	public static void main(String[] args) throws IOException 
    	{			
    			MyLineNumReader mlnr = new MyLineNumReader(new FileReader("Test.java"));
    
    			String s=null;
    
    	        while( (s = mlnr.readLine()) != null )
    	
    	        {
    	               System.out.println(s);
    	        }
    	        mlnr.close();//关闭流
    	}
    }
    
    class MyLineNumReader 
    {
    	private Reader r;
    	int linenum = 0;//行前面的序号
    	
    	MyLineNumReader(Reader r)
    	{
    		this.r = r;
    		linenum = 0;
    	}
    	
    	public String readLine() throws IOException
    	{
    		StringBuffer sb = new StringBuffer();
    		
    		int num = 0;
    		
    		while ((num = r.read()) != -1)
    		{
    			//如果碰到
    就代表要换行了
    			if (num == '
    ')
    				continue;
    			if (num == '
    ')
    			{
    				linenum ++;
    				return linenum + ":" + sb.toString();
    			}
    			else
    			{
    				sb.append((char)num);	
    			}
    		}
    		
    		if (sb.length()>0)
    		{
    			linenum ++;
    			return linenum + ":" + sb.toString();
    		}
    		
    		return null;
    	}
    	public void close() throws IOException 
    	{
    		r.close();
    	}
    }
    


     

    package com.itheima;
    
    /**
     * 8、 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。
     * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。完成这个例子,请说出java中针对异常的处理机制。
     * 
     *
     */
    public class Test8 
    {
    	public static void main(String[] args)
    	{
    		C.c();//主函数调用测试
    	}
    }
    
    class A
    {
    	public static void a() throws Exception//声明异常,不处理,再抛给上一级调用者
    	{
    		B.b();//调用b,b的异常被抛给a处理
    	}
    }
    
    class B
    {
    	public static void b() throws Exception//声明异常
    	{
    		throw new Exception("b发生异常");//b产生并抛出异常,异常不处理,抛给调用者a
    	}
    }
    
    class C
    {
    	public static void c()
    	{
    		try 
    		{
    			A.a();//异常被抛给调用者a
    		}
    		catch(Exception e)//捕捉异常
    		{
    			System.out.println(e.toString());//(处理异常),打印异常信息
    		}
    	}
    }


     

    package com.itheima;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    /**
     * 9、 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,
     * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
     * 
     * 提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。
     * 其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
     * 
     *
     */
    
    public class Test9{
    
            public static void main(String[] args) throws IOException 
            {
                    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                    
                    System.out.print("请输入一个数:");
                    String str = br.readLine();
                    int m = 0;
                    try {
                            m = Integer.parseInt(str);//把字符串转成十进制数
                            long quotient = m/2;
                            long remainder = m%2;
                            
                            StringBuffer sb = new StringBuffer();
                            //余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2
                            sb.append(remainder);
                            //这次得到的余数就是次低位,如此循环,直到被除数为0为止
                            while(quotient != 0) 
                            {
                                    remainder = quotient%2;
                                    quotient = quotient/2;
                                    sb.append(remainder);
                            }
                            System.out.println(sb.reverse().toString());//翻转
                    	} 
                    
                    catch(NumberFormatException e) 
                    {
                            //正则表达式的匹配方法
                    		String regx = ".*\D+.*";
                            
                            if(str.matches(regx)) 
                            {
                                    System.out.println("字符串中包含非数字字符");
                            } 
                            
                            else 
                            {
                                    System.out.println("数据范围超出");
                            }
                    } 
                    
                    finally 
                    {
                    	try
                    	{
                    		if (br != null)
                    			br.close();
                    	}
                    	catch(IOException e)
                    	{
                    		System.out.println("流关闭失败!");
                    	}
                    }
            }
    }
    
    


     

    package com.itheima;
    
    /**
     * 10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
     * 
     *  3个瓶盖换1瓶可乐
     *  定义可乐。瓶盖,买的瓶数
     *  每买一瓶,可乐,瓶盖,买的瓶数都会+1个
     *  3个瓶盖等于一个瓶盖加一瓶可乐
     */
    public class Test10 
    {
    	public static void main(String[] args)
    	{		
    		System.out.println(getCoke(28));
    		System.out.println(getCoke(50));
    	}
    	
    	//定义一个函数,函数功能,输入可乐数,可以返回要买的瓶数
    	public static int getCoke(int num)
    	{
    		int coke = 0;//可乐数
    		int cap = 0;//瓶盖数
    		int buy = 0;//买的可乐数
    		
    		while (coke < num)//每买一瓶饮料,买的数,瓶盖数和可乐数都加一
    		{
    				buy++;
    				cap++;
    				coke++;
    	
    			if (cap == 3)//3个瓶盖等于一个瓶盖加一瓶可乐
    			{
    				cap = 1;
    				coke++;
    			}
    		}
    		
    		return buy;
    	}
    }
    


     

  • 相关阅读:
    经典的Java基础面试题集锦
    2016春招Android开发实习生(网易传媒)笔试
    十三、集合点和事务
    十一、LoadRunner组成和工作原理
    Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)
    修改jar包内容并打包上传到私服
    Information:java: Multiple encodings set for module chunk platf "GBK" will be used by compile
    十、创建、运行和监控测试场景
    在gitlab新建分支,IDEA切换时找不到的解决办法
    Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)
  • 原文地址:https://www.cnblogs.com/runwind/p/4212171.html
Copyright © 2011-2022 走看看