JAVA基础学习心得体会:
7月上旬在结束了校园生活之后,由于疫情当道,闲得无聊,就开始和志同道合的伙伴一起系统性的去学习JAVA这一门计算机语言,学到现在已经差不多两周了,原本我以为学习一门计算机语言应该是枯燥乏味的,但我却从中感受到了前所未有的快乐,在JAVA这条路的前方有老师带着你,左右两侧有你的伙伴陪着你,陪着你一起学习,一起进步,一起相互鼓励,也相互竞争。这两周的时光过的非常快,也很充实,每天都沉浸在JAVA的学习中,如痴如醉,虽然幸苦不过我所得到的是远超越这份辛苦的收获。
从JAVA最基本的创建历史开始,开启了我的JAVA之旅,我现在所见识到的JAVA还仅仅是其强大功能中的冰山一角,虽然书中开头以及老师的口中都在讲JAVA语言的特点,其强大的功能,以及跟其他的语言相比之下的优势,但对于一个还没有看清JAVA全貌的初学者而言这些话语就像一阵风吹在了我的身上,我虽然感受到了,但也只是停留在最表面而已。虽然如此,但我会更加深入完整的学习,尽力去感受JAVA的每一面的风景。
接下来就开始记录我用这两周时间所学习的JAVA知识来解决的小练习,如果代码里有什么错误或者各位有更好的思路都可以留下你的评论来与我交流。
JAVA基础练习
题目1
朋友聚会的时候可能会玩一个游戏:逢七过。
规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。
为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。
这样,大家将来在玩游戏的时候,就知道哪些数据要说:过。
public class Test {
public static void main(String[] args){
for(int i = 1;i<101;i++){ // for循环遍历1-100的数字
if(i%10 == 7 || i/10%10 == 7 || i%7 == 0){ // 缝7过的判断条件,中间用短路或连接
System.out.println(i); // 打印所需要的数字
}
}
}
}
第一个题比较简单考的是一个简单的循环以及条件判断语句的编写
题目2
有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
public class Test {
public static void main(String[] args){
int arr[] = new int[20]; // 定义一个长度20的数组来记录兔子每个月的对数
arr[0] = arr[1] = 1; // 由于前面两个月的对数已知直接赋值方便后续计算
for(int i = 2;i< arr.length;i++){
arr[i] = arr[i-2]+arr[i-1]; // 每一个的兔子对数等于前两个月兔子对数之和
}
System.out.println(arr[19]); // 打印第20个月兔子的对数
}
}
这是一道数学题,我的想法是先用数学的思路把兔子增长的规律找出,在根据规律来编写代码
题目3
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
public class Test {
public static void main(String[] args){
for(int i = 1;i<21;i++){ // 20是可以购买公鸡的最大数量,这里控制20次循环更快速找到答案
for(int j = 1;j<34;j++){ // 33是可以购买母鸡的最大数量,目的同上
int k = 100-i-j; // 控制条件来控制小鸡的数量
if(5*i+j*3+k*1/3 == 100 && k%3 == 0){ // 判断条件建立满足条件的关系表达式
System.out.println(i+","+j+","+k); // 打印满足条件的所有购买方案
}
}
}
}
}
这也是一道数学题,我的想法是先用数学方法思考,在进一步编写成代码
题目4
设计一个方法,用于比较两个数组的内容是否相同。
public class Test {
public static void main(String[] args){
int arr[] = new int[]{1,2,3,4,5,6,7,8}; // 定义数组1
int brr[] = new int[]{1,2,3,4,5,6,7,8}; // 定义数组2
compare(arr,brr); // 调用比较方法
}
public static void compare(int[] a ,int[] b){
if(a.length == b.length){ // 判断两个数组长度是否相等
int n = 0; // 定义一个判断条件用来判断数组是否相等的值
for(int i = 0;i< a.length;i++){ //进行数据的比较
if(a[i] != b[i]){ //如果有数据不相等,则让n=1
n = 1;
}
}
if(n == 0){ //n为0就说明数据相等,不相等n的值为1
System.out.println("数组数据完全一致");
}else System.out.println("数组数据不一致");
}else System.out.println("数组长度不一致");
}
}
我的思路是先比较两个数组的长度,在进一步比较数组中的数据是否相等,需要使用到一个中间值来进行判断,只要判断的值不同就可以了
题目5
随机生成6个数,这6个数不能相同
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args){
int[] arr = new int[6]; // 定义一个长度为6的数组来接受6个生成数
Random r = new Random(); // 创建Random方法
for(int k= 0;k<20;k++) { // 为了更好的查看是否满足题目要求直接生成20组数据
for (int i = 0; i < arr.length; i++) { // 生成6个随机数接收并打印
arr[i] = r.nextInt(30);
System.out.print(arr[i] + ",");
while(i>=0){ // 判断条件只要为真就行
for (int j = 0; j < i; j++) { // 从后往前比较如果出现相当的数就重新接收数
if (arr[i] == arr[j]) {
arr[i] = r.nextInt(30);
}
}
break; // 全部比较完成后跳出循环
}
}
System.out.println(Arrays.toString(arr)); // 用Arrays类中的方法打印数组
}
}
}
难点在于保证6个数不相同,使用循坏让数挨个进行比较,重复的替换成心得数即可
题目 6
编写程序实现对给定的 4 个整数从大到小的顺序排列。
import java.util.Arrays;
public class Test {
public static void main(String[] args)
int arr[] = new int[]{1,2,3,4}; // 定义一个长度4数组并赋值
compare(arr); // 调用方法
}
public static void compare(int[] arr){
for(int i = 0;i< arr.length;i++){ // 冒泡排序法,依次比较将大的数放在前面
for(int j = 0;j< i;j++){
if(arr[i] > arr[j]){
int temp = arr[j]; // 定义一个空值来进行互换
arr[j] = arr[i];
arr[i] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
这一个考的是排序,排序方法有很多,我这里使用的是冒泡排序法,冒泡排序法的思路就是让数组的数两两进行比较将大的或小的数往前或往后排,其他的排序方法应该也是能够实现的
题目 7
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加及a的数值由用户控制。
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in); // 实现键盘输入
System.out.println("请输入你想加的个数");
int num = sc.nextInt();
System.out.println("请输入想加的数");
int num1 = sc.nextInt();
System.out.println(sum(num,num1)); // 打印返回值
}
public static int sum(int a,int b){
int sum = b; //定义一个和,如果要加的个数为1就直接返回
if(a == 1){
return sum;
}else {
for(int i =1;i<a;i++){ //进行循环,找到sum和b之间的关系表达式,进行累加操作
sum += b*10+b;
b = b*10+b;
}
}return sum; // 返回答案
}
}
这个题我的思路是先将主函数中的所需要输入的值写好,在去构造求和方法,通过数学方法找到关系表达式 如 aa = a*10 +a aaa = aa*10+a 通过循环来实现
题目 8
在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
import java.util.Random;
public class Test {
public static void main(String[] args){
int arr[] = new int[6]; // 定义长度为6的数组
Random r = new Random();// 随机生成数据
int max = arr[0]; // 定义最大值
int min = arr[0]; // 定义最小值
int sum = 0; // 定义最后的求和
for(int i = 0;i< arr.length;i++){
arr[i] = r.nextInt(100); // 用数组接收随机数
System.out.print(arr[i]+",");// 打印数组
if(max < arr[i]){ // 用for循环找到最大值
max = arr[i];
}
if(min > arr[i]){// 用for循环找到最小值
min = arr[i];
}
sum += arr[i];// 将数组中的数求和
}
int avg =( sum - max -min)/ arr.length-2; // 去掉最大值和最小值,求平均值
System.out.println("平均分是"+avg);
}
}
这个题比较简单,考的是for循环找最大最小值,要先将需要使用的变量在循环外定义,找出最大值和最小值,对数组求和剪去最大值和最小值,最好在除以数组长度-2得到平均值