|
今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换。都会变成0. 参考书籍发现使用使用BigInteger可以解决这个问题。 于是查找了下JDK,然后测试几次终于写成功了! 使用心得如下: 1,BigInteger属于java.math.BigInteger,因此在每次使用前都要import 这个类。偶开始就忘记import了,于是总提示找不到提示符。 2,其构造方法有很多,但现在偶用到的有:
如要将int型的2转换为BigInteger型,要写为BigInteger two=new BigInteger("2"); // 注意2双引号不能省略
3,BigInteger类模拟了所有的int型数学操作,如add()==“+”,divide()==“-”等,但注意其内容进行数学运算时不能直接使用数学运算符进行运算,必须使用其内部方法。而且其操作数也必须为BigInteger型。 如:two.add(2)就是一种错误的操作,因为2没有变为BigInteger型。
4,当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串,详细说明如下: 输出方法:System.out.print(two.toString());
5,另外说明三个个用到的函数。
remainder用来求余数。 negate将操作数变为相反数。 compare的详解如下:
compareTopublic int compareTo(BigInteger val) - 将此 BigInteger 与指定的 BigInteger 进行比较。对于针对六个布尔比较运算符 (<, ==, >, >=, !=, <=) 中的每一个运算符的各个方法,优先提供此方法。执行这些比较的建议语句是:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。
- 指定者:
- 接口
Comparable<BigInteger> 中的 compareTo
- 参数:
val - 将此 BigInteger 与之比较的 BigInteger。 - 返回:
- 当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。
前些时间总是感到迷茫,不知道该学什么,也许是快要毕业的原因吧,我也开始盲目的学习开了,看到社会招聘这个那个,于是乎就什么都想一股脑学完,JAVA,JSP,PHP,JS,ASP.NET.Wap.....结果可想而知,如此只能是什么也学不成,痛惜过去,现在偶完全确定了今后的学习方向---JAVA-->J2EE/ORACLE. 从今天偶会经常到这里来写下偶的学习心的,痛补以前的过失。各位监视偶啊! 这里将见证偶从菜鸟变成老鸟的历史过程! 偶的目标---第一流的JAVA程序员!!!--(人首先要自信,坚定信念,才能成功!)
这两天看了java面向对象编程部分得内容,感觉有不少需要注意得地方: 重要知识点总结如下: 1,抽象,封装,继承,多态是面向对象程序设计中得四个特点. 2,面向对象得软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现. 可概括为如下过程:分析用户需求,从问题中抽取对象模型;细化模型,设计类,包括类的属性和类间的 相互关系,同时观察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现 上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案. 3,面向对象程序设计方法的优点是:可重用性,可扩展性,可管理性. 4,类的定义:class前的修饰符分为访问控制符和非访问控制符两大类.访问控制符包括public和private. 非访问控制符包括abstract(抽象),final(最终). 5,final类是最终类,是不能有子类的类.abstract和final不能同时修饰一个类,因为抽象类本身没有具体对象, 需要派生出子类后在创建子类的对象.而最终类不可能有子类. 6,创建对象的格式为: 类名 对象名=new 构造方法(参数);注意前面是类名后面是构造方法. 注意构造方法没有返回类型,也不能写void,主要用于完成类对象的初始化工作,一般不能直接由编程 直接调用,而是用new运算符来调用. 7,如果class前面由public修饰符,则默认构造方法的前面也应该有public修饰符. 8,类中有static修饰的域或方法,可用类名或对象名访问,否则只能用对象名访问. 9,修饰域的访问控制符可以是:public,private,protected,private protected.非访问控制符可以是: static,final,volatile(易失域) 10,类变量的最本质的特点是:他们是类的域,不属于任何一个类的具体对象实例.不是保存在某个对象实例的内存空间中,而是保存在类的内存区域的公共存储单元中. 11,局部变量是在方法体内声明的,只有当方法被调用时他们才存在,因而只能在本方法内使用,不存在访问控制符,也不能声明为静态变量(static),但可以声明为final变量.局部变量必须初始化. 12,修饰方法的访问控制符可以是:public,private,protected,private protected,修饰方法的非访问控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。 13,用static修饰的变量或方法都为类成员,类成员可以用类名或实例名访问,实例成员只能用实例名来访问。 14,如果一个类中含有抽象方法,则此类必须为抽象类,如果抽象类的子类不为抽象类,则子类必须实现父类的所有抽象方法。抽象方法不能用静态方法和最终方法。抽想方法只有函数头的声明,而用分号来替代方法体,没有大括号。如abstract void abstractmethod(); 15,this变量用在一个方法的内部,指向当前对象,当前对象指的是调用当前正在执行的方法的那个对象。super变量是直接指向父类的构造方法,用来引用父类种的变量和方法。(由于他们指的是对象,所以不能通过它来引用类变量和类方法) 16,如果要引用一个包中的多个类,可以用星号来代替。使用星号只能表示本层次的所有类,而不包括子层次下的类。所以经常需要用两条语句来引入两个层次的类:import java.awt.*;import java.awt.event.*; 17,访问修饰符: --类中限定为public的成员可以被所有的类访问。 --类中先定位private的成员只能被这个类本身访问。同一个类的不同对象可以访问对方的private域变量或调用对方的域方法,这是因为访问保护控制在类的级别上,而不是对象的级别上。 --类中限定为protected的成员可以被这个类本身,它的子类(包括同一个包中和不同包中的子类),以及同一个包中的其他类访问。 --用private protected修饰的成员可以被该类本身访问,也可以被该类的所有子类访问。 --默认访问控制符规定只能被同一个包中的类访问和引用,而不能被其他包的类访问。即他的访问权限是friendly。 18,注意: ----abstract和private,static,final,native不能并列修饰同一个方法。 ----abstract类中不能有private修饰的域和方法 ----static方法不能处理非static的域。 19,重载方法的参数必须不同,或者是参数个数不同,或者是参数类型不同。重载的多个方法必须返回相同的数据类型。 20,在java中,一个类获取某一接口定义的功能并不是通过直接继承这个接口的属性和方法来实现的。因为接口中的属性都是常量,接口的方法都是没有方法体的抽象方法,没有具体定义操作。
java支持在命令行下后面直接跟参数:类似 程序名称 参数1 [参数2] .... 对于此类的程序,要注意的问题就是判断后面参数个数和类型是否合法.如果程序需要的参数个数至少是两个,当程序并没有对参数长度进行判断时如果用户值输入一个参数,则程序运行会返回错误!因此应该加以判断:方法如下: if(args.length<2){ System.out.println("Usage: String1 String2"); System.exit(0); }else{ ........ }
通过做本章最后得习题,发现如下问题需要偶以后注意: 1,注意用户输入数据得合法性. 如需要输入一个正整数才有效,如果对用户输入不加判断,当用户输入一个负数时则会产生错误得结果.因此应该进行简单的判断. 如int n=0; while(n<1) n=读取用户输入的值 这样即可保证用户输入得时一个正整数. 2,图形界面中setText()得内容必须时字符串型,因此在输出一个数字型时应该将其转换成字符串型. 用Integer.toString(),Double.toString()方法即可. 例,int x=1;aa.setText(Integer.toString(x)); 3,图形界面中捕获哪个按钮被按下得方法. 当存在多个button按钮时,我们都用actionListener(this)来监听.那么如何判断用户点击了哪个按钮呢? 用getSource()方法 例:btn1.addActionListener(this);btn2.addActionListener(this); public void actionPerformed(ActionEvent e){ if(e.getSource()==btn1) //do anything else if(e.getSource==btn2) //do other things }
java数组对象有一个很重要的方法getChars();其方法描述为: public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin); 将当前字符串的部分字符复制到目标自负数组dst中,从srcBegin(包含在内)到srcEnd(不包含在内)之间的字符复制到目标字符数组中的字符从dstBegin位置开始存放. 使用实例: String ss="Visual Basic"; char dst[]={'a','b','c','d'};
ss.getChars(4,6,dst,2); System.out.println(dst); 输出结果为abal; 注意数组参数只要写入数组名即可,不要带[],输出可以直接用数组名输出全部内容.
今天看了书本上的杨归三角程序写法后,自己试着去写,但写完后编译总是出现一个错误. 先看代码:
1 public class YangHui{ 2 public static void main(String args[]){ 3 final int max=10; 4 int a[][]=new int[max][]; 5 for(int i=0;i<a.length;i++){ 6 int a[i]=new int[i+1]; 7 } 8 a[0][0]=1; 9 for(int i=1;i<a.length;i++){ 10 a[i][0]=1; 11 a[i][a[i].length-1]=1; 12 for(int j=1;j<a[i-1].length;j++){ 13 a[i][j]=a[i-1][j-1]+a[i-1][j]; 14 } 15 } 16 17 for(int i=0;i<a.length;i++){ 18 for(int j=0;j<a[i].length;j++) 19 System.out.print(a[i][j]+"\t"); 20 System.out.println(); 21 } 22 } 23 } JCreator返回如下错误信息: -------------------------------------------------- D:\Java\JCreator\YangHui.java:6: 需要 ']' int a[i]=new int[i+1]; ^ 1 错误 处理已完成。 --------------------------------------------------- 开始怎么都看不出第六行有什么错误,郁闷半天之后看了课本,发现原来多了一个int.突然醒悟这个数组已经在前面声明过了,在这里写int不是重复声明吗?......真是太粗心了,不过给偶一个深刻的教训,一定注意不要范重复声明数组的错误. 删掉int之后编译通过,正确的程序是这样的: public class YangHui{ public static void main(String args[]){ final int max=10; int a[][]=new int[max][]; for(int i=0;i<a.length;i++){ a[i]=new int[i+1]; } a[0][0]=1; for(int i=1;i<a.length;i++){ a[i][0]=1; a[i][a[i].length-1]=1; for(int j=1;j<a[i-1].length;j++){ a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++) System.out.print(a[i][j]+"\t"); System.out.println(); } } }
这算是一个很简单的程序,但还是值得我这样的初学者去总结一下,毕竟applet不同于application程序: import java.applet.*; import java.awt.*; import java.awt.event.*;
public class LeapyearTest extends Applet implements ActionListener{ Label result; //定义一个输出结果的标签对象 TextField t1; //定义一个用于输入年份的文本框 Button btn; //定义一个button对象 int year; boolean leap; public void init(){ result=new Label("请输入要判断的年份:"); t1=new TextField(5); btn=new Button("判断"); add(t1); add(btn); add(result); btn.addActionListener(this); //为按钮注册事件,事件的监听者为当前类的对象this } public void actionPerformed(ActionEvent e){ year=Integer.parseInt(t1.getText()); if((year%4==0)&&(year%100!=0)){ leap=true; }else if(year%400==0){ leap=true; }else{ leap=false; } if(leap==true){ result.setText("你输入的年份为闰年!"); }else{ result.setText("你输入的年份不是闰年!"); } t1.setText(""); } } 这里有几点需要说明的: 1,applet程序必须引入java.applet.*; 2,使用文本框,按钮等控件需要引入java.awt.*; 3,有事件发生则要引入java.awt.event.*; 4,在类名后加上extends Applet Implements ActionListener 5,添加事件后,当事件被激活后会自动调用actionPerformed函数执行.因此应该为事件写该函数.
偶是一个java初学者,看了树上一个简单例子,然后自己试着写了下,却发现了很多问题.... 例子是一个判断用户输入字母是大写还是小写的. 偶开始这样写:
import
java.io.
*
;
public
class
UpLow{
public
static
void
main(String args[])
{ C
har
x; System.out.println(
"
请输入一个字母:
"
); x
=
(C
har
)System.in.read();
if
(Character.isUpperCase(x)){ System.out.println(
"
你输入了一个大写字母!
"
); }
if
(Character.isLowerCase(x)){ System.out.println(
"
你输入了一个小写字母!
"
); } } }
运行调试先后发现如下问题: 1,Char x和(Char)System.in.read()中的Char中c应该小写. 2,由于用到system.in.read()所以应该加上throws IOException. 这么简单一程序就遇到这么多问题...崩溃... 不过这样就给了俺比较深刻的印象,以后一定不会范这些错误了. 用到输出语句"System.in.read()"要在main()中加上throws IOException 语句来抛出异常.
到了大学好像自己就开始浮躁起来,学什么都不能安安心心的坐下来,现在的学习犹如浮沙筑高台,乱七八糟,什么都没有系统学习过,这学期开始着手学习JAVA,再图书馆借了一些书籍看了不少,不知道时偶看的少还是什么原因,现在还是感觉什么都不会,哎,郁闷呢。。。今天又再图书馆翻了一下java的书,感觉迷茫,图书馆这方面的还真不少,偶都不知道该看什么了,到底怎样学下去,才能少走弯路??摸索中。。。也请大家指点一二,谢谢!
|