为了账号安全,请及时绑定邮箱和手机立即绑定

我怎样才能让洗牌器方法只洗牌数组中的某些索引?虽然不改组我想保持不变的索引

我怎样才能让洗牌器方法只洗牌数组中的某些索引?虽然不改组我想保持不变的索引

蓝山帝景 2022-03-10 15:57:58
我的问题如下:    char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};    for(int i = 0; i < letters.length; i ++) {        int random = (int) (Math.random()* letters.length);        char temp = letters[i];        letters [i] = letters [random];        letters [random] = temp;    }这种方法对数组进行洗牌,很好;但是,我希望 shuffle 方法和 Math.random 方法都忽略空格,并且只随机播放具有字母值的索引。进一步解释:我希望字母数组的输出使所有空格的索引与它们原来的索引相同,同时只允许交换包含字母的索引。因此,在通过此方法后,字母数组的随机可接受输出示例如下所示:['','b','','c','','a']甚至可能[ ' ', '出租车' ]任何关于如何实现这一点的帮助都非常棒......我已经尝试了 for、while 和 if 循环的所有变体,试图将 Math.random 方法的边界限制为仅包含一个字母的索引,并且相同对于 for 循环,但我什么也没想到。它让我打败了。非常感谢任何可以帮助我并解释一下的人。
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

只需跳过空白索引:


char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};


for(int i = 0; i < letters.length; i++) {

    int random = (int) (Math.random()* letters.length);


    if (letters[random] == ' ' || letters[i] == ' ') continue; // here


    char temp = letters[i];

    letters [i] = letters [random];

    letters [random] = temp;

}


查看完整回答
反对 回复 2022-03-10
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

使用以下逻辑:


char[] letters = { ' ', 'a', ' ', 'b', ' ', 'c', ' ', 'd' };


for (int i = 0; i < letters.length; i++) {

    int random = (int) (Math.random() * letters.length);


    // observe this

    if (!Character.isWhitespace(letters[random]) && !Character.isWhitespace(letters[i])) { 

        char temp = letters[i];

        letters[i] = letters[random];

        letters[random] = temp;

    }


}

解释 :


您可以添加一个简单的if条件来检查要交换的两个元素(即letters[random]和letters[i])是否不是空格。


查看完整回答
反对 回复 2022-03-10
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号