Math类
Math类是用于数学计算的一个工具类
对于工具类而言,里面的大部分成员都是静态的static
自带常量
static double E:自然对数
static double PI:圆周率
取整方法
static double ceil(double a):向上取整
static double floor(double a):向下取整
static long round(double a):四舍五入
三角函数
static double sin(double a):正弦函数 参数是弧度值
static double cos(double a):余弦函数
static double tan(double a):正切函数
static double toDegrees(double a):将弧度转角度
static double toRadians(double angles):将角度转弧度
static double asin(double a):反正弦函数
static double acos(double a):反余弦函数
static double atan(double a):反正切函数
指数函数
static double pow(double a, double b):求a的b次幂
static double sqrt(double a):求a的平方根
static double cbrt(double a):求a的立方根
其他方法
static double abs(double a):求a的绝对值
static double hypot(double deltX, double deltY):返回 两点间距离
static double max(a,b):返回a和b之间的最大值
static double min(a,b):返回a和b之间的最小值
static double random():返回[0,1)之间的随机小数
public class Sample {
public static void main(String[] args) {
System.out.println(Math.E);
System.out.println(Math.PI);
System.out.println(Math.ceil(3.1));
System.out.println(Math.ceil(3.9));
System.out.println(Math.ceil(-3.1));
System.out.println(Math.ceil(-3.9));
System.out.println(Math.floor(3.1));
System.out.println(Math.floor(3.9));
System.out.println(Math.floor(-3.1));
System.out.println(Math.floor(-3.9));
System.out.println(Math.round(3.1));
System.out.println(Math.round(3.9));
System.out.println(Math.round(-3.1));
System.out.println(Math.round(-3.9));
System.out.println(Math.sin(Math.PI/6));
System.out.println(Math.cos(Math.PI/3));
System.out.println(Math.tan(Math.PI/4));
System.out.println(Math.toDegrees(Math.PI/2));
System.out.println(Math.toRadians(90));
System.out.println(Math.cbrt(8));
System.out.println(Math.hypot(0 - 1, 0 - 1));
}
}
Scanner类
主要用于负责数据输入的类,底层是和IO流相关。
1、String next():获取直到遇到空格为止的一个字符串
2、String nextLine():获取直到遇到回车为止的一个字符串
3、int nextInt():获取下一个整数 byte short long
4、double nextDouble()
5、boolean nextBoolean()
6、float nextFloat()
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("输入一句话:");
String line = input.nextLine();
System.out.println(line);
System.out.print("输入三个单词:");
String word1 = input.next();
String word2 = input.next();
String word3 = input.next();
System.out.println(word1);
System.out.println(word2);
System.out.println(word3);
}
}
Random类
主要用于产生随机数
1、boolean nextBoolean():随机产生布尔类型值
2、double nextDouble():随机生成0.0~1.0之间的小数
3、double nextInt():随机生成一个整数0~232的整数
4、double nextInt(n):随机生成一个整数[0,n)的整数
import java.util.Random;
public class Sample {
public static void main(String[] args) {
Random random = new Random();
for (int i = 1; i <= 10; i++) {
System.out.print(random.nextBoolean() + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
System.out.print(random.nextInt(2) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
System.out.print(random.nextInt() + " ");
}
System.out.println();
}
}
String类
String是一个类,它描述的是字符串。在Java代码当中,所有字符串常量(字符串字面量)都是
String类的一个实例对象。并且,字符串一旦创建,则不可修改! 不可修改其长度,不可修改其内容 。所
以将来对字符串内容的改变,不能在原地改,只能重新创建一个字符串。
public class Sample {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ab" + "dc";
//上述代码一共有几个字符串?
//四个"abc" "ab" "dc" "abdc"
}
}
获取相关
1、char charAt(int index):获取指定角标index处的字符
2、int indexOf(int ch):获取指定字符(编码)在字符串中第一次(从左到右)出现的地方返回的是角标。如果是-1 表示不存在
3、int lastIndexOf(int ch):获取指定字符(编码)在字符串中第一次(从右到做)出现的地方返回的是角标
4、int indexOf(String str):获取指定字符串在本字符串中第一次(从左到右)出现的地方返回的是角标
5、int lastIndexOf(String str):获取指定字符串在本字符串中第一次(从右到左)出现的地方返回的是角标
6、int length():获取字符串的长度(字符的个数)
7、String[] split(String regex):将字符串按照regex的定义进行切割(regex指的是正则表达式)
8、String substring(int beginIndex):截取一段子字符串,从beginIndex开始到结尾
9、String substring(int beginIndex, int endIndex):截取一段子字符串,从beginIndex开始到endIndex(不包含)
判断相关
1、int compareTo(String anotherString):按照字典顺序比较两个字符串的大小
2、boolean contains(String another):判断当前字符串中是否包含指定字符串another
3、boolean equals(String another):比较当前字符串与指定字符串的内容是否相同
4、boolean isEmpty():判断当前字符串是否为空length() == 0
5、boolean startsWith(String prefix):判断该字符串是否以prefix开头
6、boolean endsWith(String suix):判断该字符串是否已suix结尾
修改相关
1、String toLowerCase():将字符串中所有的英文字母全部变为小写
2、String toUpperCase():将字符串中所有的英文字母全部变为大写
3、String trim():将字符串中两端的多余空格进行删除
4、String replace(char oldCh,char newCh):将字符串中oldCh字符替换成newCh字符
import java.util.Random;
public class Sample {
public static void main(String[] args) {
String str = "banana orange apple watermelon";
System.out.println(str.charAt(1)); //'a'
System.out.println(str.indexOf('o')); //7
System.out.println(str.lastIndexOf(97));//21
System.out.println(str.length());
System.out.println(str.substring(6));
System.out.println(str.substring(9,13));
String[] arr = str.split(" ");
System.out.println(arr[2]);
String s1 = "abc";
String s2 = "abe";
System.out.println(s1.compareTo(s2));
//结果<0 s1在s2之前 ==0 s1和s2一样 >0 s1在s2之后
System.out.println("hehe".compareTo("hehe"));
System.out.println("abcbc".contains("bcb"));
System.out.println("lala".equals("lala"));
String s3 = "大桥未久.avi";
System.out.println(s3.endsWith(".avi"));
System.out.println(s3.startsWith("大桥未久"));
String s4 = "Happy Boy Happy Girl";
System.out.println(s4.toLowerCase());
System.out.println(s4.toUpperCase());
System.out.println(s4);
System.out.println(" 123123 321321 ".trim());
String s5 = "旺财是只狗,旺财咋叫?旺财来叫一个~";
System.out.println(s5.replace('狗','猫'));
System.out.println(s5.replace("旺财","小强"));
}
}
如何删除字符串中左右两端出现的空格,不用trim
public class Sample {
public static void main(String[] args) {
String str = " 123123123 12123 ";
//去空格后"123123123 12123"
int l = 0;
int r = str.length() - 1;
while (str.charAt(l) == ' ') {
l++;
}
while (str.charAt(r) == ' ') {
r--;
}
System.out.println("[" + str.substring(l,r + 1) + "]");
}
}
找出除去空格字符串的位置然后再去截取字符串
在字符串"abcbcbcbcbcbc"中统计"bcb"出现的次数
贪心与非贪心
public class Sample {
public static void main(String[] args) {
//最好的算法KMP算法
String s1 = "abcbcbcbcbcbc";
String s2 = "bcb";
//贪心算法 5个
int count = 0;
for (int i = 0; i < s1.length() - s2.length() + 1; i++) {
if (s1.charAt(i) == s2.charAt(0)) {
if (s2.equals(s1.substring(i,i + s2.length()))) {
count++;
}
}
}
System.out.println(count);
//非贪心算法 3个
/*
String temp = s1;
int count = 0;
while (true) {
int index = temp.indexOf(s2);
if (index == -1) {
break;
}
count++;
temp = temp.substring(index + s2.length());
}
System.out.println(count);
*/
}
}
贪心 运用的是截取
非贪心运用的是对比
查找两个字符串中最长的公共子串
public class Sample {
public static void main(String[] args) {
String s1 = "c is a program but is diffcult";
String s2 = "Java is a program but is slow";
for (int len = s2.length(); len > 0; len--) {
for (int l = 0,r = len - 1; r < s2.length(); l++,r++) {
String temp = s2.substring(l,r + 1);
if (s1.contains(temp)) {
System.out.println(temp);
return;//直接结束程序
}
}
}
}
}
先截取,再判断当前字符串中是否包含指定字符串
Character类
Character它是char基本数据类型的 包装类 ,有这么几个静态方法我可目前可以使用到的
1、static boolean isDigit(char ch):判断字符是否是数字
2、static boolean isLetter(char ch):判断字符是否是字母
3、static boolean isLetterOrDigit(char ch):判断字符是否是数字或字母
4、static boolean isLowerCase(char ch):判断是否是小写字母
5、static boolean isUpperCase(char ch):判断是否是大写字母
6、static boolean isSpaceChar(char ch):判断是否空白字母(空格 制表符 回车)
将十六进制数字转为十进制
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个十六进制的数字:");
//0~9 A~F
String hex = input.nextLine().toUpperCase();
if (hex.length() == 0) {
System.out.println("没有任何输入!");
return;//程序直接结束
}
for (int i = 0; i < hex.length(); i++) {
char ch = hex.charAt(i);
if (Character.isDigit(ch) || Character.isLetter(ch)) {
if (Character.isLetter(ch) && (ch < 'A' || ch > 'F')) {
System.out.println("非法字符" + ch);
return;
}
} else {
System.out.println("非法字符" + ch);
return;
}
}
int sum = 0;
for (int i = hex.length() - 1; i >= 0; i--) {
char ch = hex.charAt(i);
if (Character.isDigit(ch)) {
//'1' ? 1
sum = sum + (int)Math.pow(16 , hex.length() - i - 1) * (ch - 48);
} else {
//'A' - 65 + 10 -> 10
sum = sum + (int)Math.pow(16 , hex.length() - i - 1) * (ch - 55);
}
}
System.out.println(sum);
}
}
先判断是否为非法字符, 再进行转化 如果是字母 就要将字母转换为数字,最后进行求和
import java.util.Scanner;
public class Demo53 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第1个顶点坐标:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
System.out.print("请输入第2个顶点坐标:");
double x2 = input.nextDouble();
double y2 = input.nextDouble();
System.out.print("请输入第3个顶点坐标:");
double x3 = input.nextDouble();
double y3 = input.nextDouble();
//0,0 0,1 1,0
double a = Math.hypot(x1 - x2, y1 - y2);
double b = Math.hypot(x1 - x3, y1 - y3);
double c = Math.hypot(x2 - x3, y2 - y3);
double A = Math.acos((a * a - b * b - c * c)/ (-2 * b * c));
double B = Math.acos((b * b - a * a - c * c)/ (-2 * a * c));
double C = Math.acos((c * c - b * b - a * a)/ (-2 * a * b));
A = Math.round(Math.toDegrees(A));
B = Math.round(Math.toDegrees(B));
C = Math.round(Math.toDegrees(C));
System.out.println(A);
System.out.println(B);
System.out.println(C);
}
}
import java.util.Scanner;
public class Demo54 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum = 0;
System.out.println("1\t3\t5\t7\n9\t11\t13\t15\n17\t19\t21\t23\n25\t27\t29\t31");
System.out.print("你的生日在不在这里面?(y/n)") ;
String choice = input.nextLine();
if (choice.equals("y")) {
sum += 1;
}
System.out.println("2\t3\t6\t7\n10\t11\t14\t15\n18\t19\t22\t23\n26\t27\t30\t31");
System.out.print("你的生日在不在这里面?(y/n)") ;
String choice = input.nextLine();
if (choice.equals("y")) {
sum += 2;
}
System.out.println("4\t5\t6\t7\n12\t21\t22\t23\n24\t25\t26\t27\n28\t29\t30\t31");
System.out.print("你的生日在不在这里面?(y/n)") ;
String choice = input.nextLine();
if (choice.equals("y")) {
sum += 4;
}
System.out.println("8\t9\t10\t11\n12\t13\t14\t15\n24\t25\t26\t27\n28\t29\t30\t31");
System.out.print("你的生日在不在这里面?(y/n)") ;
String choice = input.nextLine();
if (choice.equals("y")) {
sum += 8;
}
System.out.println("16\t17\t18\t19\n20\t21\t22\t23\n24\t25\t26\t27\n28\t29\t30\t31");
System.out.print("你的生日在不在这里面?(y/n)") ;
String choice = input.nextLine();
if (choice.equals("y")) {
sum += 16;
}
System.out.println(sum);
}
}
一个表一个表去对比 有就加第一个数在进行对比下一张表直至结束,没有就结束
import java.util.Scanner;
public class Demo59 {
public static void main(String[] args) {
//十进制转十六进制
Scanner input = new Scanner(System.in);
System.out.print("Enter a number:");
int number = input.nextInt();
String hex = "";
while (number != 0) {
int y = number % 16;
if (y < 10) {
hex = y + hex;
} else {
hex = (char)(y + 55) + hex;
}
number /= 16;
}
System.out.println(hex);
}
}
对16取余 小于10 正常转换成字符串,大于等于10 要先转换为16进制对应的字母再转换成字符串 合并
public class Demo60 {
public static void main(String[] args) {
String s1 = "My name is Hello";
String s2 = "Heit";
/*
My name is Hello
i
j
nana
k
*/
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == s2.charAt(0)) {
boolean flag = true;
for (int k = 1,j = i + 1; k < s2.length();k++,j++) {
if (s2.charAt(k) != s1.charAt(j)) {
flag = false;
break;
}
}
if (flag) {
System.out.println("true");
return;
}
}
}
System.out.println("false");
}
}
用短字符串 按照字符位置依次对照
import java.util.Scanner;
public class Demo61 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a SSN:");
String ssn = input.nextLine();
if (ssn.length() != 11) {
System.out.println("invalid");
return;
}
for (int i = 0; i < ssn.length(); i++) {
if (i == 3 || i == 6) {
if (ssn.charAt(i) != '-') {
System.out.println("invalid");
return;
}
} else {
if (!Character.isDigit(ssn.charAt(i))) {
System.out.println("invalid");
return;
}
}
}
System.out.println("valid");
}
}
先判断是否够11位,在判断-的位置是否为-
import java.util.Scanner;
public class Demo63 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter ISBN-12:");
String isbn = input.nextLine();
if (isbn.length() != 12) {
System.out.println(isbn + " is an invalid input.");
return;
}
for (int i = 0; i < isbn.length(); i++) {
if (!Character.isDigit(isbn.charAt(i))) {
System.out.println(isbn + " is an invalid input.");
return;
}
}
int sum = 0 ;//d1+~+d12
for (int i = 0; i < isbn.length(); i++) {
if (i % 2 == 0) {
sum = sum + isbn.charAt(i) - '0';
} else {
sum = sum + 3 * (isbn.charAt(i) - '0');
}
}
int d13 = 10 - sum % 10;
if (d13 == 10) {
d13 = 0;
}
System.out.println(isbn + d13);
}
}
先判断是否为非法字符,结合所给公式特点再用循环计算出第十三位数 如果13为为10 用0代替,最后用字符串合并
import java.util.Scanner;
public class Demo66 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter s1:");
String s1 = input.nextLine();
System.out.print("Enter s2:");
String s2 = input.nextLine();
/*
123456123
123456
i
*/
if (s1.charAt(0) != s2.charAt(0)) {
System.out.println("none");
return;
}
boolean flag = true;
for (int i = 0; i < s2.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
flag = false;
System.out.println(s2.substring(0,i));
break;
}
}
if (flag) {
System.out.println(s2);
}
}
}
先输入两个字符串,字符串第一位不相等直接结束,在默认是最长前缀,在进行比对,直到不相同的时候输出