1. (程序题)
输入华氏温度f,计算并输出相应的摄氏温度c。c=5*(f-50)/9+10。
输入、输出数据说明:输入数据可以是整数也可以是小数;输出数据的结果保留两位小数。
输入:
17.2
输出:
The temprature is -8.22.
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);double f = input.nextDouble();double c = 5 * (f - 50) / 9 + 10;System.out.printf("The temperature is %.2f.", c);}
}
这时候肯定有同学对代码代码不够满意,这时我们对代码进行优化以提高代码的健壮性和用户体验。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);double f = 0;try {f = input.nextDouble();} catch (InputMismatchException e) {System.out.println("Invalid input. Please enter a number.");return;}double c = 5 * (f - 50) / 9 + 10;System.out.printf("The temprature is %.2f.",c);}
}
在上述代码中,我们增加了一个try-catch语句块,用于捕获输入不合法的情况,catch语句块是Java中的异常处理机制。在try语句块中编写可能出现异常的代码,当程序执行到这段代码时,如果出现异常,就会跳转到catch语句块中,执行catch语句块中的代码。
在上述代码中,try语句块中执行了input.nextDouble()方法,如果用户输入的不是一个数值类型的数据(例如字符串、字母等),这个方法就会抛出InputMismatchException异常。在catch语句块中,我们使用了InputMismatchException作为异常类型,当捕获到该异常时,就会执行catch语句块中的代码。
从键盘中输入两个年份,输出这两个年份之间的所有的闰年年份,每行数据输出四个年份。
输入顺序:小年份 大年份
提示:能被4整除且能不被100整除的年份,或者能被400整除的年份为闰年。
数据输出格式:每个数据后面都有一个空格;每行数据输出四个年份。
如:输入:2020 2050
输出:
2020 2024 2028 2032
2036 2040 2044 2048
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int startYear = input.nextInt();int endYear = input.nextInt();int count = 0;for(int i = startYear; i <= endYear; i++){if(i % 4 == 0&& i % 100 != 0 || i % 400 == 0){System.out.printf("%d ",i);count++;if(count % 4 == 0){System.out.println();}}}}
}
这时候肯定有同学对代码代码不够满意,这时我们对代码进行优化以提高代码的健壮性和用户体验。
import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int startYear = scanner.nextInt();int endYear = scanner.nextInt();int count = 0;for (int i = startYear; i <= endYear; i++) {if (isLeapYear(i)) {System.out.printf("%d ",i);count++;if (count == 4) {System.out.println();count = 0;}}}if (count != 0) {System.out.println();}}public static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;}
}
输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。
输出格式:数据输出在一行,且每个数据后面有一个空格。
import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int []a = new int[n];for(int i = 0; i < n; i++){a[i] = scanner.nextInt();}for(int i = 0; i < n; i++){for(int j = i + 1; j < n; j++){if(a[i] < a[j]){int temp = a[i];a[i] = a[j];a[j] = temp;}}}for(int g:a){System.out.printf("%d ",g);}}
}
这时候肯定有同学对代码代码不够满意,这时我们对代码进行优化以提高代码的健壮性和用户体验。
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();Integer[] numbers = new Integer[n];for (int i = 0; i < n; i++) {numbers[i] = scanner.nextInt();}Arrays.stream(numbers).sorted((a, b) -> b.compareTo(a)).forEach(num -> System.out.print(num + " "));}
}
使用了 Java 8 中的 Stream API,将 numbers 数组转换为一个 Stream,然后对其进行排序。这里使用了 Lambda 表达式 (a, b) -> b.compareTo(a),它定义了如何比较两个数字的大小关系。这里的意思是,将两个数字进行比较,如果第一个数字比第二个数字小,则返回一个负数,如果两个数字相等,则返回 0,如果第一个数字比第二个数字大,则返回一个正数。因此,通过这个 Lambda 表达式可以实现从大到小的排序。
最后,使用 forEach 方法将排序后的数字依次输出到控制台上。
求a+aa+aaa+aa…a
输入一个正整数repeat (0
输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。所有测试数据的计算结果都没有超出long类型的表数范围。
输入输出例子如下,注意括号内是说明。
输入
2 (repeat=2)
2 3 (a=2, n=3)
8 5 (a=8, n=5)
输出
246 (2+22+222)
98760 (8+88+888+8888+88888)
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int repeat = sc.nextInt();for (int i = 0; i < repeat; i++) {int a = sc.nextInt();int n = sc.nextInt();long sum = 0;long base = 1; for (int j = 1; j <= n; j++) {sum += base * a;base = base * 10 + 1;}System.out.println(sum);}}
}
以输入为1 8 5为例解释核心代码,程序会执行一次循环,计算数字和。具体地,循环变量j从1递增到5,每次循环会计算一项数字和并将其加到sum中。具体来说,循环执行的过程如下:
第一次循环:
j = 1,base = 1,sum = 0
计算当前项数字和:base * a = 1 * 8 = 8
将当前项数字和加到sum中:sum = 0 + 8 = 8
计算下一项数字和的基数:base = base * 10 + 1 = 11
第二次循环:
j = 2,base = 11,sum = 8
计算当前项数字和:base * a = 11 * 8 = 88
将当前项数字和加到sum中:sum = 8 + 88 = 96
计算下一项数字和的基数:base = base * 10 + 1 = 111
第三次循环:
j = 3,base = 111,sum = 96
计算当前项数字和:base * a = 111 * 8 = 888
将当前项数字和加到sum中:sum = 96 + 888 = 984
计算下一项数字和的基数:base = base * 10 + 1 = 1111
第四次循环:
j = 4,base = 1111,sum = 984
计算当前项数字和:base * a = 1111 * 8 = 8888
将当前项数字和加到sum中:sum = 984 + 8888 = 9872
计算下一项数字和的基数:base = base * 10 + 1 = 11111
第五次循环:
j = 5,base = 11111,sum = 9872
计算当前项数字和:base * a = 11111 * 8 = 88888
将当前项数字和加到sum中:sum = 9872 + 88888 = 98760
计算下一项数字和的基数:base = base * 10 + 1 = 111111
循环结束后,程序会将sum的值输出,即待求和的数字8的前5项数字和为98760。