Java解題常用方法

以前刷題都是用c++,對於java的集合運算和輸入輸出都不熟悉,現在記錄一下。


位運算

注意取餘和取模不同,但是當除數和被除數同號時,兩種運算的結果相同。

//判斷int型變量a是奇數還是偶數
a&1  = 0 偶數
a&1 = 1 奇數
//求平均值,比如有兩個int類型變量x、y,首先要求x+y的和,再除以2,但是有可能x+y的結果會超過int的最大表示範圍,所以位運算就派上用場啦。
(x&y)+((x^y)>>1);
//對於一個大於0的整數,判斷它是不是2的幾次方
((x&(x-1))==0)&&(x!=0)//比如有兩個int類型變量x、y,要求兩者數字交換,位運算的實現方法:性能絕對高效
x ^= y;
y ^= x;
x ^= y;
//求絕對值
int abs( int x )
{
    int y ;
    y = x >> 31 ;
    return (x^y)-y ;        //or: (x+y)^y 
}
//取餘運算,採用位運算實現:
a % (2^n) 等價於 a & (2^n - 1)
//乘法運算   採用位運算實現
a * (2^n) 等價於 a << n
//除法運算轉化成位運算
a / (2^n) 等價於 a>> n
//求相反數
(~x+1)
//對2取餘
a % 2 等價於 a & 1

從控制檯輸入數據

//讀入一個字節
read = (char) System.in.read();
//讀取制定類型數據(Scanner的next()方法用以取得用戶輸入的字符串;nextInt()將取得的輸入字符串轉換爲整數類型;同樣,nextFloat()轉換成浮點型;nextBoolean()轉換成布爾型。)
Scanner scan = new Scanner(System.in);
String read = scan.nextLine();//讀取一行
//使用BufferedReader(字符緩衝流)包裝
BufferedReader br = new BufferedReader(new InputStreamReader(System.in ));
try {
    read = br.readLine();//讀取一行
} catch (IOException e) {}

提取字符串中內容

java中沒有c++裏的scanf函數,無法再讀取字符串的同時取得其中內容。我們使用正則表達式對內容進行提取。

String line = "qwe1.23rty";
Pattern r = Pattern.compile("qwe(.*)rty");
Matcher m = r.matcher(line);
if (m.find( )) {
    System.out.println("Found value: " + m.group(0) );
    System.out.println("Found value: " + m.group(1) );
}

double保留小數位數

//返回double(四捨五入)
double d = 1.2345;
d = (double) Math.round(d * 100) / 100;
//返回string(四捨五入)
double d = 1.2345;
String.format("%.2f", d);

String <->int

int a = Integer.parseInt(s);
String s = String.valueOf(a);
String s = new Integer(a).toString();

String和String Buffer

StringBuffer s = new StringBuffer("abc");
s.append("def");
s.deleteCharAt(2);
s.delete(0,2);
s.insert(1,"hello");
s.reverse();
sb.setCharAt(1,'p');
System.out.println(s.toString());

數組排序

int[] a = new int[]{3, 2, 1};
Arrays.sort(a);//快排
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章