标题:新手提问,c++ 部分代码转换为 java
只看楼主
格式化秘密
Rank: 2
等 级:论坛游民
帖 子:31
专家分:57
注 册:2013-8-13
结帖率:0
已结贴  问题点数:10 回复次数:9 
新手提问,c++ 部分代码转换为 java
请问以下代码怎么用java实现。c++我一窍不通啊,尤其是这个随机数
程序代码:
string GetRandomString()
        {
                const int SIZE_CHAR = 8; //生成32 + 1位C Style字符串
                const char CCH[] = "0123456789abcdefghijklmnopqrstuvwxyz";
                srand((unsigned)time(NULL));
                char ch[SIZE_CHAR + 1] = {0};
                for (int i = 0; i < SIZE_CHAR; ++i)
                {
                        int x = rand() / (RAND_MAX / (sizeof(CCH) - 1));
                        ch[i] = CCH[x];
                }
                return ch;
        }


[ 本帖最后由 格式化秘密 于 2014-10-10 13:17 编辑 ]
搜索更多相关主题的帖子: 一窍不通 java 
2014-10-10 13:16
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
c代码和java代码差不多吧

DO IT YOURSELF !
2014-10-10 13:18
格式化秘密
Rank: 2
等 级:论坛游民
帖 子:31
专家分:57
注 册:2013-8-13
得分:0 
回复 2 楼 wp231957
虽然代码差不多,但是同样功能的实现方式可能会很不一眼啊
比如那个srand,java就没有
2014-10-10 15:52
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:5 
标准的C语言是比较容易用工具转换为Java的
http://

C++可能不太容易自动转换,手写吧,Java没有srand,但是有Random

百度Java Random有很多例子
2014-10-10 22:05
格式化秘密
Rank: 2
等 级:论坛游民
帖 子:31
专家分:57
注 册:2013-8-13
得分:0 
回复 4 楼 日知己所无
那可否解释一下这句话是什么意思,我不太明白那个randmax 有什么用。。。谢谢啦
int x = rand() / (RAND_MAX / (sizeof(CCH) - 1));
2014-10-11 17:26
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:0 
回复 5 楼 格式化秘密
> int x = rand() / (RAND_MAX / (sizeof(CCH) - 1));

RAND_MAX是一个常量,下面的链接里有详细的说明
http://baike.

原来的语句如果写成下面这样也许更好理解一些
意思是:在0和sizeof(CCH) - 1之间产生随机的数字
int x = (sizeof(CCH) - 1) * rand() / RAND_MAX;

之所以表达式的顺序被调整了,有可能是为了防止大数相乘溢出的
一种防御式的数值计算方法
2014-10-11 17:55
格式化秘密
Rank: 2
等 级:论坛游民
帖 子:31
专家分:57
注 册:2013-8-13
得分:0 
回复 6 楼 日知己所无
好吧,谢谢啦。我总算是看懂了。不过我不知道怎么用java怎么写这个randmax,我记得java中好像没有randmax啊。可否指点一下
2014-10-12 09:19
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:0 
原来C++的程序的完整代码,包括用VC的命令行的编译和运行方法:
程序代码:
// GetRandomString.cpp : 定义主控制台程序的进入点。
// 编译:cl GetRandomString.cpp
// 运行:GetRandomString.exe

//#include "stdafx.h"
#include <ctime>
#include <iostream>
#include <string>
using namespace std;

string GetRandomString()
{
    const int SIZE_CHAR = 8; //生成32 + 1位C Style字符串
    const char CCH[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    srand((unsigned)time(NULL));
    char ch[SIZE_CHAR + 1] = {0};
    for (int i = 0; i < SIZE_CHAR; ++i)
    {
        int x = rand() / (RAND_MAX / (sizeof(CCH) - 1));
        ch[i] = CCH[x];
    }
    return ch;
}

int /*_tmain*/main(int argc, /*_TCHAR*/wchar_t* argv[])
{
    cout << GetRandomString().data() << endl;
    return 0;
}


执行结果【5回随机的例子】:
程序代码:
azdi8pu1
ay0q624s
alqernlc
av3q1jmq
av3q1jmq


结论:
原来的程序应该是想实现从数字和小写字母中随机生成8位字符
1)貌似有Bug,因为开头都是a,有点儿不合乎常理
2)连续快速运行的时候有可能会出现完全相同的结果
2014-10-12 10:45
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:0 
又多测试了一段时间,字母开头是b和c的也输出出来了,但是在一段时间之内出来的开头的字母都是完全相同的
总之原来的程序的随机性并不是太好
2014-10-12 10:54
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
得分:0 
Java版的
程序代码:
// package thread_437073;
// GetRandomString.java
// 编译:javac GetRandomString.java
// 运行:java GetRandomString

import java.util.*;

public class GetRandomString {
    public static void main(String[] args) {
        System.out.println(getRandomString());
    }

    public static String getRandomString() {
        final int SIZE_CHAR = 8;
        final char CCH[] = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
        Random random = new Random();
        char ch[] = new char[SIZE_CHAR + 1];
        for (int i = 0; i < SIZE_CHAR; ++i) {
            int x = random.nextInt(CCH.length);
            ch[i] = CCH[x];
        }
        return new String(ch);
    }
}


运行结果:
程序代码:
wayg3xah
cemgu85w
2ir4wxck
3rl9ajq2
geb7019o
2014-10-12 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-437073-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.858226 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved