我有这个我想要返回的字符串,但我不能,因为它说“print”无法解析为变量。这是我的代码:
public static String enrcyptText(String str, int shift){
int count = 0;
String[] parts = str.split("[\\W]");
for(String word : parts){
shift = shift * (count + 1) + 1;
count++;
encryptWord(word, shift);
String[] phrase = new String[]{word};
String print = String.join(" ", phrase);
}
return print;
}
任何想法?
答案 0 :(得分:2)
那里有几个问题。
您已在循环体内声明print
仅。它并不存在于它之外。因此,您需要将String print
移到循环之外。
您还会在每次循环迭代时分配它,这将覆盖它以前的值。目前还不清楚你想做什么,但你不想这样做。
这两行也没有任何意义:
String[] phrase = new String[]{word};
String print = String.join(" ", phrase);
由于phrase
中只有一个条目,因此print
的{{1}}具有相同的值word
。
您似乎期望encryptWord
可以修改传递给它的字符串。它不能。
抓住它,我认为你的目标是加密"来自句子的单个单词,然后将结果重新组合成以空格分隔的一组加密单词。如果是,请参阅评论:
public static String enrcyptText(String str, int shift){
int count = 0;
String[] parts = str.split("[\\W]");
// For updating the array, better to use the classic
// for loop instead of the enhanced for loop
for (int i = 0; i < parts.length; ++i){
shift = shift * (count + 1) + 1;
count++; // Could do this before previous line and remove the + 1 in (count + 1)
parts[i] = encryptWord(parts[i], shift); // See note below
}
return String.join(" ", parts);
}
请注意,我使用encryptWord
的返回值。这是因为Java中的字符串不可变(无法更改),因此encryptWord
无法改变我们传入的内容;它只能给我们一个新的字符串来代替。
答案 1 :(得分:0)
print
变量在大括号内有范围。你应该将print
变量移到大括号外面以使其对代码可见。同时,因为它是一个局部变量,所以应该用一个局部变量初始化print。默认值(在我的情况下,它是null)。编译器会抱怨打印保持未初始化(虽然这与主要问题无关)
public static String enrcyptText(String str, int shift){
int count = 0;
String[] parts = str.split("[\\W]");
String print = null;
for(String word : parts){
shift = shift * (count + 1) + 1;
count++;
encryptWord(word, shift);
String[] phrase = new String[]{word};
print = String.join(" ", phrase);
}
return print;
}
答案 2 :(得分:0)
您的代码中存在逻辑错误:您正在正确加密每个单词,但您没有正确构建加密短语。在循环的每次迭代中,当您应该将元素添加到phrase
数组时,您将重新创建该短语。
public static String enrcyptText(String str, int shift) {
int count = 0;
String[] parts = str.split("[\\W]");
String[] phrase = new String[parts.length]; // initialising an array containing each encrypted word
for (String word : parts) {
shift = shift * (count + 1) + 1;
count++;
String encryptedWord = encryptWord(word, shift);
phrase[count - 1] = encryptedWord; // updating the encrypted phrase array
}
return String.join(" ", phrase); // joining the phrase array
}
在这段代码中,我们在循环之前创建一个phrase
数组。在每次迭代中,我们使用加密的单词更新此数组。当我们拥有所有加密的单词时,循环终止,我们将所有部分连接在一起。
我也猜测encryptedWord
实际上返回了加密的单词。此方法无法修改作为参数给出的单词。