JAVA企业面试题精选 Java基础 21-30
2017-07-12 13:16
791 查看
1.21.请写出求n!的算法
参考答案:
public class Factorial { public static void main(String[] args) { long n = 5; System.out.println(doFactorial(n)); } public static long doFactorial(long n) { if (n < 1) { System.out.printlin("ERROR"); return 0; } else if (n == 1 || n == 2){ return n; } else { return n * doFactorial(n - 1); } } }
1.22.排序都有哪几种方法?
参考答案:
排序的方法有:插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、归并排序、分配排序(箱排序、基数排序)。1.23.写一个排序算法,将10个1-100随机数字进行排序
参考答案:
选择排序法实现10个1-100随机数字的排序,代码如下所示:public class SelectSort { public static void main(String[] args) { // 定义一个数组 int[] num = new int[10]; for (int i = 0; i < num.length; i++) { num[i] = (int)(Math.random() * 100) + 1; } // 排序 selectionSort(num); for (int i = 0; i < num.length; i++) { System.out.print(num[i] + " "); } } // 选择排序方法 public static void SelectionSort(int[] number) { for (int i = 0; i < number.length - 1; i++) { int m = i; for (int j = i + 1; j < number.length; j++) { if (number[j] < number[m]) { m = j; } } if (i != m) { swap(number, i , m); } } } // 用于交换数组中的索引为i、j的元素 private static void swap(int[] number, int i, int j) { int t; t = number[i]; number[i] = number[j]; number[j] = t; } }
1.24.请用Java语言编写一个完成冒泡排序算法的程序
参考答案:
import java.util.Random; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { Random ran = new Random(); arr[i] = ran.nextInt(100); } System.out.println(Arrays.toString(arr)); // 冒泡排序 System.out.println("--------冒泡排序开始--------") for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j+1]) { int t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } System.out.println(Arrays.toString(arr)); } System.out.println("--------冒泡排序结束--------"); System.out.println(Arrays.toString(arr)); } }
1.25.有一数组a[1000]存放了1000个数,这1000个数取自1-999,且只有两个相同的数,剩下的998个数不同,写一个搜索算法找出相同的那个数的值?
参考答案:
import java.util.Arrays; public class SearchDemo { /** 被搜索数据的大小 */ private static final int size = 1000; public static void main(String[] args) { int[] data = new int[size]; // 添加测试数据 for (int k = 0; k < data.length; k++) { data[k] = k + 1; } data[999] = 567; result(data); } /** * 调用二分搜索算法的方法实现查找相同元素 * @param data */ public static void result(int data[]) { Arrays.sort(data); for (int i = 0; i < data.length; i++) { int target = data[i]; data[i] = 0; int result = binaryFind(data, target); if (result != -1) { System.out.println("相同元素为:" + data[result]); break; } } } /** * 二分搜索算法实现 * * @param data * 数据集合 * @param target * 搜索的数据 * @return 返回找到的数据的位置,返回-1表示没有找到 */ public static int binaryFind(int[] data, int target) { int start = 0; int end = data.length - 1); while (start <= end) { int middleIndex = (start + end) / 2; if (target == data[middleIndex]) { return middleIndex; } if (target >= data[middleIndex]) { start = middleIndex + 1; } else { end = middleIndex - 1; } } return -1; } }
1.26.现有一个32位的整型变量value和一个有32个元素的数组a[32],要求:1、对value随机赋值;2、让数组a
的值等于value”位n”的值,0<=n<=31。举例:如果value的”位0”(Bit0)=0,那么a[0]=0;如果value的”位10”(Bit10)=1,那么a[10]=1。
参考答案:
public class Foo { public static void main(String[] args) { // 产生随机数 int random = (int)(Math.random() * Integer.MAX_VALUE + 1); // 转成二进制字符串 String str = Integer.toBinaryString(random); // 转成二进制时最前面的零被省略,补上省略掉的0 if (str.length() < 32) { for (int j = 0; j <= 32 - str.length(); j++) { str = "0" + str; } } // 给数组赋值 int[] a = new int[32]; for (int i = 0; i < str.length(); i++) { a[i] = Integer.parseInt(String.valueOf(str.charAt(i))); System.out.println("a[" + i + "]=" + a[i]); } } }
1.27.有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用考虑实现自然数随机放入数组的过程。
参考答案:
public static void main(String[] args) { int[] b = new int[]{ ....存入98个随机的1~100的整数 }; int[] a = new int[100]; for (int t : b) { a[t-1] = t; } for (int t = 0; t < a.length; t++) { if (a[t] == 0) { System.out.println(t + 1); } } }
1.28.用1,2,2,3,4,5这六个数字,用Java写一个main函数,打印出所有不同的排列,如:512234,412345等,要求:”4”不能在第三位,”3”与”5”不能相连
参考答案:
import java.util.ArrayList; import java.util.List; public class Q028 { public static List<String> list = new ArrayList<String>(); public static void group(String str, String nstr) { if (str.length() != nstr.length()) { String rest = getRest(str, nstr); for (int i = 0; i < rest.length(); i++) { String temp = str + rest.substring(i, i + 1); if (temp.indexOf("4") != 2 && temp.indexOf("35") == -1 && temp.indexOf("53") == -1) { if (!list.contains(temp) && temp.length() == nstr.length()) { list.add(temp); } group(temp, nstr); } } } } public static String getRest(String str, String nstr) { String rest = ""; if (nstr.length() > str.length()) { rest = nstr; for (int i = 0; i < str.length(); i++) { // 注意此处的replaceFirst,而不是replaceAll rest = rest.replaceFirst(str.substring(i, i + 1),""); } } return rest; } public static void main(String[] args) { group("", "122345"); System.out.println(list.toString()); } }
1.29.编写一个命令行程序,提示让用户输入2个整数,然后计算这2歌整数之间能被5整除的所有整数的和,并打印显示
参考答案:
import java.util.Arrays; import java.util.Scanner; public class Q029 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int[] nums = new int[2]; System.out.println("请输入一个整数:"); nums[0] = scan.nextInt(); System.out.println("请输入第二个整数:"); nums[1] = scan.nextInt(); Arrays.sort(nums); int sum = 0; for (int begin = nums[0] + 1; begin < nums[1]; begin++) { if (begin % 5 == 0) { sum += begin; } } System.out.println(sum); } }
1.30.编写一个命令行程序,提示让用户输入用户名和密码。如果用户名和密码都是admin,则显示登录成功;如果不是则显示登录失败,让用户重新输入。如果用户连续3次认证失败,则锁定终止程序
参考答案:
import java.util.Scanner; public class Q030 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int count = 0; while (true) { System.out.println("请输入账号:"); String name = scan.nextLine(); System.out.println("请输入密码:"); String pwd = scan.nextLine(); if ("admin".equals(name) && "admin".equals(pwd)) { System.out.println("登录成功"); break; } else { count++; if (count < 3) { System.out.println("登录失败,请重新输入。"); } else { System.out.println("登录次数过多,认证失败"); break; } } } } }
相关文章推荐
- JAVA企业面试题精选 Web基础 21-30
- JAVA企业面试题精选 数据库21-30
- JAVA企业面试题精选 Servlet和JSP 21-30
- JAVA企业面试题精选 Java SE 21-30
- JAVA企业面试题精选 OOP 21-24
- JAVA企业面试题精选 Java基础 41-50
- JAVA企业面试题精选 Web基础 11-20
- JAVA企业面试题精选 Web基础 31-40
- JAVA企业面试题精选 Java基础 31-40
- JAVA企业面试题精选 Java基础 1-10
- JAVA企业面试题精选 Web基础 41-42
- Java面试题之Java基础部分 21-30题
- JAVA企业面试题精选 Web基础 1-10
- JAVA企业面试题精选 Java基础 11-20
- JAVA学习30_ Java常见面试题及答案 21-30(集合类)
- JAVA企业面试题精选 Java SE 81-90
- JAVA企业面试题精选 OOP 11-20
- JAVA企业面试题精选 Java SE 41-50
- JAVA企业面试题精选 Java SE 1-10
- JAVA企业面试题精选 数据库11-20