算法学习一

本文介绍了《算法》第四版教材中的Java基础知识,包括原始数据类型、语句、数组、静态方法、递归以及API的使用。特别强调了递归的概念,指出其在解决问题时的重要性。同时,详细阐述了在Java环境下进行控制台输入输出的操作,包括配置环境、编译和运行二分查找程序的步骤。
摘要由CSDN通过智能技术生成

教材:《算法》(第四版)-Robert Sedgewick

Java程序的基本结构

原始数据类型、语句、数组、静态方法、字符串、标准输入/输出、数据抽象。

1.原始数据类型与表达式

int、double、boolean、char
ps:运算符+-*/ 都是被重载过的,会对不同类型执行不同的操作

2.语句

break:立即从循环中退出;
continue:立即开始下一轮循环。

3.数组
double[] a = new double[N];//默认初始值为0.0

声明、创建(new一个)、初始化
Ps:必须明确创建数组来告诉编译器在编译时需要预留多少空间。

4.静态方法(即函数)
public static double sqrt (double c) {
    <...>
    return ...
}

修饰符static将这类方法和实例方法区别开

5.递归
  • 递归总有一个最简单的情况——方法的第一条语句总是一个包含return的条件语句;
  • 递归调用总是去尝试解决一个规模更小的子问题,收敛;
  • 递归调用的父问题和尝试解决的子问题之间不应该有交集。
6.API(应用程序编程接口)

将调用和实现分离。

7.字符串
8.输入输出
  • 标准输入
public class Average {
    public static void main(String[] args) {
    //取StdIn中所有数的平均值
    double sum = 0.0;
    int cnt = 0;
    while (!StdIn.isEmpty()) {
        sum += StdIn.readDouble();
        cnt++;
        }
    double avg = sum / cnt;
    StdOut.printf("Average is %.5f\n", avg);    
    }
}
9.二分查找
package Algorithms.Ex;

import java.util.Arrays;

import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;

public class BinarySearch {

    public static int rank(int key, int[] a) {
        //数组必须是有序的
        int lo = 0;
        int hi = a.length -1;
        while (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);
        }
    }
}

记录下花了整整一下午的控制台java javac命令的问题:
首先,需要将控制台配置好:运行-外部工具-外部工具配置-程序-命令行配置-位置:C:\Windows\system32\cmd.exe-工作目录选择workspace即可;

其次,按照
http://blog.csdn.net/diverhou/article/details/50608637 配置好所需环境变量;

将两个txt文件存在src目录下后,编译和运行方式如下:
首先,要回到src目录下
D:\Java\workspace\Algorithms\src>javac Algorithms/Ex/BinarySearch.java
在编译时,使用/ 分割包的层次目录

D:\Java\workspace\Algorithms\src>java Algorithms.Ex.BinarySearch tinyW.txt < tinyT.txt
在运行时,使用. 分割包的层次目录

注:在程序中去掉“package Algorithms.Ex;”这句话的话,会得到如下结果:
D:\Java\workspace\Algorithms\src\Algorithms\Ex>javac BinarySearch.java
直接在Ex目录下,编译可行,因为Package限定了

D:\Java\workspace\Algorithms\src\Algorithms\Ex>java BinarySearch tinyW.txt < tinyT.txt
错误: 找不到或无法加载主类 BinarySearch
直接在Ex目录下,运行不可行

然而回到src目录下,运行就可以了,原因是什么有待追究(??????)
D:\Java\workspace\Algorithms\src>java Algorithms.Ex.BinarySearch tinyW.txt < tinyT.txt
50
99
13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值