刷题知识点汇总——partOne
1 录入键盘输入数据:
import java.until.Scanner; //导入Scanner类包
Scanner sc = new Scanner(System.in);
var 变量名 = sc.nextVar(); //var 可为int、long、String等数据类型
例如:
import java.util.Scanner;
public class exercise5 {
public static void main(String[] args) {
System.out.println("请输入待计算数值及符号:");
int a = new Scanner(System.in).nextInt();
String b = new Scanner(System.in).next();
int c = new Scanner(System.in).nextInt();
System.out.println(calculator(a, b, c));
}
}
注:此方式在输入数据时,每输入一个则需回车一次,无法进行一次性输入。
改进版(可实现一次性从键盘录入所有以空格等符号隔开的数据):
调用String类trim()以及split()方法对字符串进行处理:
import java.util.Scanner;
public class exercise {
public static void main(String[] args) {
System.out.println("请输入多个数:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
input = input.trim(); //String 类中的trim()用于去除字符串首尾空格,若均无空格,则返回原字符串
String[] temp = input.split(" "); // String 类中的split()方法实现根据只定间隔对字符串进行切割,结果以切割后的字符串数组显示
System.out.println(temp[0]);
}
注:仅nextLine()方法接受空格和Tab回车字符,next()、nextInt()、nextDouble()等不接受回车符,只截取有效部分。其中,next()将录入的数据中空格视为两字符串之间的间隔,而nextLine()将空格视为整个字符串的一部分。
示例:
import java.util.Scanner;
public class exercise{
public static void main(String[] args){
String str1 = new Scanner(System.in).nextLine();
String str2 = new Scanner(System.in).next();
System.out.println(str1);
System.out.println(str2);
}
}
输入:
123 xyz 567
123 xyz 567
运行结果:
123 xyz 567
123
2 三元运算符 a?b:c
含义:若a处表达式为真,则结果取b处,否则取c处。
例如:
int max = a<b?b:a; //则max为a和b中较大的值
3 求给定两整数的最大公约数和最小公倍数(均大于零)
1)求取int a,int b最大公约数
public static void getNum1(int a,int b){
//获取最大公约数
int min = a<b?a:b;
for(int j=min;j>=1;j--){
if(a%j==0 && b%j==0){
System.out.println("最大公约数为:" + j);
break;
}
}
}
2)求取int a,int b最小公倍数
public static void getNum2(int a,int b){
//获取最小公倍数
int max = a>b?a:b;
for(long j=max; ;j++){
if(j%a==0 && j%b==0){
System.out.println("最小公倍数为:" + j);
break;
}
}
}
注:上述两方法均采用逐一遍历的方法,费时费空间,待改进以进一步缩小遍历范围。
4 String类中的charAt()方法
作用:返回字符串中指定位置的字符
示例:
public class exercise {
public static void main(String[] args) {
String s = "abc";
System.out.println(s.charAt(2)); //返回s中第i+1个字符
}
}
输出结果:
c
5 Java中==和equals()
==和equals()最大的区别是:一个是运算符,一个是方法。
==:
(1)如果比较的对象是基本数据类型,则比较数值是否相等;
(2)如果比较的是引用数据类型,则比较的是对象的内存地址是否相等。
因为Java只有值传递,所以对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。
equals():用来比较两个对象的内容是否相等。
(1)equals()方法存在于Object类中,而Object类是所有类的直接或间接父类。
(2)equals()方法存在两种使用情况:
【1】类没有覆盖 equals()方法 :
通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()方法。
Object类equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
【2】类覆盖了 equals()方法 :
一般我们都覆盖 equals()方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。
示例:
public class EqualsDemo {
public static void main(String[] args) {
String a = new String("ab");
String b = new String("ab");
String aa = "ab";
String bb = "ab";
System.out.println("aa==bb: " + (aa == bb));
System.out.println("a==b: " + (a == b));
System.out.println("a.equals(b): " + (a.equals(b)));
System.out.println("42 == 42.0 : " + (42 == 42.0));
}
}
运行结果:
aa==bb: true
a==b: false
a.equals(b): true
42 == 42.0 : true
说明:
(1)String中的 equals方法是被重写过的,因为 Object的 equals方法是比较的对象的内存地址,而 String的 equals方法比较的是对象的值。
(2)当创建 String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String对象。
String类中的equals方法源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
注:
(1)equals方法不能用于判断基本数据类型的变量,如只能用来判断两个对象是否相等。
(2)如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。
(转载自CSDN博主文章)
6 swich case方法的格式(熟悉)
示例:
进行四则基本运算:
import java.util.Scanner;
public class exercise5 {
public static void main(String[] args){
String str = new Scanner(System.in).nextLine();
str = str.trim();
String[] s = str.split(" ");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[2]); //截取的字符串数组为String型,需转换为int型
System.out.println(calculator(a,s[1],b));
}
public static int calculator(int num1, char operator, int num2){
switch(operator){
case '+': return num1+num2;
case '-': return num1-num2;
case '*': return num1*num2;
case '/': if(num2 == 0) return 0;
return num1/num2;
}
return 0;
}
}
输入格式:
123 + 456
结果:
579
7 indexof()及substring()方法的使用
题目示例:获取输入邮箱的用户名。
如输入:123abc@qq.com 输出:123abc
法一:调用trim()及split(“@”)方法
public class exercise5 {
public static void main(String[] args){
String str = new Scanner(System.in).nextLine();
str = str.trim();
String[] s = str.split("@");
System.out.println(s[0]);
}
}
法二:调用indexof(“@”)、substring(0,n)方法
public class exercise {
public static void main(String[] args){
String str = new Scanner(System.in).nextLine();
int n = str.indexOf("@");
String s = str.substring(0,n);
System.out.println(s);
}
}
indexOf() 两种用法和实现功能说明:
(1) indexOf(String str)
返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
(2) indexOf(String str, int index)
返回从 index 位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
substring()三种用法和实现功能说明:
(1)substring(int beginIndex, int endIndex)
该方法用于截取字符串中从beginIndex到索引的endIndex-1之间的的字符串,即截取的字符串不包括endIndex这个索引对应的字符,所以endIndex的最大值为整个字符串的长度,所以使用这个方法的时候需要特别注意容易发生字符串截取越界的问题。
(2)substring(int beginIndex)
endIndex缺省,则默认从beginIndex截取到字符串最后一位。
(3)str.substring(str.length() - n)
实现获取字符串的末尾n位。
示例:
public class exercise {
public static void main(String[] args){
String str = new Scanner(System.in).nextLine();
String s = str.substring(str.length()-10); //获取str的末尾10位
System.out.println(s);
}
输入:
111222334@ qq.com
结果为:
4@ qq.com