《算法(第4版)》读书笔记【一】(如何导入stdlib.jar)
来源:互联网 发布:java要学常用类库吗 编辑:程序博客网 时间:2024/05/16 02:35
书名
这是一本以Java语言为基础的算法书,不同于一般算法书,本书将数据结构看作工具,将算法看作核心,是一本适合入门的专业书籍。
网上很容易就可以找到pdf版本,不过我还是买了纸质版,要70多块,是很厚的一本,值得收藏反复看。
官方网站
http://algs4.cs.princeton.edu
- 官方提供了一个配套网站,提供免费的学习资料;
- 书是死的,网站是活的,学习本书的过程中也可以从中找到书中代码的演示。
- 当然还有很多功能,我们一起发现吧。
目录
第一章 基础
第二章 排序
第三章 查找
第四章 图
第五章 字符串
第六章 背景
第一章
1.1 基础编程模型
1.1.1 Java程序的基本结构
1.1.2 原始数据类型:整型(int)、浮点型(double)、布尔型(bealoon)、字符型(char)
+、-、*、/ 都是被重载的,在使用不同的数据类型时,会执行不同的操作。
1.1.2.1表达式
Java中使用中缀表达式,有规范的优先级,但应该尽量使用括号消除对运算符号优先级的依赖。
1.1.2.2 类型转换
尽量别用,在表达式中用同一类型的数据。
1.1.2.3 比较
==、!=、<、<=、>、>= 结果都是布尔型。
1.1.2.4 其他原始数据类型
还有long、short、char、byte、float
1.1.3 语句:声明、赋值(=)、条件(if)、循环(while、for)、调用、返回(return)
1.1.5 数组
1.1.6 静态方法(static修饰符)
静态方法在其他语言中被称为函数。
1.1.6.8 外部库
含有静态方法和数据类型的定义。
1.1.7 API(应用程序编程接口)
将调用和实现分离,只需要之道API中给的信息,不需要知道具体实现方法。
1.1.8 字符串
1.1.8.1 字符串拼接
使用+将两个字符串拼接为一个新字符串,前者在前,后者在后。
1.1.8.2 类型转换
Interger库和Double库提供了和String类型互相转换的静态方法。
1.1.8.3 自动转换
不常使用toString方法,因为在连接字符串时,Java会将任意数据类型转化为String。
1.1.8.4 命令行参数
字符串的另一重要作用是使程序接收从命令行传递来的信息,这需要了解java程序运行机制。
//f:\test.javapublic class test{ public static void main(String[] args) { for(int i = 0; i < args.length; ++i) { System.out.println("args["+i+"]"+" is "+args[i]); } } }
在命令行中运行它。
F:\>javac test.javaF:\>java test my name is seven !args[0] is myargs[1] is nameargs[2] is isargs[3] is sevenargs[4] is !
可以看到,main函数传入了参数。
Java和操作系统都默认字符串作为传递参数,我尝试将String换成其他类型后,编译可以通过,但不能运行。
F:\>javac test.javaF:\>java test 100 200 300错误: 在类 test 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.application.Application
参考:http://blog.csdn.net/sum_tw/article/details/55820376
1.1.9 标准输入/输出
标准输入、输出和绘图库是建立一个Java程序和外部交流的简易模型。
书中和网站上写的是在命令行中的使用办法,不过我这里用的是eclipse。
先从官网下载好官方提供的jar包,并导入eclipse中。
这样导入stdlib包之后却无法使用,于是我又在网上搜索了一下资料,找到原因如下。
只要把它的jar包解压出来放在子目录下面,重新打包一下就好了。
它的jar包里面没有包结构,当我们导入这个jar包到IDE集成开发的lib库中后,我们可以在src目录下的java文件中不用import就可以使用StdOut等它的类,但是当我们创建包之后,比如src/com目录下再使用就不行了,也不能使用import导入,因为它没有子目录可供我们导,我们要做的就是添加这个子目录,然后就好了。
参考:https://zhidao.baidu.com/question/509752099.html
那么这里有两种解决方案。
第一种是自己重新打包。
第二种是从官网上下载打包版本stdlib-package.jar。
我就直接从官网上下载了,仿佛过了一个世纪之后,可以看到运行终于成功啦。
//java文件package algs4;import edu.princeton.cs.introcs.*;public class Test { public static void main(String[] args) { StdOut.println("Hello, World"); }}//控制台输出Hello, World
1.1.9.7 标准绘图库
敲了一个书上的代码,并稍微改了一下,还挺有趣的。
import edu.princeton.cs.introcs.*;public class Test { public static void main(String[] args) { int N = 100; StdDraw.setXscale(0,N); StdDraw.setYscale(0,N*N); StdDraw.setPenRadius(.005); for(double i = 1; i <= N; i=i+0.1) { StdDraw.point(i, i); StdDraw.point(i, i*i); StdDraw.point(i, i*Math.log(i)); } }}
1.1.10 二分查找
先把代码放在这里吧,还没有改成IDE适用版。
import edu.princeton.cs.introcs.*;import java.util.Arrays;public class Test { public static int rank(int key,int[] a) { //数组必须是有序的 int lo = 0; int hi = a.length - 1; while(lo <= hi) { //被查找地键要么不存在,要么必然存在于a[lo..hi]之中 int mid = lo + (hi - lo)/2; if (key < a[mid]) hi = mid - 1; else if (key > a[mid]) lo = mid + 1; else return mid; } return -1; } public static void main(String[] args) { int[] whitelist = In.readInts(args[0]); Arrays.sort(whitelist); while(!StdIn.isEmpty()) { //读取键值,如果不存在于白名单中则将其打印 int key = StdIn.readInt(); if(rank(key,whitelist) < 0) StdOut.println(key); } }}
- 《算法(第4版)》读书笔记【一】(如何导入stdlib.jar)
- 算法(第4版)--读书笔记
- 《算法导论(第3版)》读书笔记(一)算法基础
- 《算法》读书笔记(一)
- Coursera算法课程中如何在eclipse中调用外部库stdlib.jar
- 读书笔记_算法第四版(一)
- 读书笔记_算法第四版(一)
- 《算法导论》读书笔记(一)
- 随机函数(stdlib)
- [算法竞赛入门经典(第2版)读书笔记] ,第一章
- 精通正则表达式(第3版)读书笔记(一)
- 《深入浅出MFC第2版》读书笔记(一)
- PHP与MySQL程序设计(第3版)读书笔记(一)
- 《JavaScript高级程序设计(第3版)》读书笔记(一)
- 《C程序设计语言第2版·新版》读书笔记(一)
- 如何理解stdlib.h里的_countof()宏(转)
- 关于Algs4书中导入Stdlib.jar 和 algs4.jar包的问题
- 关于Algs4书中导入Stdlib.jar 和 algs4.jar包的问题
- Dagger2的基本用法
- 程序员如何判断是否到了该辞职的时候?
- RecyclerView中的item点击事件
- 纯css动画图片相册
- 临时绑定
- 《算法(第4版)》读书笔记【一】(如何导入stdlib.jar)
- 【easyUI】datagrid 通过formatter读取嵌套数据
- Android设计模式(十六)-中介者模式
- 几个存储过程实例(已测可用)
- c++中各种类型转换
- 取球问题
- Linux中vim的配置
- ACM刷题之HDU————敌兵布阵
- 代码整洁之道精华——第三章 函数