Integer[]arr=Arrays.stream(sc.nextLine().split(" ")) .map( p->{ int num=Integer.parseInt(p.substring(0,p.length()-1)); String unit=p.substring(p.length()-1); return "Y".equals(unit)?num:num*7; }) .toArray(Integer[]::new);
时间: 2024-02-14 10:35:27 浏览: 68
这段代码可以将输入的以空格分隔的字符串转换成整型数组,其中每个元素都是以 "Y" 或 "W" 结尾的数字。"Y" 表示年,"W" 表示周,将所有以 "W" 结尾的数字转换成以 "Y" 为单位的数字,即将周数乘以 7。
具体的实现方法是,先使用 `split(" ")` 方法将输入字符串按空格分隔成一个字符串数组,然后使用 `Arrays.stream()` 方法将该字符串数组转换成一个流。接着使用 `map()` 方法将流中的每个字符串元素转换成一个整型数字,这里使用了 lambda 表达式来处理每个字符串元素。在 lambda 表达式中,先使用 `substring(0, p.length() - 1)` 方法将字符串的最后一位去掉,然后使用 `substring(p.length() - 1)` 方法获取字符串的最后一位,也就是表示时间单位的字符。如果时间单位是 "Y",则直接返回数字;否则将数字乘以 7 后返回。最后使用 `toArray(Integer[]::new)` 方法将流中的结果转换成一个整型数组并返回。
相关问题
import java.util.Arrays; import java.util.Scanner; public class Main { // 输入获取 public static void main(String[] args) { Scanner sc = new Scanner(System.in); Integer[] arr = Arrays.stream(sc.nextLine().split(",")).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(arr)); } // 算法入口 public static int getResult(Integer[] arr) { int n = arr.length; int[] dp = new int[n]; for (int i = 0; i < n; i++) { if (i == 0) { dp[0] = Math.max(0, arr[0]); } else if (i < 3) { dp[i] = Math.max(0, dp[i - 1] + arr[i]); } else { dp[i] = Math.max(dp[i - 3], dp[i - 1] + arr[i]); } } return dp[n - 1]; } }为什么动态规划返回的是dp[n-1]
动态规划返回的是`dp[n-1]`是因为在这个算法中,`dp[i]`表示以第`i`个元素结尾的子数组的最大和。我们需要找到整个数组中的最大和子数组,因此最终的结果就是`dp[n-1]`,其中`n`是数组的长度。
在算法的循环中,我们计算了每个位置上的最大和子数组,并将其保存在`dp`数组中。最后,`dp[n-1]`就是整个数组的最大和子数组的和。
希望对你有所帮助!如果你还有其他问题,请随时提问。
package zifuchuan.caozuo; import java.util.Scanner; import java.util.TreeSet; public class ShuruZhengxingshuzuhepaixubiaoshi { public static void main(String[] args) { Scanner in = new Scanner(System.in); TreeSet<Integer> set = new TreeSet<>(); int count =Integer.parseInt(in.nextLine()); String[] arr = in.nextLine().split(" "); int flag = Integer.parseInt(in.nextLine()); System.out.println(flag); for (int i = 0; i < count; i++) { set.add(Integer.parseInt(arr[i] + "")); } Object[] arr1 = set.stream().sorted().toArray(); if (flag == 0) { for (int i = 0; i <= arr1.length - 1; i++) { if (i < arr1.length - 1) System.out.println(Integer.parseInt(arr1[i] + " ")); else System.out.println(Integer.parseInt(arr1[i] + "")); } }else if(flag == 1){ for (int i = arr1.length - 1; i >=0 ; i--) { if (i < arr1.length - 1) System.out.println(Integer.parseInt(arr1[i] + " ")); else System.out.println(Integer.parseInt(arr1[i] + "")); } } } } 哪里出了问题
在输出排序后的数组元素时,应该使用 System.out.print() 方法而不是 System.out.println() 方法,因为题目要求输出的元素之间用空格隔开,最后一个元素后不需要空格。修改代码如下:
```
if (flag == 0) {
for (int i = 0; i < arr1.length; i++) {
if (i < arr1.length - 1)
System.out.print(Integer.parseInt(arr1[i] + " ") + " ");
else
System.out.print(Integer.parseInt(arr1[i] + ""));
}
} else if (flag == 1) {
for (int i = arr1.length - 1; i >= 0; i--) {
if (i > 0)
System.out.print(Integer.parseInt(arr1[i] + " ") + " ");
else
System.out.print(Integer.parseInt(arr1[i] + ""));
}
}
```
阅读全文