如何打印字符串

时间:2015-10-03 16:11:44

标签: java string for-loop return

我有这个我想要返回的字符串,但我不能,因为它说“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;
    }

任何想法?

3 个答案:

答案 0 :(得分:2)

那里有几个问题。

  1. 您已在循环体内声明print。它并不存在于它之外。因此,您需要将String print 移到循环之外。

  2. 您还会在每次循环迭代时分配它,这将覆盖它以前的值。目前还不清楚你想做什么,但你不想这样做。

  3. 这两行也没有任何意义:

    String[] phrase = new String[]{word};
    String print = String.join(" ", phrase);
    

    由于phrase中只有一个条目,因此print的{​​{1}}具有相同的值word

  4. 您似乎期望encryptWord可以修改传递给它的字符串。它不能。

  5. 抓住它,我认为你的目标是加密"来自句子的单个单词,然后将结果重新组合成以空格分隔的一组加密单词。如果是,请参阅评论:

    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实际上返回了加密的单词。此方法无法修改作为参数给出的单词。