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];}
以上程序只是自己的一种解决办法,如有更好的方法,还请赐教。
阅读全文
0 0
- Java编程练习
- JAVA编程练习1
- java编程练习一
- Java编程 练习一
- Java编程 练习二
- Java 网络编程 练习
- Java编程练习目录
- java编程思想练习
- java编程题练习
- Java编程练习(1)
- JAVA编程练习
- java编程练习
- spark java编程练习
- java学习练习(编程练习)
- 【编程语言】java---字符串练习
- java基本语法编程练习
- Java基本编程练习1
- java基础编程练习2
- 9月11日云栖精选夜读:阿里年会的马老师说:认真生活、快乐工作、保持理想
- Git工作流指南:Gitflow工作流
- leetcode 119. Pascal's Triangle II
- 深入机器学习系列10-ALS
- http-equiv属性详解(转)
- java编程练习
- android手机系统 6.0后的权限申请问题
- WebView使用的那些坑-Https
- Java培训有没有前途,兄弟连战狼班愿做你唯一的后盾
- kafka常用命令
- javawebday05补充(动态显示时间 全反选 添加遍历 级联菜单 动态生成表格)
- 解决spring boot websocket无法注入bean的问题
- 求数组中最大子数和的一种简单方法(非枚举)
- power designer远程连接oracle数据库并导出E-R图