java编程练习

来源:互联网 发布:一千个哈姆雷特 知乎 编辑:程序博客网 时间:2024/05/22 03:53

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];}

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

原创粉丝点击