我正在接收输入的消息,将每个字母的Unicode值加2,然后将其打印出来,我在单词之间的空格方面遇到了麻烦。如果这个短语是芝士披萨,它将打印出“ejggj”,然后停在该空间。我该如何解决这个问题?
package exercises;
import java.util.Scanner;
public class Ex10 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Ask for message
System.out.println("Enter a string: ");
String message = scanner.next();
char[] array = message.toCharArray();
//Encode message
for(int i = 0; i < array.length; i++)
{
char letter;
letter = array[i];
if (array[i] =='y')
{
array[i] = 'a';
}
else if (array[i] == 'z')
{
array[i] = 'b';
}
else if (array[i] == letter)
{
letter += 2;
array[i] = letter;
}
else
{
letter = ' ';
}
}
//Give back encoded message
System.out.print("Encoded message: ");
System.out.println(array);
}//main
}//class
答案 0 :(得分:1)
Mohsen_Fatemi部分错误。在这个问题的范围内,他完全错了。
关于你遗失的部分句子的问题不是来自你的循环及其中的条件,而是来自你使用扫描仪。
scan.next()方法将读取,直到遇到空格,无论是空格,制表符还是新行。你需要使用nextLine()来获得完整的输入。
Mohsen_Fatemi对你的算法是正确的。但这个问题与此无关。不要忽视他的意见。
答案 1 :(得分:0)
以这种方式更改你的代码,当你在String中有空格时你想要转义,所以当我们看到空格字符时,我已经添加了条件for(int i = 0; i < array.length; i++) {
if (array[i] =='y'){
array[i] = 'a';
}else if (array[i] == 'z'){
array[i] = 'b';
}else{
if(array[i]==' ') continue;
array[i] += 2;
}
}
我们跳过这一轮循环并转到下一次迭代
String nextLine = fileIn.nextLine();
arrayList.addAll(nextLine.split(","));//I use comma here, since I assume you will be separating your list with commas