个人银行账户管理程序C++代码转换成Java代码——思考Java语言与C++语言的异同

##4_9##
1.C++语言声明私有、保护或者公有数据成员时比Java方便,直接private:后面接数据成员、方法就可以,,而Java需要每一个数据成员前都加上private、protect或者public
2.Java和C++语言保留小数点后两位均用floor方法,但是在Java里一开始不改floor又会出错。按照Eclipse提供的修改方法修改了之后又返回不了正确的值,直接去掉floor又无法完成保留两位小数的目标,为了解决这一问题,我在网上查阅了Java保留两位小数的方法。
在Java里保留小数点后两位有四种方法,以下说明两种方法,代码如下:

public class format{
    double f = 111231.5585;
    public void m1{
        BigDecimal bg = new BigDecimal(f);
        double f1 = bg.setScale(2,BigDecial.ROUND_HALF_UP).doubleValue();
        System.out.println(f1);
    }//DecimalFormat转换最为简便
    public void m2{
        DecimalFormat df = new DecimalFormat("#.00")
        System.out.println(df.format(f));
    }//String.format打印最为简便
    public static void main(String[] args){
        f.m1();
        f.m2();
    }
}

3.在Java中,当成员方法的局部变量与域变量名相同时,在方法的内部借助this来明确表示用的是类的域变量。
如this.id=id;balance=0;而C++中直接用id(id);balance(0);

public void Main(int date, int id, double rate) {
  this.id=id;
  balance=0;
  this.rate=rate;
  lastDate=date;
  accumulation=0;
  }

4.创建对象的方法不同。这也是Java与C++语言一个很大的不同。
在C++语言中,Main sa0(1,21325302,0.015)就是创建了一个对象并赋值,而在Java中,Main sa0只是声明了一个对象引用,当new Main(1,21325302,0.015)时才会创建一个对象并赋值。

public static void main(String args[])
{ 
    Main sa0=new Main(1, 21325302, 0.015);
    Main sa1=new Main(1, 58320212, 0.015);
}

5.输出不同。C++的输出十分简洁,而Java的输出需要使用System.out.println()方法。
6.C++程序从int main()方法开始,Java程序从public static void main(String args[])开始。
7.C++ class中经常有函数声明如“void settle();”但是在Java class中,这样会出错,编译器会提醒缺少函数体,这个时候可以省去函数声明,直接将.h文件里的具体实现方法挪到这里来,或者在后面打上{}形成空函数体,如“void settle(){} ” ,然而有一个问题是,这个时候在{}后面无论是否打上“;”号,程序都不会出错,所以这种改法到底是形成一种函数体为空的settle函数还是声明一个函数,有点模糊。
8.一开始程序出现一堆错误的时候,编译器提示将“void settle(){}”rename,这个时候把settle改成settle1程序便不会报错,但是后面运行成功后再改回settle程序不再会报错而且照常运行。
##5_11##
1.C++中的const在Java里用final取代。二者的静态数据成员和静态成员函数均用static声明。
##6_25##
1.在Java中,数组也是一种数据类型(复合数据类型),数组的声明方法为:
int[] DAYS_BEFORE_MONTH = {0,31,59,90,120,151,181,212,243,273,304,334,365};
在C++中,数组的声明方法为:
const int DAYS_BEFORE_MONTH[] =
{0,31,59,90,120,151,181,212,243,273,304,334,365};
2.Java中的布尔类型为boolean,而C++中为bool
3.if括号中的结果应该为布尔值,否则编译不会通过,而C++语言则没有这种要求,在C++语言中:
if(int c){}当c<0时,自动跳出if语句。
##7_10##
1.Java只能extends一个父类,如果要继承多个父类可以通过父类再去继承一个父类的方法来实现。而C++语言可以直接继承多个父类。
2.Java的类和数组均是复合数据类型,也可作为对象。
3.Java中用super指代父类中域变量或方法,当子类的域变量名或成员方法名与父类的域变量名或成员方法名相同时,要调用父类的同名方法或使用父类的同名域变量,可用关键字super来指代。

public class CreditAccount extends Account{
 protected CreditAccount(Date date, String id) {
  super(date, id);//指代父类Account的同名域变量date,id
  // TODO Auto-generated constructor stub
 }

4.C++和Java中均有A?B:C表达式。如:

private final double getDebt()  { //获得欠款额
  double balance = getBalance();
  return (balance < 0 ? balance : 0);//若balance<0,则返回balance,否则返回0
 }

##8_8##
1.exit(1)表示退出整个程序,终止进程,并返回1给操作系统,Java和C++中均有这种用法,只不过C++中直接用exit(1);即可,而Java需要System.exit(1);
2.Java的输入没有C++方便,从网上查阅资料,以下是Java的三种输入方法:

import java.io.BufferedReader;
import java.io.IOException; 
import java.io.InputStreamReader;  
import java.util.Scanner;    
public class EnterTest {
       public static void main(String[] args) { //主方法     
       CharTest();  //调用System.in方法     
       ReadTest();  //调用ReadTest方法     
       ScannerTest();//调用ScannerTest方法   }              
       //* System.in和System.out方法    
       //* 缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取    
       //* 缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
       public static void CharTest()
       {      
           try{       
               System.out.print("EnteraChar:");       
               char i = (char)System.in.read();           
               System.out.println("Yout Enter Char is:" + i);     }     
               catch(IOException e)
               {       
                   e.printStackTrace(); }              
        }   
        //* InputStreamReader和BufferedReader方法    
        //* 优点: 可以获取键盘输入的字符串    
        //* 缺点: 如何要获取的是int,float等类型的仍然需要转换
        public static void ReadTest()
        {     
            System.out.println("ReadTest, Please Enter Data:");     
            InputStreamReader is = new InputStreamReader(System.in);//new构造InputStreamReader对象     
            BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中     
            try{ //该方法中有个IOExcepiton需要捕获       
                String name = br.readLine();       
                System.out.println("ReadTest Output:" + name);     }     
            catch(IOException e){       
                e.printStackTrace();     }         }       
        //* Scanner类中的方法    
        //* 优点一: 可以获取键盘输入的字符串    
        //* 优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
        public static void ScannerTest()
        {     Scanner sc = new 
              Scanner(System.in);        
              System.out.println("ScannerTest, Please Enter Name:");     
              String name = sc.nextLine();  //读取字符串型输入     
              System.out.println("ScannerTest, Please Enter Age:");     
              int age = sc.nextInt();    //读取整型输入     
              System.out.println("ScannerTest, Please Enter Salary:");     
              float salary = sc.nextFloat(); //读取float型输入     
              System.out.println("Your Information is as below:");     
              System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary);   } 
}

3.在Java里,抽象类可以有零个或多个抽象方法,也可以包含非抽象方法。只要有一个抽象方法,类前久必须有abstract修饰,如果没有抽象方法,类前也可以用abstract修饰。抽象类不能创建对象,创建对象的工作由抽象类派生的具体子类来实现,但可以有声明。声明能引用所有具体子类的创建对象。
4.通过构造方法的重载以及继承调用来实现构造方法的多态。
##9_16##
数组与容器之间的区别在于效率、确定的类型和保存基本类型数据的能力。数组是种高效的存储和随机访问对象引用序列的方式,使用数组可以快速的访问数组中的元素。但是当创建一个数组对象后,数组的大小也就固定了,当数组空间不足的时候就再创建一个新的数组,把旧的数组中所有的引用复制到新的数组中。Java中的数组和容器都需要进行边界检查,如果越界就会得到一个Runt imeException异常。这点和C++中有所不同,C++中vector的操作符不会做边界检查,这在速度上会有一定的提高,Java 的数组和容器会因为时刻存在的边界检查带来一些性能上的开销。使用容器代替数组会大大提升编程效率。
参考资料链接:https://blog.csdn.net/u012249177/article/details/49586383

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值