zoukankan      html  css  js  c++  java
  • 蓝桥杯Java输入输出相关

    转载自:http://blog.csdn.net/Chen_Tongsheng/article/details/53354169

    一、注意点   

    1. 类名称必须采用public class Main方式命名

    2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误

    3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件

    4. 在有多行数据输入的情况下,一般按以下代码示例处理:

    import java.util.Scanner;  
      
    import java.io.*;  
      
    public class Main{  
      
        public static void main(String[] args){  
      
            Scanner in1 = new Scanner(System.in);  
      
            Scanner in2 = new Scanner(new BufferedInputStream(System.in));//输入速度较前者 in1 要快,但但一般不用这个BufferedInputStream缓存  
      
            //输入多组测试数据一般用:while(in1.hasNextInt()) 或者是 while(in1.hasNext())   
               
              
        }  
      
    }  
     
    5. 有关System.nanoTime()函数的使用,该函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。
    long startTime = System.nanoTime();    
      
    // Code... 运用算法来解决问题的运行代码  
      
    long estimatedTime = System.nanoTime() - startTime;  

    二、输入输出处理

    由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。

    1. 输入

    格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
    格式2:Scanner sc = new Scanner (System.in);
    在读入数据量大的情况下,格式1的速度会快些。
    读一个整数: int n = sc.nextInt(); 相当于 scanf("%d", &n); 或 cin >> n; 
    读一个字符串:String s = sc.next(); 相当于 scanf("%s", s); 或 cin >> s; 
    读一个浮点数:double t = sc.nextDouble(); 相当于 scanf("%lf", &t); 或 cin >> t; 
    读一整行: String s = sc.nextLine(); 相当于 gets(s); 或 cin.getline(...); 
    判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()

    例1:读入整数
    Input  输入数据有多组,每组占一行,由一个整数组成。 
    Sample Input 
    56
    67
    100
    123 

    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            Scanner in = new Scanner(System.in);    
            while (in.hasNext()) { // 判断是否结束    
                int num = in.nextInt();// 读入整数     
            }    
        }    
    }    

    例2:读入实数
     
    输入数据有多组,每组占2行,第一行为一个整数N,指示第二行包含N个实数。
    Sample Input

    56.9  67.7  90.5  12.8 

    56.9  67.7  90.5  12.8 

    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            Scanner sc = new Scanner(System.in);    
            while (sc.hasNext()) {    
                int n = sc.nextInt();    
                for (int i = 0; i < n; i++) {    
                    double a = sc.nextDouble();    
                }    
            }    
        }    
    }    

    例3:读入字符串【杭电2017 字符串统计】
    输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。


    Sample Input  
    2
    asdfasdf123123asdfasdf
    asdf111111111asdfasdfasdf

    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            Scanner sc = new Scanner(System.in);    
            int n = sc.nextInt();    
            for (int i = 0; i < n; i++) {    
                String str = sc.next();    
        
            }    
        }    
    }    
    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            Scanner sc = new Scanner(System.in);    
            int n = Integer.parseInt(sc.nextLine());    
            for (int i = 0; i < n; i++) {    
                String str = sc.nextLine();    
        
            }    
        }    
    }    

    例3:读入字符串【杭电2005 第几天?】
    给定一个日期,输出这个日期是该年的第几天。 
    Input  输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成
    1985/1/20
    2006/3/12

    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            Scanner sc = new Scanner(System.in);    
            int n = Integer.parseInt(sc.nextLine());    
            for (int i = 0; i < n; i++) {    
                String str = sc.nextLine();    
        
            }    
        }    
    }    

    2. 输出  

    函数:
    System.out.print(); 
    System.out.println(); 
    System.out.format();
    System.out.printf();  

    3. 规格化的输出

    函数:
    // 这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.
        DecimalFormat fd = new DecimalFormat("#.00#");
        DecimalFormat gd = new DecimalFormat("0.000");
        System.out.println("x =" + fd.format(x));
        System.out.println("x =" + gd.format(x));

    import java.util.Scanner;    
        
    public class Main {    
        public static void main(String[] args) {    
            NumberFormat formatter = new DecimalFormat("000000");    
            String s = formatter.format(-1234.567); // -001235    
            System.out.println(s);    
            formatter = new DecimalFormat("##");    
            s = formatter.format(-1234.567); // -1235    
            System.out.println(s);    
            s = formatter.format(0); // 0    
            System.out.println(s);    
            formatter = new DecimalFormat("##00");    
            s = formatter.format(0); // 00    
            System.out.println(s);    
        
            formatter = new DecimalFormat(".00");    
            s = formatter.format(-.567); // -.57    
            System.out.println(s);    
            formatter = new DecimalFormat("0.00");    
            s = formatter.format(-.567); // -0.57    
            System.out.println(s);    
            formatter = new DecimalFormat("#.#");    
            s = formatter.format(-1234.567); // -1234.6    
            System.out.println(s);    
            formatter = new DecimalFormat("#.######");    
            s = formatter.format(-1234.567); // -1234.567    
            System.out.println(s);    
            formatter = new DecimalFormat(".######");    
            s = formatter.format(-1234.567); // -1234.567    
            System.out.println(s);    
            formatter = new DecimalFormat("#.000000");    
            s = formatter.format(-1234.567); // -1234.567000    
            System.out.println(s);    
        
            formatter = new DecimalFormat("#,###,###");    
            s = formatter.format(-1234.567); // -1,235    
            System.out.println(s);    
            s = formatter.format(-1234567.890); // -1,234,568    
            System.out.println(s);    
        
            // The ; symbol is used to specify an alternate pattern for negative    
            // values    
            formatter = new DecimalFormat("#;(#) ");    
            s = formatter.format(-1234.567); // (1235)    
            System.out.println(s);    
        
            // The ' symbol is used to quote literal symbols    
            formatter = new DecimalFormat(" '# '# ");    
            s = formatter.format(-1234.567); // -#1235    
            System.out.println(s);    
            formatter = new DecimalFormat(" 'abc '# ");    
            s = formatter.format(-1234.567); // - abc 1235    
            System.out.println(s);    
        
            formatter = new DecimalFormat("#.##%");    
            s = formatter.format(-12.5678987);    
            System.out.println(s);    
        }    
    }    

    4. 字符串处理 String

    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类。 

    5. 高精度

    BigInteger和BigDecimal可以说是acmer选择java的首要原因。
    函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf().

    import java.io.BufferedInputStream;    
    import java.math.BigInteger;    
    import java.util.Scanner;    
    public class Main {    
    public static void main(String[] args)   {    
    Scanner cin = new Scanner (new BufferedInputStream(System.in));    
            int a = 123, b = 456, c = 7890;    
            BigInteger x, y, z, ans;    
            x = BigInteger.valueOf(a);     
            y = BigInteger.valueOf(b);     
            z = BigInteger.valueOf(c);    
            ans = x.add(y); System.out.println(ans);    
            ans = z.divide(y); System.out.println(ans);    
            ans = x.mod(z); System.out.println(ans);    
            if (ans.compareTo(x) == 0) System.out.println("1");    
        }    
    }    

    6. 进制转换

    String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).
    int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).  
    BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.

     7. 数组排序

    函数:Arrays.sort();

     
  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/pomodoro/p/8525717.html
Copyright © 2011-2022 走看看