原题 [COCI2006-2007#2] ABC - 洛谷https://www.luogu.com.cn/problem/P4414
要完成这个问题,我们需要做两件事情:
-
读取并排序输入的三个整数,确保它们满足 (A < B < C) 的条件。
-
根据第二行输入的字母顺序重新排列并输出这三个数。
首先,让我们排序输入的三个数。在Java中,我们可以使用Arrays.sort()
方法来简化排序的过程。接着,我们根据输入的字母顺序输出排序后的数字。
这是如何在main
方法中实现的完整代码:
import java.util.*;
public class Main{
public static void main (String[] args){
Scanner sc = new Scanner(System.in);
int[] num = new int[3];
// 读取三个整数
for(int i = 0; i < 3; i++) {
num[i] = sc.nextInt();
}
sc.nextLine(); // 读取并丢弃行尾的换行符
// 读取字母顺序
String order = sc.nextLine();
// 排序整数
Arrays.sort(num);
// 创建一个用于存储排序后的数字的数组
int[] sorted = new int[3];
// 根据字母顺序重新排序数字
for(int i = 0; i < 3; i++) {
if(order.charAt(i) == 'A') {
sorted[i] = num[0];
} else if(order.charAt(i) == 'B') {
sorted[i] = num[1];
} else if(order.charAt(i) == 'C') {
sorted[i] = num[2];
}
}
// 输出结果
System.out.println(sorted[0] + " " + sorted[1] + " " + sorted[2]);
}
}
在这个代码中,我们首先读取三个整数并将它们排序,确保它们满足 (A < B < C) 的条件。然后,我们根据输入的字母顺序重新组织这三个数。注意,在读取整数后,我们调用sc.nextLine()
来读取并丢弃整数后的换行符,这样才能正确读取接下来的字母序列。
最后,根据字母顺序重新组织的数字通过一行输出,每个数字之间用空格隔开。
-
sc.nextLine();
这一行代码的作用是读取并丢弃输入流中的行尾换行符。在使用Scanner
类读取用户输入时,通常会遇到这样的情况:当你使用nextInt()
、nextDouble()
等方法读取完一个数字后,输入流中的换行符会留在缓冲区中,而不会被读取。如果接下来你又使用了nextLine()
方法来读取字符串,它会直接读取缓冲区中的换行符,导致你无法输入字符串,而直接跳到下一个输入。为了解决这个问题,可以在读取字符串之前使用nextLine()
方法来清除缓冲区中的换行符,使得接下来的输入可以正常进行。
-
charAt()
函数是用于获取字符串中指定位置的字符的方法。它接受一个整数参数,该参数表示要获取的字符在字符串中的索引位置,索引从 0 开始。例如,对于字符串"hello"
,charAt(0)
将返回'h'
,charAt(1)
将返回'e'
,依此类推。如果指定的索引超出了字符串的长度范围,则会抛出StringIndexOutOfBoundsException
异常。