1.使用异或对图片数据进行加密
import java.io.*;
class ImageTest
{
public static void main(String[] args) throws Exception
{
//找到图片文件
File inFile = new File("e:\\加密的图片.jpg");
//File inFile = new File("e:\\需要加密的图片.jpg");
File outFile = new File("e:\\解密的图片.jpg");
//建立数据通道,让图片的二进制数据流入
FileInputStream input = new FileInputStream(inFile);
FileOutputStream output = new FileOutputStream(outFile);
//边读,把读到的数据异或一个数据,把把数据写出
int content = 0; //该变量是用于存储读取到的数据
while((content = input.read())!=-1){ // 如果没有到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了。
output.write(content^12);
}
//关闭资源
output.close();
input.close();
}
}
2.猜数字游戏
/*
* 实现猜数字游戏, 如果没有猜对可以继续输入你猜的数字,如果猜对了停止程序。
* 最多只能猜三次,如果还剩下最后一次机会的时候要提醒用户。
*/
Random random=new Random();
int numb=random.nextInt(11);
System.out.println("输入一个数值");
Scanner scan=new Scanner(System.in);
boolean flag=true;
int sum=0;
//while(scan.hasNext()) {
while(flag&&sum<3) {
int a=scan.nextInt();
if(a==numb) {
System.out.println("ni cai dui le");
//scan.close();
sum++;
flag=false;
}else if(a<numb){
System.out.println("shu ru tai xiao");
if(sum==1) {
System.out.println("你还有最后一次机会");
}
sum++;
}else {
System.out.println("shu ru guo da");
if(sum==1) {
System.out.println("你还有最后一次机会");
}
sum++;
}
}
3.排序算法
1)选择排序(直接排序):使用一个元素与其他的元素挨个比较一次,符合条件交换位置。
public static void selectSort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {//控制的是轮数
for(int j=i+1;j<arr.length;j++) {//找出最大值
if(arr[i]<arr[j]) {
//交换位置
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
2)冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。
public static void bubbleSort(int[] arr){
// 把最大值放在最后一个位置
for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
for(int i = 0 ; i<arr.length-1-j ; i++){ // 找出一个最大值
//相邻的元素比较
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
4.折半查找法(二分法): 使用前提必需是有序的数组。
public static int halfSearch(int[] arr, int target){
//定义三个变量分别记录最大、最小、中间的查找范围索引值
int max = arr.length-1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid+1;
}else if(target<arr[mid]){
max = mid -1;
}else{
//找到了元素
return mid;
}
//没有找到的情况
if (max<min){
return -1;
}
//重新计算中间索引值
mid = (min+max)/2;
}
}
5.目前有数组” int[] arr = {11,2, 4, 2, 10, 11},
定义一个函数清除该数组的重复元素,返回的数组存储了那些非重复的元素而且数组不准浪费长度。
分析: 确定新数组的长度。 原数组的长度-重复元素个数
import java.util.*;
class Demo12 {
public static void main(String[] args)
{
int[] arr = {11,2, 4, 2, 10, 11};
arr = clearRepeat(arr);
System.out.println("清除重复元素的数组:"+ Arrays.toString(arr));
}
public static int[] clearRepeat(int[] arr){
//先计算出重复元素的格式:
int count = 0; //记录重复元素的个数
for(int i = 0 ; i < arr.length-1 ; i++){
for(int j = i+1 ; j<arr.length ; j++){
if(arr[i]==arr[j]){
count++;
break;
}
}
}
//新数组 的长度
int newLength = arr.length - count;
//创建一个新的数组
int[] newArr = new int[newLength];
int index = 0 ; //新数组的索引值
//遍历旧数组
for(int i = 0 ; i< arr.length ; i++){
int temp = arr[i]; //旧数组中的元素
boolean flag = false; //默认不是重复元素
//拿着旧数组 的元素 与新数组的每个元素比较一次。
for(int j = 0 ; j< newArr.length ; j++){
if(temp==newArr[j]){
flag = true;
break;
}
}
if(flag == false){
newArr[index++] = temp;
}
}
return newArr;
}
}
6. 读取.xml文件
/**
* 读取系统配置文件方法
*/
public List<SystemSetPageDto> getXMLPage() throws Exception{
List<SystemSetPageDto> pageList = new ArrayList<>();
//创建SAXReader对象
SAXReader reader = new SAXReader();
String strPath = this.getClass().getClassLoader().getResource("pageComponentSet.xml").getPath();
//读取文件 转换成Document
Document document = reader.read(new File(strPath));
//获取根节点元素对象
Element root = document.getRootElement();
//首先获取跟节点的所有属性节点
List<Element> pageLst = root.elements();
//List<Attribute> pageLst = root.attributes();
for(Element page : pageLst)
{
SystemSetPageDto rtnPage = new SystemSetPageDto();
List<SystemSetAreaDto> areaLst = new ArrayList<>();
// 取得页面ID
List<Attribute> pageAttributeLst = page.attributes();
if (pageAttributeLst.size() <= 0)
continue;
Attribute pageAttribute = pageAttributeLst.get(0);
if (pageAttribute == null)
continue;
rtnPage.pageID = pageAttribute.getValue();
rtnPage.areaLst = new ArrayList<>();
List<Element> areatLst = page.elements();
for(Element area : areatLst){
SystemSetAreaDto rtnArea = new SystemSetAreaDto();
// 取得区域编号
List<Attribute> areaAttributeLst = area.attributes();
if (areaAttributeLst.size() <= 0)
continue;
Attribute areaAttribute = areaAttributeLst.get(0);
if (areaAttribute == null)
continue;
rtnArea.areaCode = areaAttribute.getValue();
SystemSetComponentDto rtnTarget = new SystemSetComponentDto();
rtnArea.componentLst = new ArrayList<>();
List<Element> targetLst = area.elements();
for(Element target : targetLst){
switch(target.getName()){
case "ComponentCode":
rtnTarget.componentCode = target.getTextTrim();
break;
case "ComponentName":
rtnTarget.componentName = target.getTextTrim();
break;
// case "IsDisplay":
// rtnTarget.isDisplay = target.getTextTrim();
// break;
default:break;
}
}
rtnArea.componentLst.add(rtnTarget);
rtnPage.areaLst.add(rtnArea);
}
pageList.add(rtnPage);
}
return pageList;
}
其中SystemSetPageDto是一个实体对象:
import java.util.List;
public class SystemSetPageDto {
public String pageID;
public List<SystemSetAreaDto> areaLst;
public List<SystemSetAreaDto> getAreaLst() {
return areaLst;
}
public void setAreaLst(List<SystemSetAreaDto> areaLst) {
this.areaLst = areaLst;
}
public String getPageID() {
return pageID;
}
public void setPageID(String pageID) {
this.pageID = pageID;
}
}
同理:
import java.util.List;
public class SystemSetAreaDto {
public String areaCode;
public List<SystemSetComponentDto> componentLst;
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public List<SystemSetComponentDto> getComponentLst() {
return componentLst;
}
public void setComponentLst(List<SystemSetComponentDto> componentLst) {
this.componentLst = componentLst;
}
}
public class SystemSetComponentDto {
public String componentCode;
public String componentName;
public String getComponentCode() {
return componentCode;
}
public void setComponentCode(String componentCode) {
this.componentCode = componentCode;
}
public String getComponentName() {
return componentName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
}
7.根据前台post请求返回的json数据生成.xml文件
StringBuilder stringBuilder = new StringBuilder();
BufferedReader reader = this.getRequest().getReader();
String line = null;
while((line = reader.readLine()) != null){
stringBuilder.append(line);
}
reader.close();
JSONObject jsonObject = JSONObject.parseObject(stringBuilder.toString());
JSONArray jsonArrPage = jsonObject.getJSONArray("result");//获取page json数组
Document document = DocumentHelper.createDocument();
Element pageroot = document.addElement("pageList");//创建根节点pageList
Element pagechild; //创建子元素page
Element areaElement; //创建子元素area
Element compoentCodeElement;//创建子元素ComponentCode
Element componentNameElement;//创建子元素ComponentName
for (int i = 0; i < jsonArrPage.size(); i++) {
JSONObject jo = jsonArrPage.getJSONObject(i);
//将JSON对象转换成java对象
SystemSetPageDto systemSetPageDto = JSON.toJavaObject(jo, SystemSetPageDto.class);
pagechild = pageroot.addElement("page");
pagechild.addAttribute("pageid", systemSetPageDto.getPageID());
if(systemSetPageDto.getPageID().equalsIgnoreCase("yxjc") ||systemSetPageDto.getPageID().equalsIgnoreCase("jwwz")) {
List<SystemSetAreaDto> lstAreaDtos = systemSetPageDto.getAreaLst();
for (SystemSetAreaDto systemSetAreaDto : lstAreaDtos) {
//当未显示的组件为空时,不创建area子元素及相关内容
if(systemSetAreaDto.getComponentLst().size()>0) {
areaElement = pagechild.addElement("area");
areaElement.addAttribute("areaCode", systemSetAreaDto.getAreaCode());
List<SystemSetComponentDto> lstComponentDto = systemSetAreaDto.getComponentLst();
for (SystemSetComponentDto systemSetComponentDto : lstComponentDto) {
compoentCodeElement = areaElement.addElement("ComponentCode");
componentNameElement = areaElement.addElement("ComponentName");
compoentCodeElement.setText(systemSetComponentDto.getComponentCode());
componentNameElement.setText(systemSetComponentDto.getComponentName());
}
}
}
}else {
List<SystemSetAreaDto> lstAreaDtos = systemSetPageDto.getAreaLst();
for (SystemSetAreaDto systemSetAreaDto : lstAreaDtos) {
areaElement = pagechild.addElement("area");
areaElement.addAttribute("areaCode", systemSetAreaDto.getAreaCode());
List<SystemSetComponentDto> lstComponentDto = systemSetAreaDto.getComponentLst();
for (SystemSetComponentDto systemSetComponentDto : lstComponentDto) {
compoentCodeElement = areaElement.addElement("ComponentCode");
componentNameElement = areaElement.addElement("ComponentName");
compoentCodeElement.setText(systemSetComponentDto.getComponentCode());
componentNameElement.setText(systemSetComponentDto.getComponentName());
}
}
}
}
//实例化输出格式对象
OutputFormat format = OutputFormat.createPrettyPrint();
//设置输出编码
format.setEncoding("UTF-8");
//获取pageComponentSet.xml输出路径
String strPath = this.getClass().getClassLoader().getResource("pageComponentSet.xml").getPath();
File file = new File(strPath);
//生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
//生成xml文件
writer.write(document);
writer.close();
其中包含的实体类如6所示。生成的.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<pageList>
<page pageid="Head">
<area areaCode="LR1C1">
<ComponentCode>yxjc-jihuatourucheliang-wenben</ComponentCode>
<ComponentName>文本</ComponentName>
</area>
<area areaCode="LR1C2">
<ComponentCode>jwwz-weixiurenchebi-wenben</ComponentCode>
<ComponentName>文本</ComponentName>
</area>
<area areaCode="LR1C3">
<ComponentCode>jwwz-qianchegongliyunyingchengben-wenben</ComponentCode>
<ComponentName>文本</ComponentName>
</area>
<area areaCode="LR1C4">
<ComponentCode>jwwz-zongkucunjine-wenben</ComponentCode>
<ComponentName>文本</ComponentName>
</area>
</page>
<page pageid="Screen1">
<area areaCode="LR1C1">
<ComponentCode>yxjc-cheliangzaixian-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C2">
<ComponentCode>yxjc-zaituyingyuncheliang-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C3">
<ComponentCode>yxjc-shishiyingyunlicheng-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C4">
<ComponentCode>yxjc-pingjunyunxingsudu-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C1">
<ComponentCode>yxjc-houcheshijian-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C2">
<ComponentCode>yxjc-jihuawanchelv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C3">
<ComponentCode>yxjc-banciduixianlv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C4">
<ComponentCode>yxjc-zhundianlv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
</page>
<page pageid="Screen2">
<area areaCode="LR1C1">
<ComponentCode>yxjc-chucheshuchuchelv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C2">
<ComponentCode>jwwz-cheliangtuobaolv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C3">
<ComponentCode>jwwz-wanhaochelv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR1C4">
<ComponentCode>jwwz-cheliangbaoyangweixiuzhanbi-bingzhaung</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C1">
<ComponentCode>jwwz-fanxiulv-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C2">
<ComponentCode>jwwz-cheliangpingjunweixiushichang-wenben</ComponentCode>
<ComponentName>文本</ComponentName>
</area>
<area areaCode="LR2C3">
<ComponentCode>jwwz-ercilingliaozhanbi-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
<area areaCode="LR2C4">
<ComponentCode>jwwz-pingjundailiaoshichang-zhexian</ComponentCode>
<ComponentName>图形</ComponentName>
</area>
</page>
<page pageid="Screen3">
<area areaCode="LR1C1">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR1C2">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR1C3">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR1C4">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR2C1">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR2C2">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR2C3">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
<area areaCode="LR2C4">
<ComponentCode></ComponentCode>
<ComponentName></ComponentName>
</area>
</page>
<page pageid="yxjc"/>
<page pageid="jwwz"/>
</pageList>
8. 线程定时启动任务
public static void main(String[] args) {
/**
* ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
* 它有以下好处:
* 1>相比于Timer的单线程,它是通过线程池的方式来执行任务的
* 2>可以很灵活的去设定第一次执行任务delay时间
* 3>提供了良好的约定,以便设定执行的时间间隔
*
* 下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。
*
*/
//#region 定时启动一个线程任务
Runnable runnable = new Runnable() {
public void run() {
// task to run goes here
System.out.println("Hello !!");
}
};
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
service.scheduleAtFixedRate(runnable, 1/60, 1, TimeUnit.MINUTES);
// 创建并执行在给定延迟后启用的 ScheduledFuture。
// 参数:
// callable - 要执行的功能
// delay - 从现在开始延迟执行的时间
// unit - 延迟参数的时间单位
// 返回:
// 可用于提取结果或取消的 ScheduledFuture
//service.schedule(runnable, 1, TimeUnit.MINUTES);
//#endregion