###输入

import java.io.*;
import java.util.*;
import java.math.*;
 
 
public class Main {
public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        //Scanner cin = new Scanner(System.in); 稍微慢一些
        //int t = cin.nextInt();
        //while(t -- > 0) {
        while(cin.hasNext()) {
            int n = cin.nextInt();
            String s = cin.next();  //读取到空格
            double t = cin.nextDouble();
            String s = cin.nextLine(); //读取整行
            BigInteger a = cin.nextBigInteger();
            BigDecimal b = cin.nextBigDecimal(); //高精度浮点数
            //数组定义和初始化
            int[] Array = new int[MAX_N]; //动态初始化
            int intArray[] = {1,2,3,4}; //静态初始化
            //遍历数组
            for(int i = 0; i < n; i ++) {
                Array[i] = cin.nextInt();
            }
            for(int x:intArray) { //会遍历所有初始化的空间
                total += x;
            }
        }
    }
}

###输出

System.out.print() 和 System.out.println(),前者不输出换行
System.out.println(n);   // n 为 int 型 同一行输出多个整数可以用
System.out.println(new Integer(n).toString() + " " + new Integer(m).toString());
//高精度小数输出保留k位小数
System.out.println(x.setScale(k, BigDecimal.ROUND_DOWN).toPlainString()); //注意小数toString为科学记数法输出
//小数输出需要去除后导零的情况
String ans = b.stripTrailingZeros().toPlainString();
if(ans.startsWith("0")) ans = ans.substring(1);
System.out.println(ans);
//对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,
import java.text.*;
    DecimalFormat g = new DecimalFormat("0.000");
    double a = 123.45678, b = 0.12;
    System.out.println(g.format(b));

###高精度

BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf(50);
BigInteger A = BigInteger.ONE;
BigInteger B = BigInteger.TEN;
BigInteger C = BigInteger ZERO;

BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other) c = a.mod(b) 范围0~b-1
BigInteger reminder(BigInteger other)  c = a.reminder(b) 范围 -b+1 ~ b-1
int compareTo(BigInteger other)  c = a.compareTo(b); -1,0,1表示小于、等于和大于
equals:判断两数是否相等,也可以用compareTo来代替;返回值为Boolean
static BigInteger valueOf(long x) 
pow:c = a.pow(b)=a^b 
gcd,abs:公约数,绝对值 c = a.gcd(b);
negate:取负数 c = a.negate();
min,max:取两个数的较小、大者; c = a.max(b);
intValue,longValue,floatValue,doublue:把该数转换为该类型的数的值。c = a.intValue();
public boolean isProbablePrime(int certainty)  Boolean c = a.isProbablePrime(3); true表示该大数有(1 - 1/2certainty)的可能为素数,FALSE表示一定不为素数

###字符串
转化为char数组

String g = "line";
char c = g.charAt(0);  // returns 'l'
char[] c_arr = g.toCharArray(); // returns a length 4 char array ['l','i','n','e']

数值与字符串的转换

int v = 123;
String s = "123";
int x = Integer.praseInt(s);
String s1 = String.valueOf(v); //or
String s2 = Integer.toString(v);
BigInteger a =new BigInteger(s); 
BigInteger a = new BigInteger("2");

substring

System.out.println(a.substring(0, 4))     // output "Hell"

字符串连接可以直接用 + 号,如

String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!");    // output "Hello, world!"

contains()

String str = "weixueyuan";
System.out.println(str.contains("yuan"));

true

replace

String str1 = "The url of weixueyuan is www.weixueyuan.net!";
String str2 = str1.replace("weixueyuan", "微学苑");
System.out.println(str1);
System.out.println(str2);

The url of weixueyuan is www.weixueyuan.net!
The url of 微学苑 is www.微学苑.net!

replace() 方法不会改变原来的字符串,而是生成一个新的字符串。
split
以指定字符串作为分隔符,对当前字符串进行分割,分割的结果是一个数组

String str = "wei_xue_yuan_is_good";
String strArr[] = str.split("_");
System.out.println(Arrays.toString(strArr));

[wei, xue, yuan, is, good]

###数组

   int intArr[] = {30,20,5,12,55};
   Arrays.sort(intArr);
   int searchVal = 12;
   int retVal = Arrays.binarySearch(intArr,searchVal); //返回所找到的下标

Arrays.fill(arr, 18);

###调用递归(或其他动态方法)

public class Main {
 
    void dfs(int a)
    {
              if () return;
 
             dfs(a+1);
    }
    public static void main(String args[])
    {
 
         Main e = new Main();
              e.dfs(0);
 
    }
}

##牛顿迭代

public void solve(int testNumber, InputReader in, PrintWriter out) {
    //求x=sqrt(n),小数点后保留k位
    BigDecimal n = in.nextBigDecimal();
    int k = in.nextInt();

    BigDecimal x = BigDecimal.valueOf(Math.sqrt(n.doubleValue()));

    //Newton's method: x(n+1)=x(n)-f(x(n))/f'(x(n))
    for (int i=0; i<10; ++i) {
        x = x.add(n.divide(x, k+5, RoundingMode.HALF_UP));
        x = x.divide(BigDecimal.valueOf(2), k+5, RoundingMode.HALF_UP);
    }
    x = x.setScale(k, BigDecimal.ROUND_DOWN);
    out.println(x);
}

其他注意的事项:
(1) Java 是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。
(2) Java 里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。
数组定义后必须初始化,如 int[] a = new int[100];
(3) 布尔类型为 boolean,只有true和false二值,在 if (…) / while (…) 等语句的条件中必须为boolean类型。
在C/C++中的 if (n % 2) … 在Java中无法编译通过。