首页 > 编程语言 > 详细

补一下上学期纯粹为了ACM用Java而学习的Java基础知识

时间:2016-01-21 18:25:24      阅读:210      评论:0      收藏:0      [点我收藏+]

  基础语法没什么好说的,需要注意的是相比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 }
高精度GCD

  以及要注意的是,在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 }
POJ1001

   大概就在各个乱七八糟的地方学了这么些东西,若有错误也请原谅。

补一下上学期纯粹为了ACM用Java而学习的Java基础知识

原文:http://www.cnblogs.com/VOIAFBR/p/5138131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!