当前位置: 首页 > news >正文

面向对象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] +"\t");   //空格
			}
			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 + "\t");
			}
			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:\20170928\svncontent\zuoye\1202\data.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("超出数据总和!");
		}
	}
}

 

 

转载于:https://www.cnblogs.com/ziyanxiaozhu/p/8003795.html

相关文章:

  • PAT 1023.组个最小数
  • mongodb for windows安装
  • 【比赛】NOIP2017 宝藏
  • gdb调试多线程程序总结
  • Excel2016通过宏生成拼音码
  • Web离线应用解决方案——ServiceWorker
  • am335x SPI spi_d0, spi_d1 out, in 模式设定
  • spring+activemq实战之配置监听多队列实现不同队列消息消费
  • cookie,localStorage和sessionStorage的区别
  • Centos7下配置Python3和Python2共存,以及对应版本Ipython安装配置
  • USB驱动程序之USB总线驱动程序学习笔记
  • django的部署以及和docker 的集成
  • SDN第四次作业
  • C. 字符类型及时间类型
  • 在兄弟连学Python Python项目计算器
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Angular4 模板式表单用法以及验证
  • C++类中的特殊成员函数
  • Hexo+码云+git快速搭建免费的静态Blog
  • js操作时间(持续更新)
  • Laravel 实践之路: 数据库迁移与数据填充
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpringBoot几种定时任务的实现方式
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 软件开发学习的5大技巧,你知道吗?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 用jquery写贪吃蛇
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​学习一下,什么是预包装食品?​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net 8.0 新的变化
  • .NET CLR基本术语
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net的DataSet直接与SQL2005交互
  • .NET实现之(自动更新)
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CentOs7]图形界面
  • [CF407E]k-d-sequence
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘
  • [FFmpeg学习]从视频中获取图片
  • [hive小技巧]同一份数据多种处理
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例
  • [LLM][FT]大模型Fine-Tuning相关技术0
  • [MySQL]视图索引以及连接查询案列