逻辑运算符 “&&“ 与”||“
1、js中的 || 符号 —— ‘真前假后’
只要‘||’前面为false,不管‘||’后面是true or false, 都返回‘||’后面的值
只要‘||’前面的为true,不管‘||’后面是true or false,都返回‘||’前面的值
2、js中的 && 符号 —— ‘假前真后’
只要‘&&’前面是false,无论‘&&’后面是true or false,结果都将返回‘&&’前面的值
只要‘&&’前面是true,无论‘&&’后面是true or false, 结果都将返回‘&&’后面的值
3、js逻辑运算中: 0、"" 、null、false、undefined、NaN都相当于false,其它为true
有限状态自动机
百度百科:是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。有限自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态自动机可以表示为一个有向图。
对有限状态机的介绍
字符串匹配算法之有限状态自动机
这是对有限状态自动机比较详细的一篇
输入未知长度的数据,可用string类进行转化
String[] str = new string[0];
str = in.nextLine().split(" ");
int[] a = new int[str.length];
for(int i = 1;i<str.length;i++)
a[i] = Integer.valueOf(str[i]);
通用方法 Computable界面
public static Computable sum = (Computable []a,int n){
if(a.length == 0) return null;
Computable sum = (Computable) a[0].zero();
for(int i=0;i<n;i++)
sum.increment(a[i]);
return sum;
}
//利用此界面使方法sum通用化
java.lang.Computable 界面
Java的comparable界面中唯一的方法头compareTo用于比较两个元素的大小,例如java.lang.comparable.x.compareTo(y)---返回(x-y)的符号
当x<y时,返回值小于0,当x=y,返回值等于0,当x>y,返回值大于0
Operable界面
有些通用方法同时需要Computable界面和Comparable界面的支持
为此可定义Operable界面如下
public interface Operable extends Computable,Comparable{ }
自定义包装类
由于java的包装类如Integer等已定义为final型,因此无法定义其子类,作进一步扩充。为了需要可自定义包装类。
字符串转数组省略空格
String line = in.nextLine();
String[] array = line.split("\\s+");
//"\\s+"可以去掉所有空白的部分,包括空格键,tab键,回车键
line.split(" ")只能去掉有空格造成的空白
System.out.println(Arrays.stream(b[n-1]).max().getAsInt());
用来输出二维数组b[n][m]最后一行b[n]中的最大值。
二维数组的快速输出
PrintWriter pw = new PrintWriter(new BufferedWriter(OutputStreamWriter(System.out)));
StreamTokenizer的用法
普通用法
StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken(); // 获取下一组标记 默认是按照空格分割的 回车,tab是结束符
int i=(int) st.nval; //st.navl默认解析出的格式是double
st.nextToken();
double j=st.nval;
st.nextToken();
String s=st.sval;
多组输入
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int a, b;
while(in.nextToken() != StreamTokenizer.TT_EOF) // 表示读到了文件末尾
{
a = (int)in.nval;
in.nextToken();
b = (int)in.nval;
//out.println(a + b);
System.out.println("a + b = "+(a+b));
}
//out.flush();
}
}
进制转换函数
10进制转r进制
public class Main {
public static void main(String[] args) {
int n = 18;
Integer.toHexString(n);
System.out.println(n + "的二进制是:" + Integer.toBinaryString(n));
System.out.println(n + "的八进制是:" + Integer.toOctalString(n));
System.out.println(n + "的十六进制是:" + Integer.toHexString(n));
System.out.println(n + "的三进制是:" + Integer.toString(n, 3));
}
}
某一进制转10进制
public class Main {
public static void main(String[] args) {
String s = "10101";//1+4+16==21
System.out.println(Integer.parseInt(s,2));//结果是21
}
}