一、字符串的比较
在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。
1.equals() 方法
equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。equals() 方法的语法格式如下:
str1.equals(str2);
str1 和 str2 可以是字符串变量, 也可以是字符串字面量。 例如, 下列表达式是合法的:
"Hello".equals(greeting)
下面的代码说明了 equals() 方法的使用
String str1 = "abc";
String str2 = new String("abc");
String str3 = "ABC";
System.out.println(str1.equals(str2)); // 输出 true
System.out.println(str1.equals(str3)); // 输出 false
equals()与==的比较
理解 equals() 方法和==
运算符执行的是两个不同的操作是重要的。equals() 方法比较字符串对象中的字符。而==
运算符比较两个对象引用看它们是否引用相同的实例。
下面的程序说明了两个不同的字符串(String)对象是如何能够包含相同字符的,但同时这些对象引用是不相等的:
String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1.equals(s2)); // 输出true
System.out.println(s1 == s2); // 输出false
变量 s1 指向由“Hello”创建的字符串实例。s2 所指的的对象是以 s1 作为初始化而创建的。因此这两个字符串对象的内容是一样的。但它们是不同的对象,这就意味着 s1 和 s2 没有指向同一的对象,因此它们是不==
的。
2.equalsIgnoreCase() 方法
equalsIgnoreCase() 方法的作用和语法与 equals() 方法完全相同,唯一不同的是 equalsIgnoreCase() 比较时不区分大小写。当比较两个字符串时,它会认为 A-Z 和 a-z 是一样的。
下面的代码说明了 equalsIgnoreCase() 的使用:
String str1 = "abc";
String str2 = "ABC";
System.out.println(str1.equalsIgnoreCase(str2)); // 输出 true
3.compareTo() 方法
通常,仅仅知道两个字符串是否相同是不够的。对于排序应用来说,必须知道一个字符串是大于、等于还是小于另一个。一个字符串小于另一个指的是它在字典中先出现。而一个字符串大于另一个指的是它在字典中后出现。字符串(String)的 compareTo() 方法实现了这种功能。
compareTo() 方法用于按字典顺序比较两个字符串的大小,该比较是基于字符串各个字符的 Unicode 值。compareTo() 方法的语法格式如下:
str.compareTo(String otherstr);
它会按字典顺序将 str 表示的字符序列与 otherstr 参数表示的字符序列进行比较。如果按字典顺序 str 位于 otherster 参数之前,比较结果为一个负整数;如果 str 位于 otherstr 之后,比较结果为一个正整数;如果两个字符串相等,则结果为 0。
提示:如果两个字符串调用 equals() 方法返回 true,那么调用 compareTo() 方法会返回 0。
public static void main(String[] args) {
String str = "A";
String str1 = "a";
System.out.println("str=" + str);
System.out.println("str1=" + str1);
System.out.println("str.compareTo(str1)的结果是:" + str.compareTo(str1));
System.out.println("str1.compareTo(str)的结果是:" + str1.compareTo(str));
System.out.println("str1.compareTo('a')的结果是:" + str1.compareTo("a");
结果:
str = A str1 = a str.compareTo(str1)的结果是:-32 str1.compareTo(str)的结果是:32 str1.compareTo('a')的结果是:0
二、Math.random() 和Math.sqrt()方法
Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
1.Math.random()方法
Math.random()随机返回一个大于等于0.0,小于1.0的double类型的数据。
double num1 =Math.random();
System.out.println(num1);
//我们通过一些转换,随机获取一个大于等于0.0,小于10.0的double类型数据
double num2 =Math.random()*10;
System.out.println(num2);
//我们再通过一些转换,随机获取一个大于等于0,小于10的int类型的数据,也就是随机获取0-9之间的int类型的数据
int num3 =(int)(Math.random()*10);
System.out.println(num3);
//我们再通过一些转换,随机获取一个大于等于19,小于31的int类型的数据
int num4 =(int)(Math.random()*(31-19)+19);
System.out.println(num4);
总结:随机获取一个[num1,num2)(num2>num1)之间的int类型的数据
int result = (int)(Math.random()*(num2-num1)+num1);
2.Math.sqrt()方法
Math.sqrt()方法返回正确舍入的 double 值的正平方根。
练习15:求ax^2+bx+c=0方程的根。 a,b,c分别为函数的参数
如果:b^2-4ac>0,则有两个解;b2-4ac=0,则有一个解;b2-4ac<0,则无解;
已知:
x1=(-b+Math.sqrt(b2-4ac))/2a
x2=(-b-Math.sqrt(b2-4ac))/2a
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入a的值:");
double a=sc.nextDouble();
System.out.println("请输入b的值:");
double b=sc.nextDouble();
System.out.println("请输入c的值:");
double c=sc.nextDouble();
double x1=(-b+Math.sqrt(b*b-4*a*c))/(2*a);
double x2=(-b-Math.sqrt(b*b-4*a*c))/(2*a);
if((b*b-4*a*c)>0){
System.out.println("方程有两个解,x1="+x1+",x2="+x2);
}else if((b*b-4*a*c)==0){
System.out.println("方程有一个解,x1=x2="+x1);
}else if((b*b-4*a*c)<0){
System.out.println("方程无解");
}
}}