学习了将近四周的Java语言,对于Java语言,我也有了更进一步的理解,出于对Java语言的喜爱,我总是喜欢没事的时候,自己敲一些很简单的代码,一边学习Java语言,一边对比C语言,往往可以帮助我们更好的学习Java言,由于我们先学习了C语言,每次写Java程序时,我们总会习惯性的把C语言的语法带到Java语言里,但由于Java和C语言的语法又有一定的差别,所以会导致我们写的程序无法通过编译。因此我们通过比较性的学习,更加能使我们很好地了解Java语言,下面就我遇到的问题和大家分享一下。
我分别用C语言和Java语言写了一个实现两个任意进制数之间转换的程序。
Java版:
package first;
/** * 利用字符串与整型的转换实现数字分离 * 作者:牛百泉 * 日期:2017/9/14 23:37 */import java.util.*;public class niubaiquan{public static void main(String[] args) {
// TODO Auto-generated method stub char NumberArray[]=new char[32];//创建一个数组用来储存字符串数字 byte NumberArray2[]=new byte[32];//用来储存转换后的每一个数字 int sum=0,i,j=0,radi1,radi2; @SuppressWarnings("resource") Scanner input=new Scanner(System.in); System.out.println("请输入一个整形数据"); int number=input.nextInt(); System.out.println("请输入这个整数的进制"); radi1=input.nextInt(); System.out.println("请输入这个整形数据要转换成的进制数"); radi2=input.nextInt(); if(number<0) number=-number;//也可以用绝对值方法 String data=String.valueOf(number);//将一个整型数据转换成数字字符串 NumberArray=data.toCharArray();//将一个字符串转换成一个字符串数组 for(i=0;i<NumberArray.length;i++) { int temp =(NumberArray[i]-'0'); sum+=Math.pow(radi1,NumberArray.length-1-i)*temp;//将这个数转换成十进制的数 } do { NumberArray2[j]=(byte) (sum%radi2);//转换成需要的进制 sum/=radi2; j++; }while(sum!=0); System.out.printf("%d进制的%d转换成%d进制后为",radi1,number,radi2); for(i=j-1;i>=0;i--) { System.out.printf("%d",NumberArray2[i]); }}}
测试结果
C语言版
#include<stdio.h>
#include<math.h>#define N 50int main(){ int i=0,k=0,j,t,number,number1,number2,radi1,radi2,sum=0; int A[N],B[N]; printf("请输入一个整数和它的进制数以及要转换成的进制数:\n"); scanf("%d%d%d",&number,&radi1,&radi2); printf("%d进制的%d转换成%d进制后为",radi1,number,radi2); while(number!=0)//分离数字 { A[i]=number%10; number=number/10; i++; } for(j=0;j<i;j++)//转换成十进制 { number1+=A[j]*pow(radi1,j); } do//转化成需要的进制 { B[k]=number1%radi2; number1/=radi2; k++; }while(number1!=0); for(t=k-1;t>=0;t--) { printf("%d",B[t]); } return 0; }测试结果
在这两个程序中我感觉最大的区别是Java语言和C语言对于字符串的的处理有很大的不同,在c语言中,字符串和字符串数组没有多大的区别,基本是通过字符串数组来进行字符串的操作,而在Java语言中,字符串有专门的处理方法,虽然两者之间可以通过String.valueOf()和toCharArray()方法来转化,但它们去是不同的两个数据类型。