gpt4 book ai didi

java - Java 中递归的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 06:07:48 24 4
gpt4 key购买 nike

我正在学习Java。这是我的简单 java 测试。

import java.io.Console;
import java.util.regex.Pattern;


public class Pendu {

private static final int MAX_ERRORS_ALLOWED = 10;
private static final int MAX_WORDL_LENGHT = 10;

public static void main(String[] args) {
String motSaisi = Pendu.readMot();
System.out.println("Le mot saisi est "+motSaisi);
}

public static boolean hasSpecialChar (String s) {
Pattern p = Pattern.compile("[^a-zA-Z]");
return (p.matcher(s).find());
}

public static String readMot(){
char[] ChaineSaisi = System.console().readPassword("Joueur 1 : Veuillez saisir un mot sans chiffres ni lettres accentuées: ");
String text = String.copyValueOf(ChaineSaisi);
System.out.println("mot a testé "+text);

if(Pendu.hasSpecialChar(text)) {
Pendu.readMot();
}
System.out.println("mot correct "+text);
return text;
}
}

这样做的目的是输入一个只有字符(a-Z A-Z)的单词,并且只有这个。当我使用如下示例运行时:

 Joueur 1 : Veuillez saisir un mot sans chiffres ni lettres accentu?es: 
mot a test? )))
Joueur 1 : Veuillez saisir un mot sans chiffres ni lettres accentu?es:
mot a test? """
Joueur 1 : Veuillez saisir un mot sans chiffres ni lettres accentu?es:
mot a test? po
mot correct po
mot correct """
mot correct )))
Le mot saisi est )))

“)))”(这不是我写的最后一个单词,最后一个是“po”)。为什么会发生这种情况?

最佳答案

本地变量 ChaineSaisitext 对于每次调用 readMot 都是本地的。也就是说,每次调用 readMot 并初始化这些变量时,您实际上都会获得这些变量的新实例。

要执行您想要的操作,您需要将 text 值设置为内部调用 readMot 返回的值。如果将 if 分支内部行更改为

text = Pendu.readMot();

那么您的程序应该执行您想要的操作,因为您将把每个 text 变量设置为稍后调用 readMot 时得到的值。

关于java - Java 中递归的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22132867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com