JAVA ACM入门及技巧

摘录自互联网!

基本输入输出: 
(1) JDK 1.5.0 新增的Scanner类为输入提供了良好的基础,简直就是为ACM-ICPC而设的。 
一般用法为: 

复制代码
import java.io.* 
import java.util.* 
public class Main { 
      public static void main(String args[]) { 
          Scanner cin = new Scanner(new BufferedInputStream(System.in)); 
      } 
} 
复制代码



当然也可以直接 Scanner cin = new Scanner(System.in); 只是加Buffer可能会快一些 
(2) 
读一个整数:int n = cin.nextInt();相当于scanf("%d", &n);cin >> n; 
读一个字符串:String s = cin.next();相当于scanf("%s", s);或 cin >> s; 
读一个浮点数:double t = cin.nextDouble();相当于scanf("%lf", &t); 或 cin >> t; 
读一整行: String s = cin.nextLine();相当于gets(s); 或 cin.getline(...); 
判断是否有下一个输入可以用 cin.hasNext() 或 cin.hasNextInt() 或 cin.hasNextDouble() 等,具体见 TOJ 1001 例程。 
(3) 
输出一般可以直接用 System.out.print() 和 System.out.println(),前者不输出换行,而后者输出。 
比如:System.out.println(n);    // n 为 int 型 
同一行输出多个整数可以用 
 System.out.println(new Integer(n).toString() + " " + new Integer(m).toString()); 
也可重新定义: 
static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out)); 
cout.println(n); 
(4) 
对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类, 

复制代码
import java.text.*; 
DecimalFormat f = new DecimalFormat("#.00#"); 
DecimalFormat g = new DecimalFormat("0.000"); 
double a = 123.45678, b = 0.12; 
System.out.println(f.format(a)); 
System.out.println(f.format(b)); 
System.out.println(g.format(b)); 
复制代码



这里0指一位数字,#指除0以外的数字。 
2. 大数字 
BigInteger 和 BigDecimal 是在java.math包中已有的类,前者表示整数,后者表示浮点数 
用法: 不能直接用符号如+、-来使用大数字,例如: 
(import java.math.*)    // 需要引入 java.math 包 

BigInteger a = BigInteger.valueOf(100); 
BigInteger b = BigInteger.valueOf(50); 
BigInteger c = a.add(b)    // c = a + b; 

主要有以下方法可以使用: 

复制代码
BigInteger add(BigInteger other) 
BigInteger subtract(BigInteger other) 
BigInteger multiply(BigInteger other) 
BigInteger divide(BigInteger other) 
BigInteger mod(BigInteger other) 
int compareTo(BigInteger other) 
static BigInteger valueOf(long x) 
复制代码

输出大数字时直接使用 System.out.println(a) 即可。 
3. 字符串 

复制代码
String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始: 
String a = "Hello";      // a.charAt(1) = ’e’ 
用substring方法可得到子串,如上例 
System.out.println(a.substring(0, 4))      // output "Hell" 
注意第2个参数位置上的字符不包括进来。这样做使得 s.substring(a, b) 总是有 b-a个字符。 字符串连接可以直接用 + 号,如 
String a = "Hello"; 
String b = "world"; 
System.out.println(a + ", " + b + "!");      // output "Hello, world!" 
如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。 
复制代码

4. 调用递归(或其他动态方法) 
在主类中 main 方法必须是 public static void 的,在 main 中调用非static类时会有警告信息, 可以先建立对象,然后通过对象调用方法: 

?
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 ); 
      
}

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

Java进制转换~集锦

由于Unicode兼容ASCII(0~255),因此,上面得到的Unicode就是ASCII。

java中进行二进制,八进制,十六进制,十进制间进行相互转换       

复制代码
Integer.toHexString(int i)十进制转成十六进制

Integer.toOctalString(int i) 十进制转成八进制

Integer.toBinaryString(int i)十进制转成二进制

Integer.valueOf("FFFF",16).toString()十六进制转成十进制

Integer.valueOf("876",8).toString()八进制转成十进制

Integer.valueOf("0101",2).toString()二进制转十进制
复制代码

至于转换成二进制或其他进制,Java API提供了方便函数,你可以查Java的API手册。 

以字符a的ASCII为例: 

复制代码
int i = 'a'; 
String iBin = Integer.toBinaryString(i);//二进制 
String iHex = Integer.toHexString(i);//十六进制 
String iOct = Integer.toOctalString(i);//八进制 
String iWoKao = Integer.toString(i,3);//三进制或任何你想要的35进制以下的进制DEC
复制代码

有什么方法可以直接将2,8,16进制直接转换为10进制的吗?

java.lang.Integer类

parseInt(String s, int radix)

使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

复制代码
examples from jdk:
parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("99", 8) throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787
进制转换如何写(二,八,十六)不用算法
Integer.toBinaryString
Integer.toOctalString
Integer.toHexString
例一:
public class Test{
public static void main(String args[]){
   int i=100;
   String binStr=Integer.toBinaryString(i);
   String otcStr=Integer.toOctalString(i);
   String hexStr=Integer.toHexString(i);
   System.out.println(binStr);
例二:
public class TestStringFormat {
public static void main(String[] args) {
   if (args.length == 0) {
      System.out.println("usage: java TestStringFormat <a number>");
      System.exit(0);
   }

   Integer factor = Integer.valueOf(args[0]);
   String s;
   s = String.format("%d", factor);
   System.out.println(s);
   s = String.format("%x", factor);
   System.out.println(s);
   s = String.format("%o", factor);
   System.out.println(s);
}

}

各种数字类型转换成字符串型:
String s = String.valueOf( value); // 其中 value 为任意一种数字类型。

字符串型转换成各种数字类型:
String s = "169"; 
byte b = Byte.parseByte( s ); 
short t = Short.parseShort( s ); 
int i = Integer.parseInt( s ); 
long l = Long.parseLong( s ); 
Float f = Float.parseFloat( s ); 
Double d = Double.parseDouble( s );

数字类型与数字类对象之间的转换:
byte b = 169; 
Byte bo = new Byte( b ); 
b = bo.byteValue();
short t = 169; 
Short to = new Short( t ); 
t = to.shortValue();
int i = 169; 
b = bo.byteValue();
short t = 169; 
Short to = new Short( t ); 
t = to.shortValue();

int i = 169; 
Integer io = new Integer( i ); 
i = io.intValue();

long l = 169; 
Long lo = new Long( l ); 
l = lo.longValue();

float f = 169f; 
Float fo = new Float( f ); 
f = fo.floatValue();

double d = 169f; 
Double dObj = new Double( d ); 
d = dObj.doubleValue();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值