java和C操作数组的一个小区别
生活随笔
收集整理的這篇文章主要介紹了
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語言中卻有這么一句
我翻譯過來哦后,一直拋 java.lang.ArrayIndexOutOfBoundsException,很明顯是 c[nn-3] 中的nn-3為負數,而在C語言中卻不會報錯,調試后,才發現,當C語言中,數組下標為負數時,其值為0 。
這才算改過來啦。
之后,和原算法執行效果是一樣的。 ?切記、java中數組下標不可為負,而C語言中,可以,并且其值為0 !!!
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的java和C操作数组的一个小区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb之Servlet学习---
- 下一篇: android用openGl ES绘制任