Java—— 五道算法水题
第一题
需求:
包装类:键盘录入一些1~100之间的整数,并添加到集合中。直到集合中所有数据和超过200为止
代码实现:
import java.util.ArrayList;
import java.util.Scanner;public class Test1 {public static void main(String[] args) {//键盘录入一些1~100之间的整数,并添加到集合中。//直到集合中所有数据和超过200为止//定义集合ArrayList<Integer> list = new ArrayList<>();//键盘录入Scanner sc = new Scanner(System.in);while (true) {String numStr = sc.nextLine();int num = Integer.parseInt(numStr);if (num < 1 || num > 100) {System.out.println("输入数字范围有误,请重新输入");continue;}list.add(num);//调用方法计算集合中所有数据和int sum = getSum(list);if (sum > 200) {break;}}for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");}}//定义方法计算集合中所有数据和private static int getSum(ArrayList<Integer> list) {int sum = 0;for (int i = 0; i < list.size(); i++) {int num = list.get(i);sum = sum + num;}return sum;}
}
第二题
需求:
自己实现parselnt方法的效果,将字符串形式的数据转成整数。
要求:
字符串中只能是数字不能有其他字符
最少一位,最多10位
0不能开头
代码实现:
import java.util.Scanner;public class Test2 {public static void main(String[] args) {//自己实现parselnt方法的效果,将字符串形式的数据转成整数。//要求://字符串中只能是数字不能有其他字符//最少一位,最多10位//0不能开头Scanner sc = new Scanner(System.in);String regex = "[1-9]\\d{0,9}";String str;while (true) {System.out.println("请输入字符串");str = sc.nextLine();//1234boolean flag = str.matches(regex);if (flag) {break;}System.out.println("字符串不符合要求");}int result = 0;for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);int num = c - '0';result = result * 10 + num;}System.out.println(result);//1234System.out.println(result + 1);//1235}
}
第三题
需求:
定义一个方法实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制
除基取余法:
不断的除以基数(几进制,基数就是几)得到余数,
直到商为0,再将余数倒着拼起来即可。
代码实现:
public class Test3 {public static void main(String[] args) {//定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制//除基取余法//不断的除以基数(几进制,基数就是几)得到余数,//直到商为0,再将余数倒着拼起来即可。//自定义方法System.out.println(toBinaryString(123));//1111011//Integer中的方法System.out.println(Integer.toBinaryString(123));//1111011}public static String toBinaryString(int num) {//定义StringBuilder便于拼接StringBuilder sb = new StringBuilder();while (num != 0) {//得到余数int result = num % 2;//将余数倒着拼起来相当于每一个数都拼在前面sb.insert(0, result);//除以基数num = num / 2;}return sb.toString();}
}
第四题
需求:
请使用代码计算你出生到现在经历多少天,用JDK7和JDK8两种方式完成
代码实现:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Date;public class Test4 {public static void main(String[] args) throws ParseException {//请使用代码计算你出生到现在经历多少天,用JDK7和JDK8两种方式完成//JDK7//利用字符串定义出生的日期String birthStr = "2000-3-5";//解析为日期对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date birth = sdf.parse(birthStr);//或得毫秒值long birthTime = birth.getTime();//获得现在时间Date now = new Date();long nowTime = now.getTime();//相减long time = nowTime - birthTime;System.out.println(time / 1000 / 60 / 60 / 24);//9183//JDK8//利用工具类ChronoUnit//获得现在时间LocalDate ld1 = LocalDate.now();//获得出生的时间LocalDate ld2 = LocalDate.of(2000, 3, 5);long result = ChronoUnit.DAYS.between(ld2, ld1);System.out.println(result);//9183}
}
第五题
需求:
判断任意的一个年份是闰年还是平年
要求:用JDK7和JDK8两种方式判断
提示:二月有29天是闰年
代码实现:
import java.time.LocalDate;
import java.util.Calendar;public class Test5 {public static void main(String[] args) {//判断任意的一个年份是闰年还是平年//要求:用JDK7和JDK8两种方式判断//提示://二月有29天是闰年//思路://让3月1日减一天,看是否是29号//JDK7Calendar c = Calendar.getInstance();//设置时间为某年3月1日/*c.set(Calendar.YEAR,2000);c.set(Calendar.MONTH,2);//Calendar月份的范围为0-11c.set(Calendar.DAY_OF_MONTH,1);*/c.set(2000, 2, 1);//将其减1天c.add(Calendar.DAY_OF_MONTH, -1);//判断是否是29号int day = c.get(Calendar.DAY_OF_MONTH);if (day == 29) {System.out.println(c.get(Calendar.YEAR) + "是闰年");//2000是闰年}//JDK8//设置时间为某年3月1日LocalDate ld1 = LocalDate.of(2000, 3, 1);//LocalDate月份的范围为1-12//将其减1天LocalDate ld2 = ld1.minusDays(1);//判断是否是29号int dayOfMonth = ld2.getDayOfMonth();if (dayOfMonth == 29) {System.out.println(ld2.getYear() + "是闰年");//2000是闰年}//JDK8有判断是否是闰年的方法//true:是闰年,false:不是闰年boolean flag = ld1.isLeapYear();if (flag) {System.out.println(ld1.getYear() + "是闰年");//2000是闰年}}
}