import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String num=sc.next();
for(int i=0;i<num.length();i++) {
char nu=num.charAt(i);
nu=(char)((nu-'a'+n)%26+'a');
System.out.print(nu);
}
}
}
下面是另一种代码,
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取移动位数
int n = scanner.nextInt();
// 读取原文字符串
String original = scanner.next();
// 初始化密码字符串
StringBuilder password = new StringBuilder();
// 遍历原文字符串中的每个字符
for (int i = 0; i < original.length(); i++) {
char ch = original.charAt(i);
// 根据移动位数计算新字符
char newChar = (char) ((ch - 'a' + n) % 26 + 'a';
// 将新字符添加到密码字符串中
password.append(newChar);
}
// 输出密码
System.out.println(password.toString());
// 关闭Scanner
scanner.close();
}
}
分别解释 StringBuilder
、original.charAt(i)
和 (char) ((ch - 'a' + n) % 26 + 'a')
这三个表达式。
- StringBuilder
StringBuilder
是 Java 中的一个类,用于构建可变字符序列。它是 String
的一个可变版本,非常适合在需要频繁修改字符串的场景中使用。使用 StringBuilder
可以避免在每次修改字符串时都创建新的 String
对象,从而提高性能。
一些常用的 StringBuilder
方法包括:
append()
: 追加内容到StringBuilder
。insert()
: 在指定位置插入内容。delete()
: 删除指定位置的字符。replace()
: 替换指定位置的字符。toString()
: 将StringBuilder
转换为String
。
例如:
java复制代码
StringBuilder sb = new StringBuilder("Hello"); | |
sb.append(" World!"); | |
System.out.println(sb.toString()); // 输出 "Hello World!" |
- original.charAt(i)
这是一个从字符串 original
中获取指定位置 i
的字符的方法。charAt()
方法接受一个索引 i
(从 0 开始),并返回该索引处的字符。
例如:
java复制代码
String original = "abcdef"; | |
char ch = original.charAt(2); // ch 的值为 'c' |
- (char) ((ch - 'a' + n) % 26 + 'a')
这是一个计算新字符的表达式,通常用于实现 Caesar cipher(凯撒密码)或其他类似的字符替换算法。这里的 ch
是一个字符,n
是一个整数,表示移动的位数。
ch - 'a'
: 将字符ch
转换为从 0 开始的数字。例如,如果ch
是 'a',则结果为 0;如果ch
是 'b',则结果为 1,以此类推。ch - 'a' + n
: 将ch
对应的数字加上n
,表示将字符向前移动n
位。(ch - 'a' + n) % 26
: 使用模运算确保结果始终在 0 到 25 之间,从而确保字符不会超出小写字母的范围。(ch - 'a' + n) % 26 + 'a'
: 将数字转换回字符。如果结果为 0,则得到 'a';如果结果为 1,则得到 'b',以此类推。
例如,如果 ch
是 'a' 且 n
是 3,那么这个表达式将返回 'd'。
希望这可以帮助你理解这三个表达式!如果你有任何其他问题或需要进一步的解释,请告诉我。