「java卷轴算法」算法 Java

博主:adminadmin 2022-11-28 12:53:07 41

今天给各位分享java卷轴算法的知识,其中也会对算法 Java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中递归算法是怎么算的?

1.汉诺塔问题

import javax.swing.JOptionPane;

public class Hanoi {

private static final String DISK_B = "diskB";

private static final String DISK_C = "diskC";

private static final String DISK_A = "diskA";

static String from=DISK_A;

static String to=DISK_C;

static String mid=DISK_B;

public static void main(String[] args) {

String input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");

int num=Integer.parseInt(input);

move(num,from,mid,to);

}

private static void move(int num, String from2, String mid2, String to2) {

if(num==1){

System.out.println("move disk 1 from "+from2+" to "+to2);

}

else {

move(num-1,from2,to2,mid2);

System.out.println("move disk "+num+" from "+from2+" to "+to2);

move(num-1,mid2,from2,to2);

}

}

}

2. 这是一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:

abc

acb

bac

bca

cab

cba

(1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时。

(2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素,

然后low+1开始减少排列元素,如此下去,直到low=high

public static void permute(String str) {

char[] strArray = str.toCharArray();

permute(strArray, 0, strArray.length - 1);

}

public static void permute(char[] list, int low, int high) {

int i;

if (low == high) {

String cout = "";

for (i = 0; i= high; i++)

cout += list[i];

System.out.println(cout);

} else {

for (i = low; i= high; i++) {

char temp = list[low];

list[low] = list[i];

list[i] = temp;

permute(list, low + 1, high);

temp = list[low];

list[low] = list[i];

list[i] = temp;

}

}

}

3。这是一个组合的例子,与上述的例子相似,只是它所做的工作是,输出所给字符串中制定数目的元素的组合种类

(1)程序出口在于n=1,此时只要输出目标数组的所有元素即可

(2)逼近过程,当n1 的时候,我们先取第一个元素放入目标数组中,然后n-1,如此下去,最后出来。

import javax.swing.JOptionPane;

public class Combination {

/**

* @param args

*/

public static void main(String[] args) {

String input = JOptionPane.showInputDialog("please input your String: ");

String numString = JOptionPane.showInputDialog("please input the number of your Combination: ");

int num = Integer.parseInt(numString);

Combine(input, num);

}

private static void Combine(String input, int num) {

char[] a = input.toCharArray();

String b = "";

Combine(a, num, b, 0, a.length);

}

private static void Combine(char[] a, int num, String b, int low, int high) {

if (num == 0) {

System.out.println(b);

} else {

for (int i = low; ia.length; i++) {

b += a[i];

Combine(a, num - 1, b, i+1, a.length);

b=b.substring(0, b.length()-1);

}

}

}

}

Java的排序算法有哪些

java的排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。

1.插入排序:直接插入排序、二分法插入排序、希尔排序。

2.选择排序:简单选择排序、堆排序。

3.交换排序:冒泡排序、快速排序。

4.归并排序

5.基数排序

请问大家java中递归算法,希望有详细解释

public class Test{

    public static int result(int parameter){

          if(parameter=1) return 1; // 判断parameter是否小于等于1,如果不成立则递归调用

          int number = parameter*result(parameter-1);  // 将parameter-1继续调用函数 反复如此,直至条件成立。                                            

             return number;

     }

    public static void main(String[]args{

          int result = result(5);

          System.out.println(result);

  }

}

它的执行原理是如下这样的:

result(5) 初始时 ==》进入函数体判断parameter是否小于等于1,此时parameter等于5,条件不成立,执行parameter*result(parameter-1) 即5*result(5-1),程序反复执行。。。

5*result(5-1)

4*result(4-1)

3*result(3-1)

2*result(2-1) 到此 parameter等于1符合条件 函数返回1,层层返回。即:

result(1) =1

2*result(1)=2*1=2

3*result(2)=3*2=6

4*result(3)=4*6=24

5*result(4)=5*24=120

关于Java的分页算法,急!

使用分页类,直接调用就可以,代码如下:

package com.godwin.news.util;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.util.ArrayList;

/**

* 分页类,用于封闭分页显示信息

*

* @author javabs

*

*/

public class Pager {

// 当前页

private int currentPage;

// 总页数

private int totalPage;

// 总记录数

private int totalRecord;

// 每页条数

private int pageSize;

// 是否有下一页

private int hasNext;

private ArrayList keys;

private ArrayList values;

// 查询串

private String queryString;

// 首页

private String firstLink;

// 上一页

private String previousLink;

// 下一页

private String nextLink;

// 尾页

private String lastLink;

// 链接

private String forScriptLink;

public Pager(int pageSize, String queryString) {

keys = new ArrayList();

values = new ArrayList();

setQueryString(queryString);

setPageSize(pageSize);

}

public String getForScriptLink() {

if (keys.contains("toPage"))

removeKey("toPage");

String tmp = getQueryString();

if (tmp.length() == 0)

return "?";

else

return "?" + tmp + "";

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(String toPage) {

int tmpage = 1;

try {

tmpage = Integer.parseInt(toPage);

} catch (NumberFormatException e) {

tmpage = 1;

}

if (tmpage 1)

tmpage = 1;

else if (tmpage getTotalPage())

tmpage = getTotalPage();

currentPage = tmpage;

}

public String getFirstLink() {

return getQueryStr(1);

}

public int getHasNext() {

int i = 1;

if (getCurrentPage() = getTotalPage())

i = 0;

return i;

}

public String getLastLink() {

return getQueryStr(getTotalPage());

}

public String getNextLink() {

return getQueryStr(currentPage == totalPage ? currentPage : (currentPage + 1));

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public String getPreviousLink() {

return getQueryStr(currentPage == 1 ? currentPage : currentPage - 1);

}

public void setPreviousLink(String previousLink) {

this.previousLink = previousLink;

}

public String getQueryString() {

StringBuffer sb = new StringBuffer();

for (int i = 0; i keys.size(); i++) {

String key = (String) keys.get(i);

String value = (String) values.get(i);

sb.append("");

sb.append(key);

sb.append("=");

sb.append(value);

}

return sb.delete(0, 1).toString();

}

public void setQueryString(String queryString) {

if (queryString != null) {

String s[] = queryString.split("");

for (int i = 0; i s.length; i++) {

String s1[] = s[i].split("=");

if (s1.length == 2) {

keys.add(s1[0]);

values.add(s1[1]);

} else {

keys.add(s1[0]);

values.add("");

}

}

}

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage() {

if (totalRecord % pageSize == 0) {

totalPage = totalRecord / pageSize;

totalPage = totalPage == 0 ? 1 : totalPage;

}

else

totalPage = totalRecord / pageSize + 1;

}

public int getTotalRecord() {

return totalRecord;

}

public void setTotalRecord(int totalRecord) {

this.totalRecord = totalRecord;

setTotalPage();

}

public String[] getQueryParameterValues(String key) {

return getQueryParameterValues(key, "UTF-8");

}

public String[] getQueryParameterValues(String key, String decode) {

ArrayList ret = new ArrayList();

for (int i = 0; i keys.size(); i++)

if (((String) keys.get(i)).equals(key))

try {

ret.add(URLDecoder.decode((String) values.get(i), decode));

} catch (UnsupportedEncodingException e) {

ret.add((String) values.get(i));

}

if (ret.size() == 0)

return null;

String strArr[] = new String[ret.size()];

for (int i = 0; i ret.size(); i++)

strArr[i] = (String) ret.get(i);

return strArr;

}

public String getQueryParameter(String key) {

return getQueryParameter(key, "UTF-8");

}

public String getQueryParameter(String key, String decode) {

String value = "";

if (key != "toPage") {

try {

value = URLDecoder.decode(getValue(key), decode);

} catch (UnsupportedEncodingException e) {

value = getValue(key);

}

} else {

int tmpage = 1;

try {

value = getValue(key);

tmpage = Integer.parseInt(value);

} catch (NumberFormatException e) {

tmpage = 1;

} catch (NullPointerException e1) {

tmpage = 1;

}

if (tmpage 1)

tmpage = 1;

else if (tmpage getTotalPage())

tmpage = getTotalPage();

value = (new StringBuffer(String.valueOf(tmpage))).toString();

}

return value;

}

public void setQueryParameter(String key, String value) {

if (key.equals("toPage"))

removeKey(key);

keys.add(key);

values.add(value);

}

public String getQueryStr(int toPage) {

setQueryParameter("toPage", (new StringBuffer(String.valueOf(toPage))).toString());

return "?" + getQueryString();

}

private String getValue(String key) {

String ret = "";

for (int i = 0; i keys.size(); i++) {

if (!((String) keys.get(i)).equals(key))

continue;

ret = (String) values.get(i);

break;

}

return ret;

}

private void removeKey(String key) {

for (int i = 0; i keys.size(); i++) {

if (!((String) keys.get(i)).equals(key))

continue;

keys.remove(i);

values.remove(i);

break;

}

}

public static void main(String args[]) {

String str = "a=中文aab=2c=3c=4c=5";

Pager page = new Pager(2, str);

page.setTotalRecord(10);

page.setCurrentPage("1");

System.out.println(page.getFirstLink());

System.out.println(page.getPreviousLink());

System.out.println(page.getNextLink());

System.out.println(page.getLastLink());

String s = page.getQueryParameter("a");

System.out.println("s: " + s);

}

}

java最常用的几种加密算法

简单的Java加密算法有:

第一种. BASE

Base是网络上最常见的用于传输Bit字节代码的编码方式之一,大家可以查看RFC~RFC,上面有MIME的详细规范。Base编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base来将一个较长的唯一标识符(一般为-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

第二种. MD

MD即Message-Digest Algorithm (信息-摘要算法),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD的前身有MD、MD和MD。

MD算法具有以下特点:

压缩性:任意长度的数据,算出的MD值长度都是固定的。

容易计算:从原数据计算出MD值很容易。

抗修改性:对原数据进行任何改动,哪怕只修改个字节,所得到的MD值都有很大区别。

弱抗碰撞:已知原数据和其MD值,想找到一个具有相同MD值的数据(即伪造数据)是非常困难的。

强抗碰撞:想找到两个不同的数据,使它们具有相同的MD值,是非常困难的。

MD的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD以外,其中比较有名的还有sha-、RIPEMD以及Haval等。

第三种.SHA

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于^位的消息,SHA会产生一个位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

SHA-与MD的比较

因为二者均由MD导出,SHA-和MD彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

对强行攻击的安全性:最显著和最重要的区别是SHA-摘要比MD摘要长 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD是^数量级的操作,而对SHA-则是^数量级的操作。这样,SHA-对强行攻击有更大的强度。

对密码分析的安全性:由于MD的设计,易受密码分析的攻击,SHA-显得不易受这样的攻击。

速度:在相同的硬件上,SHA-的运行速度比MD慢。

第四种.HMAC

HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

java中的算法,一共有多少种,哪几种,怎么分类。

就好比问,汉语中常用写作方法有多少种,怎么分类。

算法按用途分,体现设计目的、有什么特点

算法按实现方式分,有递归、迭代、平行、序列、过程、确定、不确定等等

算法按设计范型分,有分治、动态、贪心、线性、图论、简化等等

作为图灵完备的语言,理论上”Java语言“可以实现所有算法。

“Java的标准库'中用了一些常用数据结构和相关算法.

像apache common这样的java库中又提供了一些通用的算法

关于java卷轴算法和算法 Java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。