您的位置:首页 > 职场人生

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;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: