基础语法没什么好说的,需要注意的是相比C++,Java不支持引用和重载运算符,其余的大部分语法与C++类似。
①关于Java的字符串处理问题
需要用到的基础函数:
CharAt(int index)、length()、substring(int l, int r)
concat(String str)/*连接两个字符串*/
toCharArray()/*不熟练的话还是用这个转成字符数组老老实实玩吧*/
indexOf(String str, int fromindex)/*查找从fromindex起的第一个str子串出现位置*/
lastIndexOf(String str, int fromIndex)/*从fromindex反向查找第一个str子串出现位置*/
②关于Java中的排序
基础的数组排序就使用Arrays.sort(arr, l, r) // l 为排序的起始位置,r 为排序的结束+1
如果要对一些对象进行排序,以下是第一种方法,就是直接对这个对象写一个比较函数:
1 import java.io.*; 2 import java.util.*; 3 4 class T implements Comparable<T> 5 { 6 int p, c; 7 8 public T(int p1, int c1) 9 { 10 p = p1; 11 c = c1; 12 } 13 14 public int compareTo(T a) 15 { 16 if (p < a.p) return -1; 17 if (p > a.p) return 1; 18 return 0; 19 } 20 } 21 22 public class Main 23 { 24 public static void main(String []args) throws IOException 25 { 26 new Main().work(); 27 } 28 29 void work() throws IOException 30 { 31 Scanner sc = new Scanner(System.in); 32 n = sc.nextInt(); 33 m = sc.nextInt(); 34 T z[] = new T [m + 1]; 35 for (int i = 1; i <= m; i++) 36 z[i] = new T(sc.nextInt(), sc.nextInt()); 37 Arrays.sort(z, 1, m + 1); 38 //... 39 } 40 }
如果你希望对同一个对象能有不同的比较方式,你可以像以下这样写:
1 import java.util.*; 2 import java.io.*; 3 4 class T 5 { 6 int a, b; 7 8 public T(int a1, int b1) 9 { 10 a = a1; 11 b = b1; 12 } 13 } 14 15 class cmpT implements Comparator<T> 16 { 17 public int compare(T t1, T t2) 18 { 19 if (t1.a == t2.a) 20 { 21 if (t1.b == t2.b) return 0; 22 if (t1.b < t2.b) return -1; 23 return 1; 24 } 25 if (t1.a < t2.a) return -1; 26 return 1; 27 } 28 } 29 30 public class Main 31 { 32 int n; 33 34 public static void main(String []args) throws IOException 35 { 36 new Main().work(); 37 } 38 39 void work() throws IOException 40 { 41 Scanner sc = new Scanner(System.in); 42 n = sc.nextInt(); 43 T z[] = new T [n + 1]; 44 for (int i = 1; i <= n; i++) 45 z[i] = new T(sc.nextInt(), sc.nextInt()); 46 Arrays.sort(z, 1, n + 1, new cmpT()); 47 //... 48 } 49 }
③关于Java中的高精度数
好吧其实我学习一下Java就是冲着这玩意来的……
Java大概就是有这么两个类:BigInteger,BigDecimal。左边那个是高精整型数,右边的是高精浮点数。这两个类包含于Java.math中,使用时务必记得import。
基础函数:
valueOf()、add()、subtract()、multiply()、divide()、mod()、pow()、equals()、max()、min()、and()、or()、xor()、toString()、compareTo()
附一个求GCD的例子:
1 import java.io.*; 2 import java.util.*; 3 import java.math.*; 4 5 public class Main 6 { 7 public static void main(String []args) throws IOException 8 { 9 new Main().work(); 10 } 11 12 void work() throws IOException 13 { 14 Scanner sc = new Scanner(System.in); 15 BigInteger a, b; 16 a = sc.nextBigInteger(); 17 b = sc.nextBigInteger(); 18 System.out.println(a.gcd(b).toString()); 19 sc.close(); 20 } 21 }
以及要注意的是,在BigInteger中divide是整除,而在BigDecimal中divide可以有三个参数,divide(BigDecimal num, int scale, int roundingMode),分别表示除数、保留位数、保留方式。具体的保留方式我暂时找到以下三种:BigDecimal.ROUND_HALF_UP、BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN,当然后面两个参数可以省略,但是如果出现除不尽的情况将会报错。
以及BigDecimal中还有两个可能会用到的的函数:stripTrailingZeros()、toPlainString()。前者用于去除末尾零,后者用于创建一个不用指数表示的字符串。
附一个POJ1001的代码:
1 import java.util.*; 2 import java.math.*; 3 4 public class Main 5 { 6 public static void main(String []args) throws IOException 7 { 8 Scanner sc = new Scanner(System.in); 9 BigDecimal ans; 10 String t; 11 int n; 12 while(sc.hasNext()) 13 { 14 t=sc.next(); 15 n=sc.nextInt(); 16 ans=new BigDecimal(t); 17 ans=ans.pow(n); 18 ans=ans.stripTrailingZeros(); 19 t=ans.toPlainString(); 20 if(t.startsWith("0."))t=t.substring(1); 21 System.out.println(t); 22 } 23 sc.close(); 24 } 25 }
大概就在各个乱七八糟的地方学了这么些东西,若有错误也请原谅。
补一下上学期纯粹为了ACM用Java而学习的Java基础知识
原文:http://www.cnblogs.com/VOIAFBR/p/5138131.html