日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java和C操作数组的一个小区别

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java和C操作数组的一个小区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近寫個關于數值計算的數學軟件,是用java語言寫的。在書上看到一個關于求代數多項式所有實根和復根的算法。里面有這個一段:

againk:nn=N-k-1;p=0.0;q=0.0; it=0; iterat:it=it+1;.....b[nn]=a[nn]-p*b[nn-1]-q*b[nn-2];delta=c[nn-1]*c[nn-1]-(c[nn-1]-b[nn-1])*c[nn-3];deltap=(b[nn-1]*c[nn-2]-b[nn]*c[nn-3])/delta;deltaq=(b[nn]*c[nn-2]-b[nn-1]*(c[nn-1]-b[nn-1]))/delta;p=p+deltap;q=q+deltaq;delta=sqrt(deltap*deltap+deltaq*deltaq);if( delta > EPSILON ) goto iterat;..... if( k < N-1 ) goto againk;


我將其翻譯成java代碼:? do{nn=N-k-1 ;p=0.0 ; q=0.0 ; it=0 ;do{it++ ;.....b[nn]=a[nn]-p*b[nn-1]-q*b[nn-2] ;delta=c[nn-1]*c[nn-1]-(c[nn-1]-b[nn-1])*c[nn-3] ;deltap=(b[nn-1]*c[nn-2]-b[nn]*c[nn-3])/delta;deltaq=(b[nn]*c[nn-2]-b[nn-1]*(c[nn-1]-b[nn-1]))/delta;p+=deltap ;q+=deltaq ;delta=Math.sqrt(deltap*deltap+deltaq*deltaq) ;}// end while while(delta>EPSILON) ;.....} //end while while(k<N-1) ;

兩個C語言中的goto語句,我翻譯成do while ,大家注意看nn的值,外循環k+=2 ?,當k>=4時 nn=2,,而C語言中卻有這么一句

delta=c[nn-1]*c[nn-1]-(c[nn-1]-b[nn-1])*c[nn-3];

我翻譯過來哦后,一直拋 java.lang.ArrayIndexOutOfBoundsException,很明顯是 c[nn-3] 中的nn-3為負數,而在C語言中卻不會報錯,調試后,才發現,當C語言中,數組下標為負數時,其值為0 。
這才算改過來啦。

b[nn]=nn>=2?a[nn]-p*b[nn-1]-q*b[nn-2]:a[nn]-p*b[nn-1] ;delta=nn>=3?c[nn-1]*c[nn-1]-(c[nn-1]-b[nn-1])*c[nn-3]:c[nn-1]*c[nn-1] ;deltap=nn>=3?(b[nn-1]*c[nn-2]-b[nn]*c[nn-3])/delta:(b[nn-1]*c[nn-2])/delta;

之后,和原算法執行效果是一樣的。 ?切記、java中數組下標不可為負,而C語言中,可以,并且其值為0 !!!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的java和C操作数组的一个小区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。