前言
写着题目的时候,我都吓蒙了,跟主题不相同啊,又比较烧脑,所以这次的题目我写了比较久,可能大概写了3个小时,其中在这10个题目中,有几道题目我认为是比较难的,但是有时候是我想得太复杂了,我只关注功能实现了,但是代码有些不够好,以后再来优化吧。
目录
题目1
- 反转键盘录入的字符串
- 代码实现,效果如图所示:
代码如下:
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
System.out.println("录入的字符串:"+string);
String string1 = reverString(string);
System.out.println("反转的字符串:"+string1);
}
//就是把字符倒过来存放
public static String reverString(String s){
StringBuilder stringBuilder = new StringBuilder();
for(int i =s.length() - 1;i >= 0;i--){
stringBuilder.append(s.charAt(i));
}
return stringBuilder.toString();
}
}
题目2
- 键盘录入QQ号码,验证格式的正确性。
- 必须是5—12位数字。
- 0不能开头。
- 代码实现,效果如图所示:
代码如下:
public class Test02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String qq = scanner.nextLine();
System.out.println("这个QQ号码是否正确:"+isQq(qq));
}
public static boolean isQq(String s){
boolean check = false;
if(s.length() >= 5 && s.length() <= 12){
if(s.startsWith("0")){
return check;
}else {
check = true;
return check;
}
}
return check;
}
}
题目3
- 字符串查找。
- 键盘录入一个大字符串,再录入一个小字符串。
- 统计小字符串在大字符串中出现的次数。
- 代码实现,效果如图所示:
代码如下:
public class Test03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入大写字符串: ");
String upstring = scanner.nextLine();
System.out.print("请输入小写字符串:");
String smallstring = scanner.nextLine();
System.out.println("小字符串"+smallstring+",在大写字符串中共出现"+counttoa(smallstring,upstring)+"次");
}
public static int counttoa(String samll,String up){
int count=0;
char[] uptoarray = up.toCharArray();
char[] smallarray = samll.toCharArray();
int smalllength=smallarray.length;
int uplength = up.length();
int j = 0;
for(int i = 0;i < uplength;i++){
if(uptoarray[i] ==samll.charAt(0)){
//通过定位
j = i;
//进行比较,是不是包含的子字符串
for(int t = 0;t < smalllength;t++){
//只要有一个字符不是,立马结束,不用比了
if(uptoarray[j] !=smallarray[t]){
break;
}
//如果能比较到t等于smalllength的地步,则证明大字符包含小字符
if(t == smalllength -1){
count++;
}
j++;
}
//因为上面的for循环还要i++,所以这里减1,达到下标符合的位置
i = j - 1;
}
}
return count;
}
}
题目4
- 替换某字符串中的某字符串。
- 键盘录入一个srcStr字符串,再录入一个delStr字符串。
- 删除该字srcStr符串中的所有delStr字符串。
- 代码实现,部分效果如图所示:
代码如下:
public class Test04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入源字符串: ");
String srcStr = scanner.nextLine();
System.out.println("请输入要删除的字符串:");
String delStr = scanner.nextLine();
String s = afterDel(srcStr, delStr);
System.out.println("删除"+delStr+"后的字符串为:"+s);
}
public static String afterDel(String srcStr,String delStr){
//把srcStr中的字符放到StringBuilder中,因为要涉及到删除操作,String就不太好
StringBuilder afterdelstring = new StringBuilder();
for(int i =0; i < srcStr.length();i++){
afterdelstring.append(srcStr.charAt(i));
}
//存储delStrc出现的次数
int count=0;
int smalllength=delStr.length();
int srcStrlength = srcStr.length();
int j = 0;
for(int i = 0;i < srcStrlength;i++){
if(srcStr.charAt(i) ==delStr.charAt(0)){
//通过定位
j = i;
//进行比较,是不是包含的子字符串
for(int t = 0;t < smalllength;t++){
//只要有一个字符不是,立马结束,不用比了
if(srcStr.charAt(j) !=delStr.charAt(t)){
break;
}
//如果能比较到t等于smalllength的地步,则证明大字符包含小字符
if(t == smalllength -1){
count++;
if(count == 1) {
afterdelstring.delete(j - t, j + 1);
}
else {
//原srcStr是用来遍历的,而最终的操作结果是在afterdelstring进行的
//之所以是(count -1)是因为先统计次数,但是还没有把里面的字符删除
//(j-t-2*(count - 1)是开始删除的下标,(j-t-2*(count - 1)+2是要删除的结束的下标
afterdelstring.delete((j-t-2*(count - 1)),(j-t-2*(count - 1))+2);
}
}
j++;
}
//因为上面的for循环还要i++,所以这里减1,达到下标符合的位置
i = j - 1;
}
}
System.out.println("原字符串中总共包含"+count+"个"+delStr);
return afterdelstring.toString();
}
}
这里是可以用replace方法来做的,但是我不想用,所以自己写了比较多的代码
题目5
- 生成一个随机100内小数,转换为保留两位小数的字符串,不考虑四舍五入的问题。
- 代码实现,效果如图所示:
代码如下:
public class Test05 {
public static void main(String[] args) {
Random random = new Random();
System.out.println("随机数为:");
double v = random.nextDouble()*100;
System.out.println(v);
String result = v+"";
// 找出小数点的下标
int i = result.indexOf(".");
// 把小数点后两位的其他小数全部删除
String substring = result.substring(0,i + 3);
System.out.println("转换为:"+substring);
}
}
题目6
- 筛选字符串。
-
定义ArrayList集合,存入多个字符串。
-
长度大于5的字符串,打印删除后的集合。
-
代码实现,效果如图所示:
代码如下:
public class Test06 {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList();
arrayList.add("bca");
arrayList.add("dadfa");
arrayList.add("ddddaaaa");
arrayList.add("你好啊");
arrayList.add("我来啦,你干嘛呢");
arrayList.add("别跑啊");
System.out.println("原字符串:");
System.out.println(arrayList);
System.out.println("删除后: ");
dellength(arrayList);
System.out.println(arrayList);
}
public static void dellength(ArrayList<String> arrayList){
for(int i = 0;i < arrayList.size();i++){
if(arrayList.get(i).length() > 5){
arrayList.remove(i);
//因为要减少一个,这个下标就不太准了,所以要手动调整
i -- ;
}
}
}
}
题目7
- 判断回文字符串。如果一个字符串,从前向后读和从后向前读,都是一个字符串,称为回文串,比如mom,dad,noon。
- 代码实现,效果如图所示:
代码如下:
public class Test07 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
boolean flag = checkIs(s);
System.out.println(flag);
}
public static boolean checkIs(String s){
boolean result = true;
int lastindex = s.length() - 1;
for(int i = 0;i<s.length();i++){
if(s.charAt(i) != s.charAt(lastindex)){
return false;
}
lastindex--;
}
return result;
}
}
题目8
- 模拟简单计算器,可以运算+,—,*,/,%。
-
接收三个参数,一个整数,一个运算符,另一个整数。
-
计算出运算结果。
-
无法运算时,返回null。
-
代码实现,效果如图所示:
代码如下:
public class Test08 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
String symbol = scanner.next();
int b = scanner.nextInt();
System.out.println(a +"+"+b+"="+jisuan(a,symbol,b));
}
public static int jisuan(int a,String symbol,int b){
int result = 0;
switch (symbol){
case "+":
result= a+b;
break;
case "-":
result = a - b;
break;
case "*":
result = a * b;
break;
case "/":
result = a / b;
break;
case "%":
result = a % b;
}
return result;
}
}
题目9
- 校验密码是否合法。
-
必须至少8个字符。
-
必须至少2个大写字符。
-
必须只有字母和数字。
-
代码实现,效果如图所示:
代码如下:
public class Test09 {
public static void main(String[] args) {
// Scanner scanner = new Scanner(System.in);
// String password = scanner.next();
System.out.println(""+isCheck("qweRY123"));
}
public static boolean isCheck(String password){
boolean flag = false;
int upcount = 0;
if(password.length() < 8) {
return false;
}
for(int i = 0;i < password.length();i++){
if(password.charAt(i) >= 'a' && password.charAt(i) <='z'
|| password.charAt(i) >= 'A' && password.charAt(i) <= 'Z'
|| password.charAt(i) >= '1' && password.charAt(i) <='9'){
if(password.charAt(i) >= 'A' && password.charAt(i) <= 'Z'){
upcount++;
}
}else {
return false;
}
}
if(upcount >= 2){
return true;
}
return flag;
}
}
题目10
- 模拟用户登录。
-
定义用户类,属性为用户名和密码。
-
使用集合存储多个用户对象。
-
录入用户和密码,对比用户信息,匹配成功登录成功,否则登录失败。
-
登录失败时,当用户名错误,提示没有该用户。
-
登录失败时,当密码错误时,提示密码有误。
-
代码实现,效果如图所示:
代码如下:
public class User {
private String name;
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(password, user.password);
}
@Override
public int hashCode() {
return Objects.hash(name, password);
}
public void show(){
System.out.println(getName()+"-"+getPassword());
}
}
public class Test10 {
static ArrayList<User> arrayList = new ArrayList();
static {
arrayList.add(new User("dage","123"));
arrayList.add(new User("erge","1234"));
arrayList.add(new User("sange","12345"));
for(int i = 0;i < arrayList.size();i++ ){
arrayList.get(i).show();
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入用户名:");
String name = scanner.nextLine();
System.out.println("输入密码: ");
String password =scanner.nextLine();
User user = new User(name, password);
for(int i = 0;i < arrayList.size();i++){
if(user.getName().equals(arrayList.get(i).getName())){
if(user.getPassword().equals(arrayList.get(i).getPassword()) ){
System.out.println("登录成功");
break;
}else {
System.out.println("登录结果:密码错误");
continue;
}
}else {
System.out.println("登录结果:没有该用户");
continue;
}
}
}
}