微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果没有 println() 语句,Java 循环将无法工作

如何解决如果没有 println() 语句,Java 循环将无法工作

我目前正在学习 Java 入门级编程课程。我有一个函数应该从口袋妖怪列表中随机选择两个不同的口袋妖怪。起初,代码不起作用,只是无限地重复执行while循环。我添加一个 println 语句用于调试,突然间该函数完美运行。 该函数如下所示:

public boolean addRandomPokemon()
{
    boolean runcheck = true;
    boolean canUse = true;
    
    while (runcheck)
    {
        int rand = Randomizer.nextInt(3);
        for (int i = 0; i < pokeDeck.size(); i++)
        {
            System.out.println();
            if(pokeDeck.get(i).getName().equals(POKEMON_NAMES[rand]))
            {
                canUse = false;
            }
        }
        if (canUse)
        {
            Pokemon poke = new Pokemon(POKEMON_NAMES[rand]);
            pokeDeck.add(poke);
            runcheck = false;
        }
    }
    return true;
}

其中整数 rand 是一个随机整数 (0,3)。任何人都可以解释为什么会发生这种情况,并为这个问题提供更好的解决方案。简单的解释是首选,因为我在编程方面不是很有经验。 谢谢!

解决方法

当你的 pokeDeck 至少有一个元素并且你满足 if 条件时,你把 canUse 布尔值设置为 false,这样你就不会在第二个 if 中输入了

    if (canUse)
    {
        Pokemon poke = new Pokemon(POKEMON_NAMES[rand]);
        pokeDeck.add(poke);
        runCheck = false;
    } else {
        canUse = true;
    }

所以你的 runCheck 布尔值总是为真,所以循环是无限的。

您可以通过添加 else 语句来修复此行为,如下所示:

println

所以你有另一个机会在下一个循环中退出循环。

list_cards = [('♥','9'),('♥','J'),('♦','7'),'10'),'10')] 在你的无限循环中没有作用

,

我认为 System.out.println() 对您的问题没有影响。该语句即将向控制台打印任何值。还要确保您的 pokeDeck 在您的 POKEMON_NAMES 数组中不包含任何 pokemon,因为它会将 canUse 更改为 false,那么您的 runCheck 将始终保持为真。

排列的代码:

public boolean addRandomPokemon()
{

    boolean runCheck= true;
    boolean status= false; // If we could insert a pokemon it will be true

    ArrayList<Integer> index= new ArrayList<>();
    for(int i=0; i<POKEMON_NAMES.length; i++) index.add(i); //We create the index pool for selection.
    Random rand= new Random(System.currentTimeMillis()); // Current times seed for Random

    while (index.size()>0 && runCheck)
    {
        
        int x= rand.nextInt(index.size());
        int randPoke= index.remove(x);
        
        for (int i = 0; i < pokeDeck.size(); i++)
        {
            if(pokeDeck.get(i).getName().equals(POKEMON_NAMES[randPoke]))
            {
                break;
            }
            
            Pokemon poke = new Pokemon(POKEMON_NAMES[randPoke]);
            pokeDeck.add(poke);
            runCheck = false;
            status= true;
        }
    }
    return status;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。