最近要开始积极地从C++切换到JAVA上了,大家都说基本可以平滑切换。
目前试了试,主要的问题还是语法表达还不够习惯的问题。所以用这个系列来做一些记录吧。
这个代码读入一组数据,然后将这组数据转化为2进制表达的字符串,输出出来。
eg. 读入input. txt。其中input.txt包含一行, 1,3,6,8。那么输出为
1->1010
3->101
6->11
8->1001
代码如下:
注释中特别写了一些从C++和JAVA的区别,以及JAVA应该注意的问题。
import java.io.*; public class SimpleCal { String Cal(int i) { i = (3*i + 7)%11; String result = Integer.toBinaryString(i); return result; } public static void main(String args[]) { // NOTE 命令行参数写法 if (args.length < 1 ) { //NOTE 判断命令行参数的个数。另外java中args是不包括程序本身的。所以如果args从0开始计算。而C++中的命令行参数包括程序本身,所以argc从1开始计算。 System.out.println("There should be one parameter."); return; } SimpleCal sc = new SimpleCal(); //生成当前类SimpleCal的对象,等会儿在当前的main函数中使用。 BufferedReader in; //读文件的类。 String str; String arr[]; //字符串数组 int intarr[]; //整数数组 int tmp; try { //①读文件的整个流程使用try {...}catch(){...}包裹。如果没写try catch,编译将报错。 in = new BufferedReader(new FileReader(args[0])); //②第一层,FileReader,第二层BufferedReader。 while ((str = in.readLine()) != null) { //③固定搭配: 用readLine()读一行到String. System.out.println("\n\n" + str); arr = str.split(",");//④把读的一行进行tokenize, 结果放入String[] array中。 for (String each : arr) { //⑤类似for each 语句,变量声明String each必须在括号中完成,提到前面会报错。 each = each.replaceAll(" +", ""); //⑥replaceAll去掉头尾空格。 tmp = Integer.parseInt(each); //⑦String To Int System.out.format("%d->%s\n",tmp, sc.Cal(tmp)); //⑧格式化输出。 } } } catch (IOException e) { //异常: IOException System.out.println("IO file Exeption"); } } }
读文件的一个常见方法:
BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { // process the line. } br.close();