转载自: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();

 

转载于:https://www.cnblogs.com/pomodoro/p/8525717.html

蓝桥杯Java输入输出相关相关推荐

  1. 2013第四届蓝桥杯Java组省赛题解析

    2013第四届蓝桥杯Java组省赛题解析 目录 第一题:高斯日记 第二题:马虎的算式 第三题:第39级台阶 第四题:黄金连分数 ​第五题:前缀判断 第六题:三部排序 ​第七题:错误票据 第八题:翻硬币 ...

  2. 杨辉三角形--2021蓝桥杯Java组

    杨辉三角形–2021蓝桥杯Java组 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下.从左到右的顺序把所有数排成一列,可以得到如下数列:1,1,1,1,2,1,1,3,3,1,1,4,6 ...

  3. 蓝桥杯Java大学C组近三年真题解析(三)——暴力、模拟题

    目录 第十届 求和 题目 题解 代码 矩形切割 题目 题解一 代码 代码 代码 题解二 代码 不同子串 题目 题解 代码 质数 题目 题解 代码 最大降雨量 题目 题解 代码 旋转 题目 题解 代码 ...

  4. 蓝桥杯Java大学C组近三年真题解析(二)——暴力、模拟题

    目录 第十一届 约数个数 题目 题解 代码 代码 寻找 2020 题目 题解 代码 代码 跑步锻炼 题目 题解 代码 代码 代码 灵活使用Excel 平面分割 题目 题解 代码 代码 七段码 题目 ​ ...

  5. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  6. 蓝桥杯Java历年真题与答案_蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的)...

    蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的) 1蓝桥杯 java 历年真题及答案整理(闭关一个月,呕心沥血整理出来的)1. 算法是这样的,如果给定 N 个不同字符,将这 N 个 ...

  7. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  9. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

最新文章

  1. 2017年2月18日 K-means
  2. Linux grep 命令初步学习
  3. linux系统日志_第十二章:走进Linux世界——系统日志管理,日志轮转。
  4. how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
  5. [凯立德]2014秋季版C1204-C7K05-3321J0L(SP2)WinCE版
  6. ASP.NET的ADO(ActiveX Data Objects)
  7. Linux下防火墙开启相关端口及查看已开启端口
  8. ibm服务器如何进入u盘装系统,加密u盘在电脑上怎么打开ibm服务器u盘装系统
  9. TS文件合并,这里提供了一点小思路。
  10. 根据时间排序(collection.sort())
  11. 神州信息“六合上甲”一体化数据开发平台全面数智升级!
  12. java查找文件路径_如何查找java路径?
  13. Quartz教程六--CronTrigger
  14. H3C交换机的irf配置
  15. 阿里巴巴B2B测试用例编写规范
  16. Linux—team高可用
  17. GPU编程和流式多处理器(三)
  18. 论文阅读Vertebral Labelling in Radiographs: Learning a Coordinate Corrector to Enforce Spinal Shape
  19. 美和易思 MOOT去鼠标检测,快进,倍速,自动下一章
  20. 学科资源网 php源码,素材资源解析平台PHP源码 V8.0

热门文章

  1. C语言 比较字符串的大小关系
  2. mysql内部安装workb_centOS系统中下安装mysql workbench图文详细步骤
  3. anki 插入表格_anki|建造师选择题制作的方法
  4. layer 弹出框的使用
  5. Java通过链表实现队列
  6. 链表相交以及找循环链表入口
  7. asp.net高亮显示搜索关键字的两个方法
  8. Struts 声明式异常处理和个性化异常处理(转)
  9. Linq to sql和lambda
  10. MyBatis超详细介绍——SQL语句构建器类