九个J经典算法JAVA实现
- 格式:pdf
- 大小:387.75 KB
- 文档页数:24
java 经典笔试算法题一、排序算法1. 实现一个基于Java的快速排序算法。
答:快速排序是一种常用的排序算法,其核心思想是分治法。
首先选择一个基准元素,将数组分成两部分,一部分小于基准元素,一部分大于基准元素。
然后递归地对这两部分继续进行快速排序,直到整个数组有序。
2. 实现一个稳定的冒泡排序算法。
答:冒泡排序是一种简单的排序算法,通过重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
稳定的冒泡排序算法是指在排序过程中,相同元素的相对位置不会改变。
3. 实现一个选择排序算法。
答:选择排序是一种简单直观的排序算法。
其工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
二、字符串操作算法1. 实现一个函数,将一个字符串反转。
答:可以使用StringBuilder类的reverse()方法来实现字符串的反转。
2. 实现一个函数,将一个字符串中的所有大写字母转换为小写字母,其余字符保持不变。
答:可以使用String类的replaceAll()方法和toLowerCase()方法来实现。
3. 实现一个函数,将一个字符串按空格分割成单词数组,并删除空字符串和null字符串。
答:可以使用split()方法和Java 8的流来处理。
三、数据结构算法1. 实现一个单向链表,并实现插入、删除、查找和打印链表的功能。
答:单向链表是一种常见的数据结构,可以通过定义节点类和链表类来实现。
插入、删除、查找和打印链表的功能可以通过相应的方法来实现。
2. 实现一个二叉搜索树(BST),并实现插入、查找、删除节点的功能。
答:二叉搜索树是一种常见的数据结构,它具有唯一的高度特性。
插入、查找和删除节点的功能可以通过相应的方法来实现,如左旋、右旋、递归等。
3. 实现一个哈希表(HashMap),并实现插入、查找和删除键值对的功能。
答:HashMap是一种基于哈希表的映射数据结构,它通过哈希码的方式将键映射到对应的值上。
java经典算法代码1. 引言算法是计算机科学的核心,它是指导计算机如何解决问题的步骤。
在Java中,有许多经典的算法可以通过简洁的代码实现。
本文将介绍一些常用的Java算法,包括基础数据结构、排序、搜索、图论、动态规划和分治算法。
2. 基础数据结构Java中的基本数据结构包括数组、链表、栈、队列和集合等。
这些数据结构为更复杂的算法提供了基础。
示例:数组和链表的插入操作// 数组插入public void insert(int index, int value) {if (index <0|| index > array.length) {throw new IndexOutOfBoundsException("Index: "+ index +", Array length: "+ array.length);}for (int i = array.length -1; i >= index; i--) {array[i +1] = array[i];}array[index] = value;}// 链表插入public void insert(int index, int value) {if (index <0|| index > size) {throw new IndexOutOfBoundsException("Index: "+ index +", List size: "+ size);}Node newNode =new Node(value);if (index ==0) {newNode.next = head;head = newNode;} else {Node current = head;for (int i =0; i < index -1; i++) {current = current.next;}newNode.next = current.next;current.next = newNode;}size++;}3. 排序算法排序算法用于将一组数据按照特定的顺序排列。
java中常用算法全文共四篇示例,供读者参考第一篇示例:Java是一种高级编程语言,常用于开发各种类型的软件和应用程序。
在Java中,算法是程序设计中的核心部分,它主要用于解决各种问题和优化程序的运行效率。
在Java中,有许多常用的算法,它们可以帮助开发人员更高效地开发程序并解决各种复杂的问题。
一、排序算法排序算法是一种常用的算法,在Java中有许多种不同的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。
这些排序算法可以帮助开发人员对数据进行排序,从而更快地访问和检索数据。
快速排序是一种效率较高的排序算法,它采用分治的策略,将原始数据切分成较小的子集,然后对每个子集进行排序。
快速排序通常比冒泡排序和选择排序更快,尤其在处理大量数据时更加高效。
二、搜索算法搜索算法是另一种常用的算法,在Java中有许多种不同的搜索算法,如线性搜索、二分搜索、广度优先搜索、深度优先搜索等。
这些搜索算法可以帮助开发人员在数据集中查找特定的数据或解决特定的问题。
二分搜索是一种高效的搜索算法,它适用于有序数据集合。
二分搜索将数据集划分成两部分,然后查找目标数据是否在其中一部分,如果在,则继续在该部分进行查找;如果不在,则在另一部分继续查找。
二分搜索的时间复杂度为O(log n),因此在处理大量数据时非常高效。
三、动态规划算法动态规划算法是一种常用的优化算法,在Java中可以帮助解决一些复杂的问题,如最短路径问题、背包问题、编辑距离等。
动态规划算法通常以自底向上的方式解决问题,它将问题分解成较小的子问题,并利用子问题的解来求解原始问题。
背包问题是一个经典的动态规划问题,它要求在给定的背包容量和物品集合下,选取一些物品放入背包,使得物品的总价值最大化。
通过动态规划算法,可以高效地解决背包问题并找到最优解。
四、图论算法图论算法是一种重要的算法,在Java中有许多种不同的图论算法,如最短路径算法、最小生成树算法、拓扑排序算法等。
java常用算法和数据结构Java是一种面向对象的编程语言,它具有丰富的算法库和数据结构库,为开发人员提供了许多常用的算法和数据结构。
下面将介绍一些Java常用的算法和数据结构。
1.排序算法-冒泡排序(Bubble Sort):比较相邻的两个元素,如果顺序错误则交换位置,重复该过程直到整个序列有序。
-插入排序(Insertion Sort):将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分合适的位置。
-选择排序(Selection Sort):每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
-快速排序(Quick Sort):选择一个基准元素,将数组分为两部分,小于基准的放左边,大于基准的放右边,递归地对左右两部分进行快速排序。
-归并排序(Merge Sort):将数组分为两部分,分别对每个子数组进行排序,然后合并两个有序子数组。
2.搜索算法-二分查找(Binary Search):对有序数组进行查找,每次将查找范围缩小一半。
-广度优先搜索(BFS):以树或图的形式搜索,从根节点开始,逐层扩展搜索范围,直到找到目标节点。
-深度优先搜索(DFS):以树或图的形式搜索,从根节点开始,逐个访问节点的所有邻居节点,直到找到目标节点或搜索完所有节点。
3.数据结构-数组(Array):一组按顺序存储的相同类型元素的集合,通过索引访问元素,可以快速访问元素,但插入和删除元素较慢。
-链表(Linked List):一组通过指针连接的节点存储的元素的集合,支持灵活的插入和删除操作,但访问元素较慢。
-栈(Stack):一种特殊的线性数据结构,遵循先进后出(LIFO)原则,只能在栈顶进行插入和删除操作。
-队列(Queue):一种特殊的线性数据结构,遵循先进先出(FIFO)原则,在队尾插入元素,队头删除元素。
-堆(Heap):一种特殊的树形数据结构,可以快速找到最小(或最大)元素,常用于实现优先队列。
java实现九宫图:要求如下:要求是横排,竖排,还有大九宫格中的9个《小九宫格》都是1-9各不相同。
如图,图上已经给了几个数了。
没有循环输出的程序如下:import java.util.Scanner;class jiugongjiuge{public static void main(String[] args){int[][] g = new int[9][9];boolean[][] bol = new boolean[9][10];//判断随机数是不是位0的数组for(int i=0; i<9; i++){int k=0;for(int j=1;j<10;j++){bol[i][j]=false; //第0个往后的都是0bol[i][0]=true; //第0个是1}for (int j = 0; j < 9; )double a = Math.random() * 10;a = Math.ceil(a);int randomNum = new Double(a).intValue()%10;//随机产生的数字除以10取余数if(bol[i][randomNum])//判断产生的随机数不是0continue; //跳出这次的循环进行下次循环g[i][k]=randomNum;k++;bol[i][randomNum]= true;j++;}flag:for(int n=0; n<i;n++){for(int m=0; m<9;m++){while(g[i][m]==g[n][m]){i--;break flag;}}}while(i==8){int sum=0;sum=g[0][0]+g[0][1]+g[0][2]+g[1][0]+g[1][1]+g[1][2]+g[2][0]+g[2][1]+g[2][2];while(sum!=45){i=0;}}}for (int i=0; i<9; i++){{for(int k=0; k<9; k++){System.out.print(g[i][k]+"\t");}System.out.println();}}}可以看到错误结果的程序:import java.util.Scanner;class jiugongjiuge{public static void main(String[] args){int[][] g = new int[9][9];boolean[][] bol = new boolean[9][10];//判断随机数是不是位0的数组for(int i=0; i<9; i++){int k=0;for(int j=1;j<10;j++){bol[i][j]=false; //第0个往后的都是0bol[i][0]=true; //第0个是1}for (int j = 0; j < 9; ){double a = Math.random() * 10;a = Math.ceil(a);int randomNum = new Double(a).intValue()%10;//随机产生的数字除以10取余数if(bol[i][randomNum])//判断产生的随机数不是0continue; //跳出这次的循环进行下次循环g[i][k]=randomNum;k++;bol[i][randomNum]= true;j++;}flag:for(int n=0; n<i;n++){for(int m=0; m<9;m++)while(g[i][m]==g[n][m]){i--;break flag;}}}while(i==8){flag0:for(int m=0; m<3; m++){for(int n=0; n<3; n++){for(int l=0; l<3; l++){int sum2=0;int sum1=0;for(int k1=0; k1<3; k1++){sum1+=g[3*m+k1][3*n+l];}sum2+=sum1;if(sum2!=45){i=-1;System.out.println("此次产生的数组有错!");for (int i1=0; i1<9; i1++){for(int k2=0; k2<9; k2++){System.out.print(g[i1][k2]+"\t");}System.out.println();}break flag0;}else{System.out.println("此次产生的数组正确!");for (int i1=0; i1<9; i1++){for(int k2=0; k2<9; k2++){System.out.print(g[i1][k2]+"\t");}System.out.println();}}}}}}}}}求解数独所有解(适合所有数独)的PASCAL程序var a:packed array[1..9,1..9] of longint;i,j,k,p,l,m,n,ii,ans,mm,oo:longint;s,s1:packed array[0..100,1..4] of longint;x,y,xy:packed array[0..9,-1..9] of boolean; //横向,纵向,九宫的检验t,tt,u:boolean;opo:longint;ll:packed array[0..9,0..9,-1..11] of longint; //存储每个空格可能出现的数字提高程序效率function max(a,b:longint):longint;beginif b>a then exit(b)else exit(a);end;function choose2(x:longint):longint;begincase x of0..3:exit(1);4..6:exit(2);7..9:exit(3);end;function iff:boolean; //搜索结束条件beginif (k<1) then exit(false)else exit(true);end;function pa(i,j:longint):longint; //得到九宫格编号var o,kk,jj,ii:longint;begino:=choose2(i);kk:=choose2(j);case o of1:jj:=0;2:jj:=3;3:jj:=6;end;exit(jj+kk);end;beginfillchar(x,sizeof(x),true);fillchar(y,sizeof(y),true);fillchar(xy,sizeof(xy),true);for i:=1 to 9 dofor j:=1 to 9 dobeginread(ii);a[i,j]:=ii;if ii=0 then begininc(n);s1[n,1]:=j;s1[n,2]:=i;endelse beginx[i,ii]:=false;y[j,ii]:=false;xy[pa(i,j),ii]:=false;end;for i:=1 to 9 dofor j:=1 to 9 dobeginfor oo:=1 to 9 doif x[i,oo]and y[j,oo] and xy[pa(i,j),oo] thenbegininc(ll[i,j,-1]);ll[i,j,ll[i,j,-1]]:=oo;end;end;for i:=1 to n dos[i]:=s1[n-i+1];k:=1; i:=0;t:=true;tt:=false;whileiff dobeginif t thenbeginfor i:=ll[s[k,2],s[k,1],-1] downto 0 doif (x[s[k,2],ll[s[k,2],s[k,1],i]]andy[s[k,1],ll[s[k,2],s[k,1],i]]) andxy[pa(s[k,2],s[k,1]),ll[s[k,2],s[k,1],i]] then begint:=true;break;end;endelse begin i:=s[k,4]; tt:=false;repeatdec(i);until ((x[s[k,2],ll[s[k,2],s[k,1],i]]andy[s[k,1],ll[s[k,2],s[k,1],i]]) andxy[pa(s[k,2],s[k,1]),ll[s[k,2],s[k,1],i]])or (i<1);end;if i<1 then begin s[k,3]:=0; a[s[k,2],s[k,1]]:=0;dec(k); t:=false;i:=s[k,3];x[s[k,2],i]:=true;y[s[k,1],i]:=true;//向上回溯xy[pa(s[k,2],s[k,1]),i]:=true;endelse t:=true;if t thenbegins[k,4]:=i;s[k,3]:=ll[s[k,2],s[k,1],i];a[s[k,2],s[k,1]]:=s[k,3];x[s[k,2],s[k,3]]:=false;y[s[k,1],s[k,3]]:=false;xy[pa(s[k,2],s[k,1]),s[k,3]]:=false;inc(k);end;tt:=false;if k>n thenbegininc(opo);writeln(opo); // 计数器for i:=1 to 9 dobeginfor j:=1 to 9 dowrite(a[i,j],' ');writeln;end;writeln;mm:=0;x[s[k-1,2],s[k-1,3]]:=true;y[s[k-1,1],s[k-1,3]]:=true;xy[pa(s[k-1,2],s[k-1,1]),s[k-1,3]]:=true;dec(k);t:=false;end;end;writeln(opo);end.求解数独的简单C语言程序(适合仅有唯一解的数独)/*数独求解*/ #include <stdio.h>void print(int a[9][9]) /*格式化输出数独*/{int i,j;for(i=0;i<9;i++){for(j=0;j<9;j++)printf("%d ",a[i][j]);printf("\n");}}void ini_logo(int logo[10][9][9],int arr[9][9]) /*初始化标志数组*/{int i,j,k,p,r,s,t;for(i=0;i<9;++i)for(j=0;j<9;++j)if(arr[i][j]!=0)for(k=1;k<=9;++k)logo[k][i][j]=1;for(i=0;i<9;++i)for(j=0;j<9;++j)if(arr[i][j]!=0){p=arr[i][j];for(r=0;r<9;++r){logo[p][i][r]=1;logo[p][r][j]=1;}for(s=(i/3)*3;s<(i/3)*3+3;++s)for(t=(j/3)*3;t<(j/3)*3+3;++t)logo[p][s][t]=1;}}int add(int arr[9][9],int logo[10][9][9],int m,int n,int k) /*arr[m][n]插入数字,修改arr,logo数组*/{int i,s,p,t;arr[m][n]=k;for(p=1;p<=9;++p)logo[p][m][n]=1;for(i=0;i<9;++i){logo[k][m][i]=1;logo[k][i][n]=1;}for(s=(m/3)*3;s<(m/3)*3+3;++s)for(t=(n/3)*3;t<(n/3)*3+3;++t)logo[k][s][t]=1;}int check(int logo[10][9][9],int arr[9][9]) /*检测行列和小九宫格*/{int i,j,k,p,q,r,s,t,m,n,tag=0; /*tag标志本轮是否修改*/for(k=1;k<=9;++k){for(i=0;i<9;++i){p=0;q=0;for(j=0;j<9;++j){if(logo[k][i][j]==0){r=j;p++;} /*检测行*/if(logo[k][j][i]==0){s=j;q++;} /*检测列*/}if(p==1){tag=1;add(arr,logo,i,r,k);}if(q==1){tag=1;add(arr,logo,s,i,k);} /*满足一个添加的条件,修改arr,logo数组和标志tag*/}for(i=0;i<9;i=i+3) /*检测小九宫格*/for(j=0;j<9;j=j+3){t=0;for(m=i;m<i+3;++m)for(n=j;n<j+3;++n)if(logo[k][m][n]==0){q=m;s=n;t++;}if(t==1){tag=1;add(arr,logo,q,s,k);}}}return(tag);}main(){int arr[9][9]={0,0,0,0,0,0,0,0,0, /*数独初始化,其中0表示数字未给出*/0,2,3,0,0,0,7,8,0,1,0,0,4,0,6,0,0,9,4,0,0,0,5,0,0,0,1,9,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,9,0,0,0,5,0,0,0,8,0,0,0,0,0,3,0,1,0,0,0,0,0,0,0,9,0,0,0,0logo[10][9][9]={0},i,j;ini_logo(logo,arr);while(check(logo,arr)==1) /*当一轮没有检测出,即结束*/{}print(arr);}================================================================ =================Java解法(循环递归法):private boolean counting(int row, int col){// Fill the number as 1 to 9for (int num = 1; num < 10; num++){if (isLegal(row, col, num)){// Check whether the number is legal matrix[row][col] = num;int nextRow = (row + 1 > 8) ? 0 : (row + 1);int nextCol = (col + 1 > 8) ? 0 : (col + 1);if (nextCol != 0) {// Not last columnif (counting(row, nextCol))return true;} else if (nextRow != 0) {// Last columnif (counting(nextRow, nextCol))return true;} else {// Last cellreturn true;}// Get false with the current selection, clear it and go on matrix[row][col] = 0;}}// From 1 to 9, no number is legal, return falsereturn false;}上面只列出了主函数,如果要调用,还需要初始化matrix二维数组,然后写以下语句:if (counting(0, 0) == true)//有解//无解。
java经典编程题目
以下是一些经典的Java编程题目,这些题目可以帮助你提高编程技巧和解决问题的能力:
1.反转字符串:编写一个Java方法,将给定的字符串反转。
2.斐波那契数列:编写一个Java方法,计算并返回斐波那契数列的第n项。
3.查找最大和最小元素:编写一个Java方法,在一个整数数组中查找最大和最小元素。
4.反转数组:编写一个Java方法,将给定的整数数组反转。
5.判断回文:编写一个Java方法,判断给定的字符串是否是回文。
6.计算阶乘:编写一个Java方法,计算给定整数的阶乘。
7.冒泡排序:编写一个Java方法,对给定的整数数组进行冒泡排序。
8.二分查找:编写一个Java方法,在已排序的整数数组中查找指定的元素。
9.合并两个有序数组:编写一个Java方法,将两个已排序的整数数组合并为一个新的已排序数组。
10.实现二叉树:编写一个Java类,实现二叉树数据结构,并实现插入、查找和删除节点的方法。
这些题目可以帮助你掌握Java编程的基础知识和技能,提高你的编程能力和解决问题的能力。
java面试题经典算法经典算法在Java面试中经常被问及,因为它们可以展示面试者对基本数据结构和算法的理解程度。
以下是一些经典算法,我会逐个介绍它们。
1. 冒泡排序(Bubble Sort),这是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
时间复杂度为O(n^2)。
2. 快速排序(Quick Sort),快速排序使用分治法策略来把一个序列分为两个子序列。
它是一种分而治之的算法,时间复杂度为O(nlogn)。
3. 二分查找(Binary Search),二分查找是一种在有序数组中查找某一特定元素的搜索算法。
时间复杂度为O(logn)。
4. 递归算法(Recursion),递归是指在函数的定义中使用函数自身的方法。
递归算法通常用于解决可以被分解为相同问题的子问题的情况。
5. 动态规划(Dynamic Programming),动态规划是一种在数学、计算机科学和经济学中使用的一种方法。
它将问题分解为相互重叠的子问题,通过解决子问题的方式来解决原始问题。
6. 深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search),这两种搜索算法通常用于图的遍历和搜索。
深度优先搜索使用栈来实现,而广度优先搜索则使用队列来实现。
以上是一些常见的经典算法,当然还有很多其他的算法,如贪心算法、Dijkstra算法、KMP算法等等。
在面试中,除了了解这些算法的原理和实现方式之外,还需要能够分析算法的时间复杂度、空间复杂度以及适用场景等方面的知识。
希望这些信息能够帮助你在Java面试中更好地准备算法相关的问题。
Java实现九九乘法表(三种⽅法实现)Java实现九九乘法表(三种⽅法实现)题⽬要求:/*输出以下九九乘法表1 * 1 = 12 * 1 = 2 2 * 2 = 4......*/代码实现⼀(使⽤两层for循环——最常⽤):public class NineNineTable1 {public static void main(String[] args) {for (int i = 1; i <= 9; i++) { //总共9⾏for (int j = 1; j <= i ; j++) { //第 i ⾏有 j 列System.out.print(i + "*" + j + "=" + (i*j) + "\t"); // \t 制表符}System.out.println(); //每⼀⾏输出结束后换⾏}}}运⾏结果:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81代码实现⼆(使⽤⼀层for循环):public class NineNineTable2 {public static void main(String[] args) {for (int i = 1, j = 1; i <= 9; j++) { //i为⾏,j为列,总共9⾏System.out.print(i + "*" + j + "=" + (i*j) + "\t");if(i == j){i++;j = 0; //将 j 重置于 0,保证每换⼀⾏后 j 从 1 开始System.out.println();}}}}运⾏结果:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81代码实现三(使⽤while循环):public class NineNineTable3 {public static void main(String[] args) {int i = 1, j = 1;while (i <= 9) {System.out.print(i + "*" + j + "=" + (i * j) + "\t");if (i == j) {i++;j = 1; //将 j 重置于 1,保证每换⼀⾏后 j 从 1 开始System.out.println();continue;}j++;}}}运⾏结果:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81。
在Java中,你可以使用内置的数学函数和运算符来执行各种数学操作。
以下是一些常见的数学操作示例:1. 基本算术运算:```javaint a = 10;int b = 20;int sum = a + b; // 加法int difference = a - b; // 减法int product = a * b; // 乘法int quotient = b / a; // 除法int remainder = b % a; // 取模(求余)```2. 指数和对数:```javadouble base = 2.0;double exponent = 3.0;double result = Math.pow(base, exponent); // 计算幂次方double logarithm = Math.log(base); // 计算自然对数```3. 三角函数:```javadouble angleInDegrees = 45.0;double sineValue = Math.sin(Math.toRadians(angleInDegrees)); // 计算正弦值double cosineValue = Math.cos(Math.toRadians(angleInDegrees)); // 计算余弦值double tangentValue = Math.tan(Math.toRadians(angleInDegrees)); // 计算正切值```4. 绝对值和取整:```javadouble number = -15.5;double absValue = Math.abs(number); // 计算绝对值double roundValue = Math.round(number); // 四舍五入取整double ceilValue = Math.ceil(number); // 向上取整double floorValue = Math.floor(number); // 向下取整```5. 随机数:```javadouble randomValue = Math.random(); // 生成一个 [0,1) 范围内的随机数```这些只是Java 中数学操作的一小部分示例,Java 还提供了许多其他数学函数和工具类,可以满足各种复杂的数学计算需求。
Java算法Java部分1.求两个数的最大公约数解答:欧几理德原理:辗转相除法public static int zdgys(int a,int b){int x = a%b;if(x==0) return b;else return zdgys(b,x);}关于java垃圾回收器的认识解答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。
通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。
当GC 确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
可以。
程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
请问如何设计一个类,使其只能被初始化为一个实例。
解答:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
附件:package parent.career.blest;class Singleton {private Singleton(){}//在外部用new关键字会报错,只供内部使用//注意这是private 只供内部调用private static Singleton instance = new Singleton();//这里提供了一个供外部访问本class的静态方法,可以直接访问public static Singleton getInstance() {return instance;}public void say(String str){System.out.println(str);} }class commonClass{public commonClass(){System.out.println("这是一个普通类");}}public class mySingleton{public static void main(String args[]){Singleton sl = Singleton.getInstance();Singleton sl2 = Singleton.getInstance();sl.say("hello,world!");sl2.say("hello,world again!");System.out.println(sl==sl2);//输出true,说明sl,sl2指向同一个实例commonClass cC = new commonClass();commonClass cC2 = new commonClass();System.out.println(cC==cC2);//输出false,说明cC,cC2分别指向不同的实例}}4.有一个1001个元素的数组a[n],每个元素都在1到1000这些整数中取值,其中有一个数值重复了,现在要设计一个算法找出这个数字,且每个元素只能被访问一次。