zoukankan      html  css  js  c++  java
  • 面向对象java知识汇总题

    public static void main(String[] args) {
    		// 第一题有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    		int[] a = { 1, 2, 3, 4 };
    		int b = 0;
    		for (int i = 0; i < a.length; i++) {
    			for (int m = 0; m < a.length; m++) {
    				for (int n = 0; n < a.length; n++) {
    					if (i != m && m != n && i != n) {
    						System.out.print("  " + a[i] + a[m] + a[n] + "  ");
    						b++;
    					}
    				}
    			}
    		}
    		System.out.println("共有" + b + "种");
    		System.out.println("--------------------");
    
    }
    

     

    // 2, 题目:有一分数序列:2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13...求出这个数列的前20项之和。
    public static void main(String[] args) {
              double fz = 2; // 分子
    		double fm = 1; // 分母
    		double ss = 0; // 分数
    		double zz = 0; // 中间变量
    		int gg = 0;
    		double he = 0;
    		for (int i = 0; i < 20; i++) {
    			ss = fz / fm;
    			zz = fm;
    			fm = fz; // 把分子的值赋给下一个的分母
    			fz = fz + zz; //
    			he += ss; // 和
    			gg++; // 次数
    
    			// System.out.println(ss);
    			// System.out.println(gg);
    		}
    		System.out.println(he);
    }

     

    // 3, 题目:求1! + 2! + 3! +...+ 20!的和(5! 表示 5 的阶乘, 即 5 * 4 * 3 * 2 * 1);
    public static void main(String[] args) {
    		long sum = 1;
    		long soo = 0;
    		for (int i = 1; i < 21; i++) {
    			sum *= i;
    			// System.out.println(i+"的阶乘为"+sum);
    			soo += sum;
    		}
    		System.out.println("前20阶乘的和为" + soo);
    		System.out.println("--------------------");
    		
    		
    }

     

    // 4, 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
    第一种方法:main中
    String str = "28382";
    		if (str.charAt(0) == str.charAt(4) && str.charAt(1) == str.charAt(3)) {
    			System.out.println("这个数是回文数");
    		} else {
    			System.out.println("这个数不是回文数");
    		}
    

      第二种方法:

    int num1 =12321;
    		String s =String.valueOf(num1);
    		char[] cs = new char[s.length()];
    		for(int i = 0; i < s.length(); i++) {
    			cs[i]= s.charAt(i);
    		}
    		String  _s = "";
    		for( int j = s.length()-1 ; j >= 0 ; j--) {
    			_s +=cs[j];
    		}
    		if(s.equals(_s)){
    			System.out.println("这个数是回文数");
    		}else {
    			System.out.println("这个数不是回文数");
    		}
    

      第三种:

    在main中调用:
    
    System.out.println(reverse(12356));
    

      

    public static int reverse (int num) {
    		int rev = 0;
    		int ee =num;
    		
    		while (num>0) {
    			rev = rev  * 10 + num % 10;
    			num /=10;
    		}if(ee == rev) {
    			System.out.println("这个数是回文数" );
    		}else {
    			System.out.println("这个数不是回文数");
    		}
    		return rev;	
    	}

    // 5, 题目:先写一个程序, 随机生成一个3 * 3的矩阵数字(1-9数字全部用到不能重复),
    // 然后求这个3*3矩阵对角线元素之和

    方法一:

    //main中

              List<Integer> list = new ArrayList<Integer>();
    		// for循环放到数组中
    		for (int i = 1; i < 10; i++) {
    			list.add(i);
    		}
    		List<Integer> list1 = new ArrayList<Integer>();
    		Random ra = new Random();    //随机数
    		for (int i = 0; i < 9; i++) {
    			int Ln = ra.nextInt(list.size());   //取出不包含这个数之前的随机数,
    			list1.add(list.get(Ln));把取出的这个随机数放到list1中
    			list.remove(Ln);再从原集合里移走
    		}
    		// 下面是换行;
    		int ss1 = 0;
    		for (Integer i : list1) { // 遍历随机数的集合
    			ss1++; //
    			System.out.print("  " + i); // 打印
    			if (ss1 == 3) { // 当ss1=3时
    				System.out.println(); // 换行
    				ss1 = 0; // 再让它等于0;
    			}
    		}
    		int cc = list1.get(0) + list1.get(4) + list1.get(8) + list1.get(2) + list1.get(4) + list1.get(6);
    		System.out.println("对角线之和为:" + cc);
    

      

    方法二:

    List <Integer> list = new ArrayList<Integer>();
    		//for循环,按顺序添加
    		for (int i = 1; i <10; i++) {    
    			list.add(i);
    		}
    		Collections.shuffle(list); //随机排序
    		System.out.println(list);
    		
    		int[ ][ ] arrs =new int [3][3];
    		int index = 0;
    		for(int i = 0 ; i < arrs.length; i++) {
    			for(int j = 0;  j < arrs[i].length; j++ ) {	
    				arrs[i][j] = list.get(index);
    				index++;
    				System.out.print(arrs[i][j] +"	");   //空格
    			}
    			System.out.println();          //换行
    		}
    		System.out.println(arrs[0][0]+arrs[0][2]+arrs[1][1]+arrs[2][0]+arrs[2][2]+arrs[1][1]);
    

      

    	//下面这种可以将二维数组遍历出来
    	/*	for(int [ ]  is :arrs) {
    			for(int i : is ) {	
    				System.out.print(i + "	");
    			}
    			System.out.println();
    		}*/
    

      

     6, 使用最少的代码将字符串String转换成字符数组
    		// (将字符串转成数字(Long, Integer, Short, Byte, Double, Float)
    		/*
    		 * System.out.println("--------------------"); Scanner sc = new
    		 * Scanner(System.in); System.out.println("请输入字符串数字"); String aa= sc.nextLine();
    		 * System.out.println("Integer" + Integer.parseInt(aa));
    		 * System.out.println("long" + Long.parseLong(aa));
    		 * System.out.println("short"+Short.parseShort(aa));
    		 * System.out.println("Byte"+Byte.parseByte(aa));
    		 * System.out.println("Double"+Double.parseDouble(aa));
    		 * System.out.println("Float"+Float.parseFloat(aa));
    		 * System.out.println(Arrays.toString(aa.toCharArray())); //打印成字符数组
    

      

    		// 7, 将二进制字符串("11010011"), 八进制字符串("3325"), 十六进制字符串("5a3f")转换成数字,
    		// 在控制台上打印出来
    
    		System.out.println("--------------------");
    
    		System.out.println(Integer.parseInt("11010011", 2));
    		System.out.println(Integer.parseInt("3325", 8));
    		System.out.println(Integer.parseInt("5a3f", 16));
    

      

    		// 8, 取一个随便的字符串中字母出现的次数, 打印出来
    		/*
    		 * System.out.println("--------------------"); 
    		 * Scanner sc1 = new Scanner(System.in); 
    		 * System.out.println("请输入字符串"); 
    		 * String cc1 =sc1.nextLine(); //字符串形式的接收
    		 * Map<String,Integer> ss2 = newHashMap<String,Integer>();
    		 * String[ ] cs =cc1.split(",");
    		 * //用字符串的方法调用,返回一个字符串类型的数组.可以遍历了 
    		 * for (String string : cs) { 
    		 * ss2.put(string,ss2.get(string) == null ? 1 : ss2.get(string) + 1); //get通过键获得值,值得类型为整数型,可加减
    		 * } System.out.println(ss2);
    		 */
    

     // 9, 有一个字符串形式的任意日期是"yyyy-MM-dd"的格式, 计算这个日期到1949年10月1日上午8点差了多少小时

    		System.out.println("--------------------");
    		String st1 ="1990-10-12 08:00:00";
    		String st2 ="2017-10-10 09:09:00";
    		
    		SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		
    		try {
    			Date d1 =sdf.parse(st1);  //输入字符串类型,将其转换成date 类型,返回值是date类型
                  // eg . syso(string.format("%tF",d1)); Date d2 =sdf.parse(st2); Long a1 =d1.getTime(); //date方法里有的 gettime方法,返回 毫秒数 Long a2 =d2.getTime(); System.out.println((a2-a1)/1000/3600); //毫秒数/秒数/小时数 就是差的小时数了 } catch (ParseException e) { e.printStackTrace(); } }

      大题:

    从data.txt文件中读取数据到程序中, 实现一个联动功能,
    即输入主食会显示"1---馒头 2---煎饼 3---米饭", 再次输入会显示下一级菜单
    data.txt文件中每一行都有被 "," 分割的三个值, 第一个值代表这项食物的编号(对于整个数据来说是唯一的),
    第三个值表示所属的上一级食物分类

    a,主食,0
    b,炒菜,0
    c,酒水,0
    210,芹菜,b
    211,韭菜,b
    212,菠菜,b
    2101,芹菜炒土豆,210
    2102,芹菜肉片,210
    2111,韭菜炒鸡蛋,211
    2112,韭菜拌黄瓜,211
    2113,韭花酱,211
    2114,韭菜炒蚕蛹,211
    2121,菠菜汤,212
    310,啤酒,c
    311,白酒,c
    312,饮料,c
    3101,崂山,310
    3102,雪花,310
    3103,青啤,310
    3111,黄河龙,311
    3111,老村长,311
    3121,可乐,312
    3122,雪碧,312
    3123,果粒橙,312
    3124,酸梅汤,312
    313,纯净水,c
    3131,娃哈哈,313
    3132,冰露,313
    110,馒头,a
    111,煎饼,a
    112,米饭,a
    1101,蒸馒头,110
    1102,炸馒头,110
    1103,烤馒头片,110
    1112,煎饼果子,111
    1111,菜煎饼,111
    1113,肉煎饼,111
    1121,蛋炒饭,112
    1122,扬州炒饭,112
    
    package lianxi2;
    
    public class Menu {
    	private String id;
    	private String name;
    	private String parentid;
    //是三列,三个属性,所以写三个
    //下面构造方法,传入三个值,等于这三个属性名
    //重写三个属性的 get set 方法.重写string方法,使能打印出我们想要的样子
    //这样这个菜单,就做出来了.再就是在控制台写方法调用了
    	public Menu(String id, String name, String parentid) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.parentid = parentid;
    	}
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getParentid() {
    		return parentid;
    	}
    
    	public void setParentid(String parentid) {
    		this.parentid = parentid;
    	}
    
    	@Override//重写的这个tostring 方法,使在打印那三列时,显示为如下格式
    	public String toString() {
    		return "Menu [id=" + id + ", name=" + name + ", parentid=" + parentid + "]";
    	}
    }
    

      

    package lianxi2;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class Test2 {
    
    	public static void main(String[] args) {
    		// E:20170928svncontentzuoye1202data.txt
    		List<Menu> mlist = getMenu("E:\20170928\svncontent\zuoye\1202\data.txt");
    		//把一个实体 装到一个list中,返回给前台.这种方法以后是一定要用到的
    		//这行如果写 打印mlist 就会把所有菜单取出来
    		for (Menu menu : mlist) {
    			if (menu.getParentid().equals("0")) {  //先将最外层菜单显示出来
    				System.out.println(menu);//
    			}
    		}
    		Scanner scanner = new Scanner(System.in); 
    		String s = scanner.nextLine();//显示出外面那层菜单,后输入一个数
    		for (Menu menu : mlist) {
    			if (s.equals(menu.getParentid())) {
    				System.out.println(menu);
    			}
    		}
    		String s2 = scanner.nextLine();//再输入一个数
    		for (Menu menu : mlist) {
    			if (s2.equals(menu.getParentid())) {
    				System.out.println(menu);
    			}
    		}
    		
    		scanner.close();  //控制台开了,就得关
    	}
    
    	public static List<Menu> getMenu(String path) {
    		File file = new File(path);   //用流 去读
    		List<Menu> list = null;  //定义一个menu类的集合
    		if (file.exists()) {   //文件存在就  执行下面
    			try {
    				InputStream in = new FileInputStream(file);   //定义一个输入型字节流,是由于我们要读的文档里面
    				//既有字节数字存在,又有汉字,所有我们用输入字节,再进行字节转换,再搞成处理流的样式
    				InputStreamReader isr = new InputStreamReader(in, "utf-8");  
    				//字节转为字符,使乱码正常显示
    				BufferedReader br = new BufferedReader(isr);//处理流. 这上面三个,每次传入上层定义的数字
    				String info = null;
    				list = new ArrayList<Menu>();   //在这里实例化这个集合
    				while ((info = br.readLine()) != null) { //当还有数据可读时,执行下面的循环
    					String[] infos = info.split(",");  //用逗号来分割
    					Menu menu = 
    							new Menu(infos[0], infos[1], infos[2]); //加进去这些分割好的
    					list.add(menu);
    				}
    				br.close();  //打开流,要再关闭
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		} else {   //不存在就 打印不存在
    			System.out.println("文件不存在 !");
    		}
    		return list;   //在最后返回一个
    	}
    
    }
    

      

    写一个程序统计一个项目中src下的所有 .java 文件的代码行数总和(空行不算,)

    package lianxi2;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    /**
     * 统计代码行数
     * 能用文本文档 打开的东西,都能使用流操作
     * @author admin
    
     //注释就两种:
    // 1. 以//开头; //定义这个来判断下面这种 注释 boolean flag = flase //2.如果是以 /* 开头,就是true. 注释行++, 否则返回flase . 以 " */" 结尾 */ public class Test3 { private static int num; //将计数的这个,定义为成员变量 public static void main(String[] args) { String path = "E:\20170928\1113\zuoye"; countRows(new File(path)); System.out.println(num); } /** * @param path 文件夹目录 */ public static void countRows(File file) { //传入一个文件类 if (file.exists()) { //如果文件存在 File[] files = file.listFiles(); //写一个集合,是为了把文件遍历出来 if (files != null) { //如果文件里面的东西 不为空.为空或者它本身就是一个文件就返回回去 for (File f : files) { //不是空的情况下,for循环去判断 if (f.isDirectory()) { //是否是一个目录 countRows(f); //是,就再调用一下它自己 } else {//如果不是文件,就开始读 if (f.getName().endsWith(".java")) { //还得判断一下是不是为java结尾的 try { Reader reader = new FileReader(f); BufferedReader br = new BufferedReader(reader); String s = null; while((s = br.readLine())!=null) { //读的时候就写一个while循环 if (s.trim().length() > 0) { //去掉两边的空格. //空行不算 num++; } } br.close(); //把流关闭 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } } } else { //文件如果不存在 System.out.println("文件不存在 !"); } } }

      

    写一个带线程同步的程序模拟5个人在火车站买票, 总共有4张票

    package thread;
    
    public class MyThread implements Runnable {
    	//让mythread 去实现接口
    	private Station station = new Station();
    	//每一个线程模拟的是人,要有一个成员变量 车站
    //添加未实现的方法
    	@Override
    	public void run() {
    		station.sail(Thread.currentThread().getName());
    		//传一个字符串进去,把人名传进去
    		//这个里面要有卖票的方法,尽管现在还没写
    	}
    
    }
    

      

    package thread;
    
    public class Station {
    	
    	private int tickets = 4;  
    
    	public void sail(String name) {
    		synchronized (this) {
    	//这个保证线程唯一的关键字 可以单击右键添加
    			if (tickets > 0) {
    				System.out.println(name + "买到了一张票, 还剩" + 
    						--tickets + "票");
    				// -- 先自减,再赋值
    			} else {
    				System.out.println(name + "没买到票");
    			}
    		}
    	}
    
    }
    

      

    package thread;
    
    public class Test {
    	public static void main(String[] args) {
    		MyThread mt = new MyThread();
    		//上面这个是一个接口,下面的是线程,要将mt 传到线程里
    		
    		Thread t1 = new Thread(mt);
    		t1.setName("甲");
    		Thread t2 = new Thread(mt);
    		t2.setName("乙");
    		Thread t3 = new Thread(mt);
    		t3.setName("饼");
    		Thread t4 = new Thread(mt);
    		t4.setName("丁");
    		Thread t5 = new Thread(mt);
    		t5.setName("戊");
    		
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    		t5.start();
    	}
    }
    

      

    设计一个分页工具类, 具有两个属性: page(当前页数),
        rows(每页显示行数), 实例化一个List<String>, 并为其添加30条以上的任意数据,
        再定义一个方法, 参数为此List和分页工具类, 调用时显示出相应的数据
        要求:
            分页工具类具有可设置属性的构造方法, 具有空参构造方法, 调用空参构造方法则自动为其设置属性
            调用方法时需要显示List里面相应的内容, 并打印"当前是第__页, 显示从__到__条" 
    package com.a1.主要练习题;
    
    import java.util.List;
    
    public class PageBean {
    	private int page;  //当前第几页
    	private int rows;   //每页需要显示多少行
    	private int start ;    //从第几行
    	private int end ;     //到第几行
    	
    	
    	
    	
    	public PageBean() {   //空的构造方法
    		this.page  = 1 ;   //默认在第几页
    		this.rows = 10;   //默认每页显示几行
    		this .start = (page - 1) * rows ;     //假设现在是第一页,每页10 行  0-9
    		this.end = (page * rows) - 1  ;      
    		//9..因为里面牵扯到list,它的索引从0开始,多以我们也从0开始计行数
    		
    	}
    
    	public PageBean(int page , int rows) {     //有值de构造方法
    		this.page  = page ;   //默认在第几页
    		this.rows = rows ;   //默认每页显示几行
    		this .start = (page - 1) * rows ;    
    		this.end = (page * rows) - 1  ; 
    	}
    	//显示分页信息
    	public void showPage (List <String> list) {
    		if(this.start < list.size( )) {
    		 System.out.println("当前是第" + page + "页,显示从第 "+ ( start  + 1 )
    		 +" 行到"+ (( end + 1 )  >=  list.size( ) ? list.size( ) : (end + 1))+"行");
    	
    			}
    		}
    	
    	
    	public int getStart() {
    		return start;
    	}
    
    	public void setStart(int start) {
    		this.start = start;
    	}
    
    	public int getEnd() {
    		return end;
    	}
    
    	public void setEnd(int end) {
    		this.end = end;
    	}
    
    	public int getPage() {
    		return page;
    	}
    
    
    	public void setPage(int page) {
    		this.page = page;
    	}
    
    
    	public int getRows() {
    		return rows;
    	}
    
    
    	public void setRows(int rows) {
    		this.rows = rows;
    	}
    	
    	
    }
    

      

    package com.a1.主要练习题;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test {
    
    	public static void main(String[] args) {
    
    		List<String>  list = new ArrayList<String>();
    		for(int i = 1 ; i < 37 ; i ++) {
    			list.add("aaaa" +i );
    		}
    		PageBean pb = new PageBean( 3, 7);   //在这里输入想要显示第几页,每页几行
    		showInfo(list, pb);
    		pb.showPage(list);
    	}
    	//显示分页数据
    	public static void showInfo( List<String> list,PageBean pb) {
    		if(pb.getStart( )<list.size( )) {
    		for ( int i = pb.getStart( ) ;
    				i <=(pb.getEnd( ) >= list.size( ) ? list.size( ) -1 :pb.getEnd( ));
    				i ++) {
    			System.out.println( list.get( i ) );
    		}
    		}else {
    			System.out.println("超出数据总和!");
    		}
    	}
    }
    

     

  • 相关阅读:
    redis实现与分析
    NULL, '',0 '0'的区别
    Linux strace命令
    strcpy和memcpy的区别
    图书推荐
    php与mysql通讯那点事
    linux命令汇总
    linux系统信息查询及相关概念
    LNMP zabbix安装
    lftp查看文件时间与登录服务查看文件时间相差8小时
  • 原文地址:https://www.cnblogs.com/ziyanxiaozhu/p/8003795.html
Copyright © 2011-2022 走看看