嵌套执行while循环,不执行外部循环

时间:2018-09-27 16:21:49

标签: java loops while-loop

我对Java还是很陌生,目前,我正在研究Vigenere密码解密/加密。 我已经使用已知的密钥进行了解密和加密,现在我唯一想做的就是字典攻击。为此,该算法从文本文件中获取一行,并将其用作解密消息的密钥,然后将解密后的消息用于字典,并再次将其与字典进行交叉引用(如果密钥产生了合法单词,它将使用该密钥解密消息的其余部分。)

public static String decoderNoKey(String msg, Scanner words) {
Scanner words2 = words;
while (words.hasNextLine()) {
  String dicStr = words.nextLine();
  String result = decoder(msg, dicStr);

  while (words2.hasNextLine()) {
    String meta = words2.nextLine();
    if(result.equalsIgnoreCase(meta)) {
      System.out.println("Found a matching message: " + result);
      System.out.println("This is the corresponding key: " + dicStr);
      return meta;
    }
  }
 }
  return "There was no matching word";
}

这是我的代码,decode();方法工作正常。如果我尝试输入合法密码,问题是外部的while循环仅执行一次(在print语句中发现)。 单词文件也很大,超过84000个单词。

1 个答案:

答案 0 :(得分:6)

words2不是words的副本。这是一个新名称,指的是同一个对象。因此,您的内循环耗尽了扫描仪的精力,外循环不再需要做任何事情。