簡體   English   中英

如何將函數從Java轉換為C?

[英]How do I translate function from Java to C?

我們被要求用Java構建一個隨機字母庫。 我做了作業。 現在要求我們用C編寫。 我在Java中使用nanotime做到了。 我做了一些研究,但在C語言中找不到納米時間。

已經在C語言中嘗試過:(無效)

Random SayiOlustur(){
Random this;
this = (Random) malloc(sizeof(struct RANDOM));
char randomly;
int i;
struct timeval before , after;
gettimeofday(&before , NULL);
for (i=1 ; i <= 100 ; i++){
   printf("%d %d %d ",i, i*i, i*i*i);}
gettimeofday(&after , NULL);
printf("%d",Nano(before,after)); 
int random;
double test;
while(true){
    test = Nano(before,after);
    random = (int)test % (int)123.0;
    if((random >= 65 && random <= 90) || (random >= 97 && random <= 122)){
    randomly = (char) random;
    break;
    }}}
int Nano(struct timeval x,struct timeval y){
    double x_ms , y_ms , diff;
    x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec;
    y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec;
    diff = (double)y_ms - (double)x_ms;
    return diff;
}

Java代碼:(有效)

 private long Now(){
        long now = System.nanoTime();
        return now;
 }
public char Random(){
        char rastgele;
        while(true){
            random = (int)((Now())%123);
            // ASCI
            if((random >= 65 && random <= 90) || (random >= 97 && random <= 122))
                break;
        }
        rastgele = (char) random;
        return rastgele;
    }
public static void main(String[] args) {
        RastgeleKarakter rastgele = new RastgeleKarakter();
        System.out.println("Rastgele Karakter: " + rastgele.Random());
}

日期:

run:
Rastgele Karakter: m \\ Random

日期:

run
Rastgele Karakter: y \\ Random

您要查找的Unix系統調用是clock_gettime(),它將為您提供納秒級的時間。

就是說,即使您沒有提出要求,我也將對您的C代碼提供一些評論:最好嘗試從頭開始編寫代碼,而不是移植Java代碼。 您的系統可能會提供random()調用,這將為您提供比您的方法干凈得多的隨機數。 同樣,您永遠都不應轉換malloc()的返回值:它返回void *。 如果可以避免,切勿拋棄-這是一個非常不好的習慣,只會最終向您隱藏錯誤。 同樣,請勿將y_ms和x_ms強制轉換為double,而應將它們聲明為double。 僅當您更改y_ms和x_ms的聲明而忘記更改演員表時,該演員表才會傷害您。

您之前和之后都傳遞給Nano(),這很糟糕。 這些是結構,因此您要將結構中的所有數據復制到堆棧上。 將指針傳遞給結構要好得多,這樣您只需要編寫一個指針即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM