java编程练习

本文介绍了几个Java编程练习,包括字符串拼接、星号图案打印、数据加密方法及位操作,子串计数以及计算学生平均成绩。通过实例代码和分析,探讨了各种编程技巧和注意事项,例如避免整型加法误用,以及如何高效地遍历字符串查找子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java编程练习

1、字符串的拼接。从键盘输入两个字符串,将两个

字符串拼接。

程序示例代码:
package day0911;

import java.util.Scanner;

public class Pinjie {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入第一个字符串:");
        String s1 = s.next();
        System.out.println("请输入第二个字符串:");
        String s2 = s.next();
        System.out.println("两个字符串合并后:\n"+s1+s2);
    }
}
运行结果:

这里写图片描述

分析:
Eclipse编程实现字符串的拼接,实际上是比较容易的,从键盘输入任
意的两个字符串,对这两个字符串进行“+”运算,即可实现两个字符串
的拼接。

2、从键盘读取7个1-50之间的整数值,每输入

一个值,打印出该值个“*”。

程序示例代码:
import java.util.Scanner;

public class TestPrint {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int s1 = s.nextInt();
        System.out.println("请输入第二个数:");
        int s2 = s.nextInt();
        System.out.println("请输入第三个数:");
        int s3 = s.nextInt();
        System.out.println("请输入第四个数:");
        int s4 = s.nextInt();
        System.out.println("请输入第五个数:");
        int s5 = s.nextInt();
        System.out.println("请输入第六个数:");
        int s6 = s.nextInt();
        System.out.println("请输入第七个数:");
        int s7 = s.nextInt();
        for(int i = 0; i < s1; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s2; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s3; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s4; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s5; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s6; i++){
            System.out.print("*");
        }
        System.out.println();
        for(int i = 0; i < s7; i++){
            System.out.print("*");
        }
    }
}
运行结果:

这里写图片描述

3、从键盘输入一个奇数,作为行数,打印出如下效

果图,中间一行最长;前半部分每行比前一行多两

个,第一行有一个;后半部分,每行比前半部分少

两个,最后一行有一个。

*
***
*****
*******
*********
*******
*****
***
*
程序示例代码:
import java.util.Scanner;

public class Xinghao {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = s.nextInt();
        if(n % 2 == 0){
            System.out.println("请输入奇数!");
        }else{
            for(int i = 1; i <= (n-1)/2+1; i ++){
                for(int j = 0; j < 2 * i -1;j ++){
                    System.out.print("* ");
                }
                System.out.println();
            }
            for(int i = (n-1)/2 + 2; i <= n; i ++){
                for(int j = 0; j < 2 * (n-i+1) - 1; j++){
                    System.out.print("* ");
                }
                System.out.println();
            }
        }
    }
}
运行结果:

这里写图片描述

分析:
在本程序中,前半部分比较容易计算,每行的星号个数为:2*行数-1,
行数:从第一行到(行数-1)/2+1,即:
(int i = 1; i <= (n-1)/2+1; i ++)
每行星号的个数为:(2*行数)-1;
后半部分,行数从(行数-1)/2+2开始,直到第 n行,即:
(int i = (n-1)/2 + 2; i <= n; i ++)
每行的星号个数为: 2 * (n-i+1) - 1,(或者 2 * (n-i)+1)
后半部分每行星号的个数可以这样计算:
最后一行为一个,倒数第二行为三个,......以此类推,
行号       个数        计算                   归类
n(i)-------1---(2*1-1)(或2*0+1)----2*(n-i+1)-1(或2*(n-i)+1)
n-1(i-1)---3---(2*2-1)(或2*0+1)----2*(n-i+1)-1(或2*(n-i)+1)
n-2(i-2)---5---(2*3-1)(或2*0+1)----2*(n-i+1)-1(或2*(n-i)+1)
......
其中i表示第i
故求得后半部分每行星号的个数为。

4、某个公司采用公用电话传递数据,数据是四位的

整数,在传递过程中是加密的,加密规则如下:每

位数字都加上5,然后用和除以10的余数代替该数字,

再将第一位和第四位交换,第二位和第三位交换。

示例代码:
package day0911;

import java.util.Scanner;

public class TestCode {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int a1 = s.nextInt();
        int a11 = a1 +5;
        a11 = a11 % 10;
        System.out.println("请输入第二个数:");
        int a2 = s.nextInt();
        int a22 = a2 + 5;
        a22 = a22 % 10;
        System.out.println("请输入第三个数:");
        int a3 = s.nextInt();
        int a33 = a3 + 5;
        a33 = a33 % 10;
        System.out.println("请输入第四个数:");
        int a4 = s.nextInt();
        int a44 = a4 + 5;
        a44 = a44 % 10;
        System.out.println("加密后的数为:" + a44 + a33 + a22 + a11);
    }
}
运行结果:

这里写图片描述

验证:
原数: 7  4  5  5
 +5:12  9 10 10
%10: 2  9  0  0  (除以10的余数)
交换: 0  0  9  2
注意:在该程序中,加密完成后需要输出加密后的四位数,刚开始我
习惯拿千位数乘1000,百位数成100,十位数乘10,最后再将其相加,
运行程序后,发现了一个问题:如果有哪个数算得的最后结果为0,则
这个数将会被忽略,导致错误的发生。
如将上述程序代码中最后一条输入语句改成如下语句:
int b = a44 * 1000 + a33 * 100 + a22 * 10 + a11 * 1;
System.out.println("加密后的数为:" + b);
其运行结果为:

这里写图片描述

分析:
可以发现其结果不是四位数,而是两位数。
后来经过思考,想到整型变量在输出语句中运用“+”运算符的两种结果
情况:
①如果“+”运算不加(),则只会将这两个整型变量值拼接在一起,而
不会执行加法运算。
②“+”运算加(),才会认为是需要将两个整型变量值进行加法运算。
故将两条有问题的语句改成下面的输出语句:
System.out.println("加密后的数为:" + a44 + a33 + a22 + a11);
再输出语句中直接将数字交换即可。

5、计算一个字符串中某个子串出现的次数

import java.util.Scanner;

public class TestString {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = s.next();
        System.out.println("请输入要查找的子串:");
        String st1 = s.next();
        int count = 0;
        boolean flag = false;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == st1.charAt(0)) {
                for (int j = 0; j < st1.length(); j++) {
                    if (str.charAt(j) == st1.charAt(j)) {
                        flag = true;
                    } else {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    count++;
                }
            }
        }
        System.out.println("字符串中子串的个数为:" + count);
    }
}
程序运行结果:

这里写图片描述

分析:
在这个程序中,我认为比较困难的事,怎样循环遍历查找字符
串中与子串匹配的子串。
这个程序,就循环这儿让我思考了老一会儿,考虑思路:
①外层循环:原字符串
在原字符串中的字符依次与子串的第一个字符进行比较:
定义一个boolean型变量,用于判断是否相等,初始值为false;
②内层循环:子串
A:若相等,将原字符串中与子串第一个字符相等的字符后面的字符依
次与子串的第二个、第三个…字符进行比较,直到子串的最后一个字
符;若都相等,boolean赋值true,则计数器加一;
B:若不相等,boolean值不变,跳出这层循环,到外层循环,接着比
较原字符串的下一个字符与子串的第一个字符。这里指原字符串的下
一个字符,即外层循环继续执行。

6、有五个学生,每个学生有3门课的成绩,从键盘

输入以上数据(包括学生号,姓名,三门课

成绩),计算出平均成绩,况原有的数据和计算出

的平均分数存放在磁盘文件”stud”中。

学生类Student:根据题目需求在学生类中定义学生的属性和相应的方
法,以便测试主类使用。
public class Student {
    private int no;
    private String name;
    private double[][] grade;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(int no, String name, double grade[][]) {
        super();
        this.no = no;
        this.name = name;
        this.grade = grade;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double[][] getGrade() {

        return grade;
    }

    public void setGrade(double[][] grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "Student [no=" + no + ", name=" + name + ", grade=" + grade + "]";
    }
}
学生测试类TestStu:完成题目中要求。
import java.util.Scanner;

public class TestStu {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        Student[] stu = new Student[5]; 
        double[][] grade = new double[5][3];
        for(int i = 0; i < 5; i++){
            System.out.println("第" + (i+1) + "个学生的信息:");
            System.out.println("请输入学生学号:");
            int no = s.nextInt();
            System.out.println("请输入学生姓名:");
            String name = s.next();
            System.out.println("请输入学生的成绩:");
            for(int j = 0; j < 3; j++){
                grade[i][j] = s.nextDouble();
            }
            stu[i] = new Student(no, name, grade); 
        }
        for(int i = 0; i < stu.length; i++){
            double g = 0;
            System.out.println("第" + (i+1) + "个学生的信息为:");
            System.out.print("学号:" + stu[i].getNo() + ",姓名:" + stu[i].getName() + ",成绩:" );
            for(int j = 0; j < 3; j++){
                System.out.print(grade[i][j] + ",");
                g = g + grade[i][j];
            }
            System.out.println("平均成绩为:" + g/3);
        }
    }
}
运行结果:

这里写图片描述

这里写图片描述

分析:
定义Student[]类型的引用数组,其中成绩也为一个数组,为了实现题
目要求,可以将成绩定义为一个二维数组,每个学生有三个成绩:
for(int j = 0; j < 3; j++){
    grade[i][j] = s.nextDouble();
}
grade[i][j]表示第[i]个学生的第[j]门课的成绩。
将每个学生的三个成绩,放在数组中,输出时循环输出三个成绩,并
求出三个成绩的总和。
for(int j = 0; j < 3; j++){
    System.out.print(grade[i][j] + ",");
    g = g + grade[i][j];
}

以上程序只是自己的一种解决办法,如有更好的方法,还请赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值