java学习小记 输入输出 字符串 函数 高精度 进制转换
2014-02-01 20:26
525 查看
经过一场新年练习赛之后终于下定决心学习java了,毕竟c++的大数模板有较大的局限性,java这方面就是作弊器一般的存在……
个人觉得在有c/c++语言基础的情况下学习别的语言是比较轻松的,不过时间不多,也只能速成了,遇到新问题再慢慢学。
以下算是学习笔记,有很多个人的理解,因为是速成的关系,可能有些错误,还望大家指正。
学习链接:
J***A ACM 基础 - 话别深秋 - 博客频道 - CSDN.NET
【学习笔记】ACM与Java - 脑残的孩子只有慢慢学。。 - 博客频道 - CSDN.NET
java在ACM中的应用(转载)_依然_新浪博客
DecimalFormat的用法 Java小数(float、dobule)格式化_!I am a Programmer !_课后小组
Java函数的基本知识 - SereinChan - 博客频道 - CSDN.NET
(2) Java 简单而功能强大,有些东西用Java实现起来更为方便,比如高精度。
比如 Poj 2429 用java和用c++简直两个难度……
(3) 用Java不易犯细微的错误,比如C/C++中的指针, “if (n = m) ... ” 等
(4) 目前来看Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。在具体竞赛时也算多一种选择。
(5) 学会Java对以后工作有好处。现在国外很多地方会Java的人比会C/C++的人多。
(1) 网上说的很多的“取消自动validation”我没找到……
(2) 设置工作空间的项目编码, 防止出现乱码
Window - Preferences - General - Workspace将"Text file encoding"选为"Other" - "UTF-8"
改变现有项目的编码的步骤: 右击项目属性, 选择"Text file encoding"的编码
(3) 增强Eclipse的自动代码提示功能
1. Window -> Preferences -> Java -> Editor -> Content Assist
2. 将"Auto Activation triggers for java"设置为".abc"(默认是"."), 点"Apply"应用
3. 导出目前的Eclipse配置文件: File -> Export -> General -> Perferences, 选择保存路径, 保存得到*.epf文件
4. 用文本编辑器打开刚才保存的*.epf文件, 搜索".abc", 将".abc"部分改为
".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ(," (以上为自动提示的触发字符,根据个人习惯设置), 保存此配置文件(个人觉得不太好用,容易出错)
5. 导入此配置文件: File -> import -> General -> Perferences, 导入修改后的配置文件.
(4) 关闭不需要的启动项MyEclipse:
Windows –> Perferences–> General–> Startup and Shutdown
(5) 改变字号及字体
右键 - Perferences - General - Appearance - Colors and Fonts
读一个字符串: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(...);
读一个大数: BigInteger c = cin.nextBigInteger();
不过需要注意的是它们没有像scanf一样有判断是否输入到结尾的功能。
这时候需要用一个Scanner类的方法hasnext()来判断是否输入到文件结尾;
以 Hdu 1000 A + B Problem 为例
System.out.print(); //
cout << …;
System.out.println(); // cout << … << endl;
System.out.printf(); //
与C中的printf用法类似.
输出结果:
格式化之前的数字: 1234.56789
采用style: 0.0格式化之后: 1234.6
采用style: 00000.000 kg格式化之后: 01234.568 kg
采用style: ##000.000 kg格式化之后: 1234.568 kg
采用style: -000.000格式化之后: -1234.568
采用style: -0,000.0#格式化之后: -1,234.57
采用style: 0.00E000格式化之后: 1.23E003
采用style: 0.00%格式化之后: 123456.79%
采用style: 0.00‰格式化之后: 1234567.89‰
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!"
java中字符串String是不可以修改的,要修改只能转换为字符数组.
另外,Java 是面向对象的语言,里面的函数统称为方法。
在主类中 main 方法必须是 public static void 的,在 main 中调用非static类时会有警告信息,可以先建立对象,然后通过对象调用方法:
对于大数来说,Java提供了BigDecimal和BigInteger两个类,都包含在java.math.*里面。
BigInteger是大整型类,BigDecimal是大浮点型类。
这两个类产生的对象没有数据范围,只要你的电脑内存足够就可以。
用法:
不能直接用符号如+、-来使用大数字,例如:
(import 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) 即可。
这里先摘抄一段:
POJ高精度题目汇总:
POJ 1131 1205 1220 1405 1503 1604 1894 2084 2305 2325 2389 2413 3101 3199
注意:java中布尔类型为 boolean,只有true和false二值,在 if (...) / while (...) 等语句的条件中必须为boolean类型。
在C/C++中的 if (n % 2) ... 在Java中无法编译通过。
个人觉得在有c/c++语言基础的情况下学习别的语言是比较轻松的,不过时间不多,也只能速成了,遇到新问题再慢慢学。
以下算是学习笔记,有很多个人的理解,因为是速成的关系,可能有些错误,还望大家指正。
学习链接:
J***A ACM 基础 - 话别深秋 - 博客频道 - CSDN.NET
【学习笔记】ACM与Java - 脑残的孩子只有慢慢学。。 - 博客频道 - CSDN.NET
java在ACM中的应用(转载)_依然_新浪博客
DecimalFormat的用法 Java小数(float、dobule)格式化_!I am a Programmer !_课后小组
Java函数的基本知识 - SereinChan - 博客频道 - CSDN.NET
Java做ACM-ICPC的特点:
(1) 在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢而已。(2) Java 简单而功能强大,有些东西用Java实现起来更为方便,比如高精度。
比如 Poj 2429 用java和用c++简直两个难度……
(3) 用Java不易犯细微的错误,比如C/C++中的指针, “if (n = m) ... ” 等
(4) 目前来看Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。在具体竞赛时也算多一种选择。
(5) 学会Java对以后工作有好处。现在国外很多地方会Java的人比会C/C++的人多。
软件的配置
我用的IDE是eclipse 4.3.1(1) 网上说的很多的“取消自动validation”我没找到……
(2) 设置工作空间的项目编码, 防止出现乱码
Window - Preferences - General - Workspace将"Text file encoding"选为"Other" - "UTF-8"
改变现有项目的编码的步骤: 右击项目属性, 选择"Text file encoding"的编码
(3) 增强Eclipse的自动代码提示功能
1. Window -> Preferences -> Java -> Editor -> Content Assist
2. 将"Auto Activation triggers for java"设置为".abc"(默认是"."), 点"Apply"应用
3. 导出目前的Eclipse配置文件: File -> Export -> General -> Perferences, 选择保存路径, 保存得到*.epf文件
4. 用文本编辑器打开刚才保存的*.epf文件, 搜索".abc", 将".abc"部分改为
".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ(," (以上为自动提示的触发字符,根据个人习惯设置), 保存此配置文件(个人觉得不太好用,容易出错)
5. 导入此配置文件: File -> import -> General -> Perferences, 导入修改后的配置文件.
(4) 关闭不需要的启动项MyEclipse:
Windows –> Perferences–> General–> Startup and Shutdown
(5) 改变字号及字体
右键 - Perferences - General - Appearance - Colors and Fonts
基本的输入输出
输入
读一个整数: 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(...);
读一个大数: BigInteger c = cin.nextBigInteger();
不过需要注意的是它们没有像scanf一样有判断是否输入到结尾的功能。
这时候需要用一个Scanner类的方法hasnext()来判断是否输入到文件结尾;
以 Hdu 1000 A + B Problem 为例
import java.util.*; //我们需要其中的 Scanner类声明的对象来扫描控制台输入 public class Main { public static void main (String [] args) { Scanner cin = new Scanner(System.in); //对于Scanner 类声明对象cin用来扫描控制台输入 while ( cin.hasNext() ) //判断是否文件结束 { int a=cin.nextInt(); int b=cin.nextInt(); System.out.println(a+b); } cin.close(); //输入关闭 } }
基本输出
函数:System.out.print(); System.out.println(); System.out.printf();System.out.print(); //
cout << …;
System.out.println(); // cout << … << endl;
System.out.printf(); //
与C中的printf用法类似.
public class Main { public static void main (String [] args) { double d=9999.99999; System.out.format("%f",d); //9999.999990 没有回车 System.out.format("%10.10f",d).println(); //9999.9999900000 输出回车 System.out.format("%.4f",d).println(); //10000.0000 输出回车 System.out.format("%3.4f",d).println(); //10000.0000 输出回车 System.out.println(d); //输出当前变量 输出回车 System.out.println(); // 输出回车 System.out.printf("%f",d); //9999.999990 没有回车 System.out.print(d); //9999.99999 没有回车 } }
浮点数的规格化输出
import java.text.*; //使用规格化输出需要这个 public class Main { public static void main(String[] args) { DecimalFormat df = new DecimalFormat(); double data = 1234.56789; System.out.println("格式化之前的数字: " + data); String style = "0.0";//定义要显示的数字的格式 df.applyPattern(style);// 将格式应用于格式化器 System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); style = "00000.000 kg";//在格式后添加诸如单位等字符 df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的"#"表示如果该位存在字符,则显示字符,如果不存在,则不显示。 style = "##000.000 kg"; df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的"-"表示输出为负数,要放在最前面 style = "-000.000"; df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的","在数字中添加逗号,方便读数字 style = "-0,000.0#"; df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的"E"表示输出为指数,"E"之前的字符串是底数的格式, // "E"之后的是字符串是指数的格式 style = "0.00E000"; df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的"%"表示乘以100并显示为百分数,要放在最后。 style = "0.00%"; df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df.format(data)); // 模式中的"\u2030"表示乘以1000并显示为千分数,要放在最后。 style = "0.00\u2030"; //在构造函数中设置数字格式 DecimalFormat df1 = new DecimalFormat(style); //df.applyPattern(style); System.out.println("采用style: " + style + "格式化之后: " + df1.format(data)); } }
输出结果:
格式化之前的数字: 1234.56789
采用style: 0.0格式化之后: 1234.6
采用style: 00000.000 kg格式化之后: 01234.568 kg
采用style: ##000.000 kg格式化之后: 1234.568 kg
采用style: -000.000格式化之后: -1234.568
采用style: -0,000.0#格式化之后: -1,234.57
采用style: 0.00E000格式化之后: 1.23E003
采用style: 0.00%格式化之后: 123456.79%
采用style: 0.00‰格式化之后: 1234567.89‰
字符串
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!"
java中字符串String是不可以修改的,要修改只能转换为字符数组.
public class Main { public static void main(String[] args) { String st = "abcdefg"; System.out.println(st.charAt(0)); // st.charAt(i)就相当于st[i]. char [] ch; ch = st.toCharArray(); // 字符串转换为字符数组. for (int i = 0; i < ch.length; i++) ch[i] += 1; System.out.println(ch); // 输出为“bcdefgh”. if (st.startsWith("a")) // 如果字符串以'a'开头. st = st.substring(1); // 则从第1位开始copy(开头为第0位). System.out.println(st); // 输出为"bcdefg" } }
函数
和c++基本一样……只是函数需要加修饰符 static另外,Java 是面向对象的语言,里面的函数统称为方法。
在主类中 main 方法必须是 public static void 的,在 main 中调用非static类时会有警告信息,可以先建立对象,然后通过对象调用方法:
public class Main { void dfs(int a) { if (a>5) return; dfs(a+1); } public static void main (String args[]) { Main e = new Main(); e.dfs(0); } }
高精度
BigInteger和BigDecimal可以说是acmer选择java的首要原因。对于大数来说,Java提供了BigDecimal和BigInteger两个类,都包含在java.math.*里面。
BigInteger是大整型类,BigDecimal是大浮点型类。
这两个类产生的对象没有数据范围,只要你的电脑内存足够就可以。
用法:
不能直接用符号如+、-来使用大数字,例如:
(import 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) 即可。
import java.math.BigInteger; public class Main { public static void main(String[] args) { int a=6,b=3; BigInteger x,y,z; x=BigInteger.valueOf(a); //转化赋值 y=BigInteger.valueOf(b); z=BigInteger.valueOf(0); System.out.println(x.add(y)); //加 System.out.println(x.subtract(y)); //减 System.out.println(x.multiply(y)); //乘 System.out.println(x.divide(y)); //除 System.out.println(x.mod(y)); //取余 if (z.compareTo( BigInteger.valueOf(0) ) == 0) //相等返回0 System.out.println("1"); } }
进制转换
public class Main { public static void main (String[] args) { String string; int a=8,x=2; string = Integer.toString(a, x); //把int型数据转换乘X进制数并转换成string型 System.out.println(string); int b = Integer.parseInt(string, x);//把字符串当作X进制数转换成int型 System.out.println(b); } }
写在最后
貌似java的数组十分复杂,需要继续学习,详细情况应该会在下一篇博文中记录。这里先摘抄一段:
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner (new BufferedInputStream(System.in)); int n = cin.nextInt(); int a[] = new int ; for (int i = 0; i < n; i++) a[i] = cin.nextInt(); Arrays.sort(a); for (int i = 0; i < n; i++) System.out.print(a[i] + " "); } }
POJ高精度题目汇总:
POJ 1131 1205 1220 1405 1503 1604 1894 2084 2305 2325 2389 2413 3101 3199
注意:java中布尔类型为 boolean,只有true和false二值,在 if (...) / while (...) 等语句的条件中必须为boolean类型。
在C/C++中的 if (n % 2) ... 在Java中无法编译通过。
相关文章推荐
- Java学习笔记——字符串常用函数
- java学习笔记--数学函数、字符和字符串
- Java学习笔记:基本类型、字符串及控制台输入输出
- Java学习笔记35:Java常用字符串操作函数
- java学习小记 高精度的相关方法
- Java学习笔记35:Java常用字符串操作函数
- 关于Java 字符串相关函数小记
- Java学习笔记之字符串和部分函数
- CoreJava学习1——字符串处理(String和StringBuilder)&正则式
- 黑马程序员--Java基础学习之IO流之字节流、字符流、读取写入文件、Copy文件、键盘输入输出、流操作的基本规律
- java学习笔记(三)字符串
- java基础学习之函数、数组
- (05)Java学习笔记——函数(方法)
- java学习12--函数--函数定义和功能
- Java输出字符串大小写字母个数【Java学习笔记】
- 黑马程序员——java学习笔记--字符串
- 用java编写一个函数,统计一个字符串中每个字母出现的次数
- Java学习笔记(二):字符串String类
- JAVA字符串处理函数列表一览
- java中的字符串分割函数