最近在参加编程比赛,于是就练习了一下Java语言,准备参加比赛。
其实Java在编程竞赛中有三个很大的优点,BigInteger,Bigecimal,String,这三个类分别是高精度整数,高精度浮点数和字符串,Java提供了丰富的成员函数可以调用,接下来我们仔细分析一下。
1.高精度:
BigInteger add(BigInteger val) 返回值为(this+val),另外还有subtract() multiply() divide() mod()
Bigecimal和BigInteger的基本成员函数基本一样,除了没有mod(),但是有pow()函数
//需要将int(double)类型的数据转换成BigInteger(Bigecimal)用到valieOf()函数
int num=12;
BigInteger x=BigInteger.valueOf(num);
double num2=12.23;
BigDecimal y=BigDecimal.valueOf(num2);
2.字符串处理
最基本的字符串处理就是将其转换为字符数组,这样更利于处理,例如要求输入03:00,这样就可以用字符数组的形式提取其中的具体数字进行计算。
String str;
str.charAt(index);
s.substring(0,4);
char []ch=new char[100];
ch=str.toCharArray();
//拆分字符串
String []ss=s.split(":");
//替换字符串
String s="2009-07-26"
System.out.println(s.replace('-'.'//'))
//String中的字符是不能在原位置改变的,要改变必须改变并保存到新的String里,如果需要改变需要用到StringBuffer。
3.基本的IO
JDK 1.5.0 新增的Scanner类为输入提供了良好的基础。
Scanner cin=new Scanner(System.in);
//用Buffer会稍微加快一下速度
Scanner cin=new Scanner(new BufferedInputStream(System.in));
cin下有很多的函数,可以自己查看,较为常用的是:
while(cin.hasNext()){
cin.next();
cin.nextInt();
}
用DecimalFormat类控制浮点数小数位数
DecimalFormat f=new DecimalFormat("#.00#");
//0代表一位数字,#代表除0以外的数字
double a=12.334;
int b=102;
System.out.println(f.format(a));
//格式化输出
System.out.printf("%d%10.5f",b,a);
4.Array类
在java.util包里Arrays类的几个方法可替代C/C++里的memset、qsort/sort 和 bsearch:
Arrays.fill();//用值填充
boolean[] a1 = new boolean[15];
java.util.Arrays.fill(a1, true);
Arrays.sort();
Array.binarySearch()
int []a=new int[100];
Arrays.sort(a);
ArrayList就是动态数组,Array的复杂版本,可以用来增加和减少元素,ArrayList与数组的转换
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));
5.类型转换
常见的几种转换:
String->int
//第一种方法
int i = Integer.parseInt([String]);
把字符串当作X进制数转换成int型
i = Integer.parseInt([String],[int x]);
//第二种方法
int i = Integer.valueOf(my_str).intValue();
int->String
String s = String.valueOf(a);
String s = Integer.toString(a);
//把int型数据转换乘X进制数并转换成string型
String s= Integer.toString(a, x);
String s = "" + a;
其他的类型的相互转化类似,可以查看API
6.程序
一个基本的程序
public class Main{
public static void main(String[] argc)
{
System.out.println("Hello World");
}
}
java
是完全面向对象,所以一个程序就是一个类,而对于大多OJ都会要求建立一个Main类以及Main类的一个main函数。楼主一开始做OJ的时候就是因为没有定义Main类而一直没有AC过。
其实在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢而已。
另外定义一个对象数组的时候,一定要每一个都初始化,例如,定义一个Windows类
class Windows{
Point a;
Point b;
public static void main(String []args){
Windows []win=new Windows[100];
for(int i=0;i<win.length;i++){
//这一步非常重要
win[i]=new Windows();}
}
}
持续更新中。。。