Java里遇到的一些问题

来源:互联网 发布:js修改div高度 编辑:程序博客网 时间:2024/06/05 15:45

1·字符串如何转化为int型数字?
使用int的包裹类型Integer.parseInt(String); //无法用前缀(int)强制转换,是因为两种数据类型没有包含关系。

2·由于char类型的数据储存在内存里的是Unicode表所对应的数字,所以
char a='6';
(int)a;

也并不能得到int型的数字6,而是到Unicode表里的对应数字6的54

那么如何由char得到int类型数据呢?
(1)将char转化为String类型,比如
a=Integer.parseInt(char a+"");
就可以用parseint函数再转化为int类型了。
(2)我们可以利用巧妙的1-9在Unicode表中相对差就是本身数字大小的特点:
int a='6'-'0';
这样就得到了int型的数字。

3·关于多组输入
一般题目里关于多组输入会有组数提示,比如第一行输入一个正整数表示接下来要接受的组数。
当遇到不确定输入组数时,if(in.hasNext())或者if(in.hasNextLine())
可以用来判断是否停止输入。

4·小数如何四舍五入到指定位数?
java里的Math类非常强大,其中的round函数就可以四舍五入到整数位。如果想要精确到指定位数,则可以先将数放大10^n倍,四舍五入后再缩小10^n倍。
例如:

        double n=3.1415926;        System.out.println((double)(Math.round(n*100))/100);

注意,round函数返回的是int或long型数据,需转化才能得到小数。

我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子。下面是一个例子:

[java] view plain copy importjava.text.DecimalFormat;      publicclassTestNumberFormat{        publicstaticvoidmain(String[]args){      doublepi=3.1415927; //圆周率      //取一位整数      System.out.println(newDecimalFormat("0").format(pi));   //3      //取一位整数和两位小数      System.out.println(newDecimalFormat("0.00").format(pi)); //3.14      //取两位整数和三位小数,整数不足部分以0填补。      System.out.println(new DecimalFormat("00.000").format(pi));// 03.142      //取所有整数部分      System.out.println(newDecimalFormat("#").format(pi));   //3      //以百分比方式计数,并取两位小数      System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16%          longc=299792458;  //光速      //显示为科学计数法,并取五位小数      System.out.println(newDecimalFormat("#.#####E0").format(c)); //2.99792E8      //显示为两位整数的科学计数法,并取四位小数      System.out.println(newDecimalFormat("00.####E0").format(c)); //29.9792E7      //每三位以逗号进行分隔。      System.out.println(newDecimalFormat(",###").format(c));   //299,792,458      //将格式嵌入文本      System.out.println(newDecimalFormat("光速大小为每秒,###米。").format(c));    }  }  

 DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。上面的例子包含了差不多所有的基本用法,如果你想了解更多,请参考 DecimalFormat 类的文档。

5·程序设计原则
在城堡游戏那一章学到的一些东西我觉得很重要,有必要记下来。
<1>消除代码重复:相同的代码代表了同样的操作,应该把它们写进一个函数,用接口来实现调用。
<2>降低代码耦合:类与类之间应当尽量降低联系,以免牵一发而动全身。同样的,对于在一个类中调用其他类的成员变量应当尽量避免。可以在自己的类中实现操作,然后利用接口调用。尽量使用private的成员变量。
<3>可扩展性:由于考虑到将来代码的更新,维护,直接将我们需要使用的变量做成成员变量也是不太好的,可以用容器存放这些可能会拓展的变量,这样调用和维护都会变得简单一些。
<4>框架:我们希望做到将操作统统分开,单独处理,主类里只留下框架加数据的模式,这样当程序的框架确定好了以后,层次就会很鲜明,由很多类来共同完成任务。

6·创建一个对象与声明一个对象有什么区别?
声明一个对象,在超出对象的作用范围时,会自动释放资源
new一个对象,如果你不显式释放资源,哪怕你结束程序也不能收回这些资源,可以用delete释放。
(暂时我也不懂,百度来的半知不解,待填坑。)

7·c语言中的scanf(“%d”,&n)=EOF和java中的in.hasNext()有一点区别,前者记录了读到的数据,而后者没有读到,得再次赋值,n=in.nextInt();

8·split()函数用 “|”来分割多个分隔符,正则表达式前加\。

原创粉丝点击