初识Java(六)(一维数组)(自己学习整理的资料)

目录

一.复习题

二.数组

 三.一维数组

 四.数组排序

五.数组的插入和删除 

1.插入元素

插入元素案例

2.删除元素

删除元素案例

六.顺序查找

顺序查找案例

七.二分查找

二分查找案例

八.冒泡排序

笔记


一.复习题

  • (一)求S=1!+2!+3!+·····+n!的阶乘和。
import java.util.Scanner;public class lian {public static void main(String[] args) {Scanner input = new Scanner(System.in);int num = input.nextInt();int sum = 0;for (int i = 1;i <= num;i++){int temp = 1;for (int j = 1;j <= i;j++){temp *= j;}sum += temp;}System.out.println(sum);}
}
  • (二)给定一个十进制正整数n(1<=n<=10000),写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。(ag:当n=12时,写下1~12,这样就出现了5个“1”)。

import java.util.Scanner;public class lian {public static void main(String[] args) {Scanner input = new Scanner(System.in);int num = input.nextInt();int total = 0;//1的总数变量for (int i = 1;i <= num;i++){//i:当前数字//内层进行分离数位,对比统计1出现的个数//找替身变量int temp = i;while(temp !=0){//分离数位int n = temp%10;if (n == 1){total++;}temp /= 10;}}System.out.println(total);}
}

ps:在特殊情况在一定要学会找替身变量。 

  • (三)输入一个正整数n,求第n小的质数。
import java.util.Scanner;public class lian {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();//输入的第几个质数int i = 0;//用i保存质数的总个数int num = 2;while (true) {//判断num是不是质数boolean flag = true;//假设输入的num是质数for (int j = 2; j < num; j++) {if (num % j == 0) {flag = false;//不是质数break;}}if (flag == true) {i++;//是质数if (i == n) {System.out.println(num);break;}}num++;}}}

二.数组

  • 定义

数组就是一组相同类型的变量,它们往往都是为了表示同一批对象的统一属性。(ag:班级里所有同学的身高)

  • 与变量的区别

 三.一维数组

  • 语法 

数据类型[] 数组名 = new 数据类型 [大小];(ag: int[] a = new int[10];定义一个a数组,其中包含a[0]到a[9])   

  • 数组赋值方式
  1. 通过下标赋值。(ag:a[0] = 1;a[1] = 2;a[2] = 3;······)ps:复杂,基本不用

  2. 边声明边赋值。(ag:int[] score = {70,80,90};int[] score = new int[]{70,80,90};)

  3. 动态赋值。(ag:如下代码,从键盘输入值)ps:常用

import java.util.Scanner;public class lian {public static void main(String[] args) {int[] a =new int[10];Scanner input = new Scanner(System.in);//完成对数组元素的赋值操作for (int i = 0;i <a.length; i++){a[i] = input.nextInt();}//输出值for(int i = 0;i < a.length;i++){System.out.println(a[i]);}}
}
  • 注意事项
  1. 数组名的命名规则和变量名相同,遵循标识符命名规则。(ps:变量命名规则在初识Java(二)中有详细笔记)

  2. 在数组定义时用方括号括起来的常量表达式的值表示元素的个数,即数组的长度。

  3. 下标从0开始。(ag:上述a数组的10个元素中最后一个元素为a[9])

  4. 在数组元素访问时,用方括号括起来的表达式表示元素的下标。

  5. 数组往往与循环语句结合使用。

  6. 数组中的元素可以相同。

  7. 如果直接打印数组名称,其实输出的是数组在内存中的地址。要想打印输出数组中的每一个元素,那么要使用循环,依次遍历打印数组中的每一项。

练习题

  • (一)输入某次期中考试5位学员的成绩,求出其中的最高分
import java.util.Scanner;public class lian {public static void main(String[] args) {int[] scores =new int[5];Scanner input = new Scanner(System.in);for (int i = 0;i < scores.length; i++){scores[i] = input.nextInt();}//已经将分数放到了数组中//默认最大值int max = scores[0];for (int i =1;i < scores.length;i++){if (scores[i] > max){max = scores[i];}}//输出最大值System.out.println(max);}}
  • (二)输入5个数,求其中的最小值
import java.util.Scanner;public class lian {public static void main(String[] args) {int[] scores =new int[5];Scanner input = new Scanner(System.in);for (int i = 0;i < scores.length; i++){scores[i] = input.nextInt();}//已经将数放到了数组中//默认最小值int min = scores[0];for (int i =1;i < scores.length;i++){if (min > scores[i]){min = scores[i];}}//输出最小值System.out.println(min);}}

 四.数组排序

  • 使用java.util.Arrays类,Arrays.sort()方法:对数组进行升序排序       Arrays.sort(数组名);
import java.util.Arrays;public class lian {public static void main(String[] args) {int[] nums ={8,1,3,4,2};Arrays.sort(nums);for (int i = 0;i < nums.length;i++){System.out.println(nums[i]);}}}

案例 

  • 院子里有颗苹果树,每到秋天,树上就会结出10个苹果。苹果成熟的时候,小明就会去摘苹果。小明有一张30厘米的板凳,当他不能直接用手摘到苹果时,就会使用板凳再试试。

  • 现在已知10个苹果距离地面的高度,以及小明把手升直的时候能够达到的最大高度,请班小明算一下他能摘到的苹果数量。假设他碰到苹果,苹果就会掉下来。

import java.util.Scanner;public class lian {public static void main(String[] args) {//定义一个长度为11的数组,保存每个苹果离地面的高度int[] a = new int[11];Scanner input = new Scanner(System.in);for (int i = 1;i < a.length;i++) {a[i] = input.nextInt();}int height = input.nextInt();//小明伸手的最大高度//对比,统计int num = 0;for (int i = 1;i < a.length;i++){if (height + 30 >= a[i]){//板凳30的高度,最终小明能碰到的最大高度num++;}}System.out.println(num);}}

五.数组的插入和删除 

  • 定义

元素在实际应用中,经常需要在一个数组中插入一个元素,或者删除数组中的某一个元素,称为数组的“插入”操作或者“删除”操作。

1.插入元素
  • 插入一个元素,需要先找到插入的位置(假设下标为index),将这个元素及其之后的所有元素依次往后移一位(注意要从后往前进行操作),再将给定的元素插入(覆盖)到位置index。

插入元素案例
  • 有一个升序排序的成绩数组,其中成绩有78,87,95,98,100.增加一个学生的成绩,插入数组中后保证数组元素依然升序排列。

import java.util.Scanner;public class lian {public static void main(String[] args) {int[] nums = new int[6];Scanner input = new Scanner(System.in);nums[0]=78;nums[1]=87;nums[2]=95;nums[3]=98;nums[4]=100;//定义一个变量来保存新插入的分数int score = input.nextInt();//插入元素,分三步int index = nums.length - 1;for (int i = 0;i < nums.length;i++){if (score < nums[i]){index = i;break;}}//第二步:元素后移,倒着移动for (int j = nums.length - 1;j > index;j--){nums[j] =nums[j - 1];}//第三步:重新赋值nums[index] = score;//打印新的数组结果for (int i = 0;i < nums.length;i++){System.out.print(nums[i] + " ");}}}

ps:插入元素分三步

  1. 找位置,循环找位置。
  2. 元素后移,倒着移动。
  3.  重新赋值。
2.删除元素
  • 删除某一个元素,也需要先找到删除的位置(假设下标为index),将下标为index+1及其之后的所有元素依次向前移一位,覆盖原来位置上的元素。

删除元素案例
  • 有n位同学(每位同学都有个唯一的学号,用1~n之间的整数表示)在老师面前排队背书,现在第x位同学觉得自己忘了,便离开了队伍,求第x位同学离开队伍后的排队情况。

import java.util.Scanner;public class lian {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();//总人数int[] a = new int[20];//最多20人排队for (int i = 1;i <= n;i++){a[i] = input.nextInt();}int num = input.nextInt();//删除元素for (int i = num;i <= n;i++){a[i] = a[i + 1];}n--;for (int i = 1;i <=n;i++){System.out.println(a[i] + "\t");}}}

ps:删除元素分两步 

  1. 找位置。
  2. 元素前移,正向移动。

六.顺序查找

  • 定义

顺序查找就是按照从前往后(或从后往前)的顺序,将数组中的元素依次与要查找的数num进行比较。

顺序查找案例
  • 输入一个数字sum,表示学生的总人数,再输入num个数字表示学生的成绩,统计成绩为90分的有多少人?
import java.util.Scanner;public class lian {public static void main(String[] args) {Scanner input = new Scanner(System.in);int num = input.nextInt();int[] scores = new int[100];for (int i = 1;i <= num;i++){scores[i] = input.nextInt();}//只能一个个的对比进行查找int count = 0;for (int i = 1;i <= num;i++){if (scores[i] == 90){count++;}}System.out.println(count);}}

ps:顺序查找较慢。

七.二分查找

  •  定义

二分查找又称“折半”查找,其优点是比较次数少、查找速度快。但是要求数据是递增或递减排序的。

二分查找案例
  • 小明和小红玩游戏,小明心里想一个数字,小红来猜,小明根据小红猜测的数字提示“猜大了”、“猜小了”、“猜对了”。使用二分法模拟游戏的全过程。
import java.util.Scanner;public class lian {public static void main(String[] args) {System.out.println("请输入一个数字,范围是:(1~100之间,包含1和100)");Scanner input = new Scanner(System.in);int num = input.nextInt();int left = 1,right = 100;while (left <= right){//证明还可以继续查找int mid = (left + right) / 2;if (mid == num) {System.out.println(mid + "猜对了");break;}//猜大了if (mid > num){//进行调整,调整右边界right = mid - 1;System.out.println(mid + "猜大了");}//猜小了if (mid < num){//调整左边界}left = mid - 1;System.out.println(mid + "猜小了");}}
}

 ps:二分查找的注意事项

  1. 关注左右边界。
  2. 循环条件,left <= right。
  3. 计算中间位置(left + right) / 2。
  4. 动态调整左右边界。
  5. 100个数字最多查找7次,原因是2的几次方>100。结果就应该是几。
  6. 大的前提是,数组元素必须是有序的。1~100数字本身就是有序的。

八.冒泡排序

  • 底层本质就是一个二重循环。
  • 外层循环控制比较的趟数。N-1
  • 内层循环控制的是每一趟比较的次数。N-1-i(下标从0开始)N-i(下标从1开始)

案例

  • 将数组元素 126  80   98  158  204,降序排序。
public class lian {public static void main(String[] args) {//冒泡排序底层的本质是一个二重循环//外层控制比较的趟数int[] nums ={126,80,98,158,204};for (int i = 1;i <= 4;i++){for (int j = 0;j <= 5 -1-i;j++){if (nums[j] < nums[j + 1]){int temp = nums[j];nums[j] = nums[j+1];nums[j+1]=temp;}}}for (int i = 0;i<nums.length;i++){System.out.println(nums[i]+"\t");}}
}

笔记

  • 数组.length : 获取数组长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149794.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

微软宣称其新工具可纠正人工智能幻觉 但专家依然对此表示怀疑

人工智能经常胡言乱语&#xff0c;微软现在说它有办法解决这个问题&#xff0c;但我们有理由对此持怀疑态度。微软今天发布了一项名为"更正"&#xff08;Correction&#xff09;的服务&#xff0c;它可以自动修改人工智能生成的与事实不符的文本。Correction 首先会标…

Golang | Leetcode Golang题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; func eraseOverlapIntervals(intervals [][]int) int {n : len(intervals)if n 0 {return 0}sort.Slice(intervals, func(i, j int) bool { return intervals[i][1] < intervals[j][1] })ans, right : 1, intervals[0][1]for _, p : ra…

js实现多行文本控件textarea,根据文本内容自适应窗口全部显示

概述 本人在使用html控件textarea&#xff0c;多行显示的时候&#xff0c;希望根据后台实际的文本&#xff0c;来全部显示文本内容&#xff0c;而不用再去操作滚动条查看全部文本。 本功能实现的难点在于&#xff0c;计算当前文本显示有多少行。 软件环境 编辑器&#xff1a…

使用 UWA Gears 测试小游戏性能

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 随着小游戏的规模和用户量持续增长&#xff0c;玩家对于小游戏的性能要求也越来越高。为了能够给玩…

现代桌面UI框架科普及WPF入门1

现代桌面UI框架科普及WPF入门 文章目录 现代桌面UI框架科普及WPF入门桌面应用程序框架介绍过时的UI框架MFC (Microsoft Foundation Class)缺点 经典的UI框架**WinForms****QT****WPF** 未来的UI框架**MAUI****AvaloniaUI** WPF相对于Winform&#xff0c;QT&#xff0c;MFC的独立…

1.1 elasticsearch分布式集群基本搭建(centos7.x + elaticsearch7.11.1)

【1】分布式分片集群基础概念 【1.1】ES的分布式集群有什么用&#xff1f; 高可用 高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计减少系统不能提供服务的时间。如果系统每运行100个时间单位&#xff0c;会有…

ubuntu22.04磁盘挂载(多磁盘和单磁盘挂载)

多磁盘挂载到同一个目录 # 如果没有安装逻辑卷管理系统工具sudo apt install lvm2 # 查看磁盘分区sudo fdisk -l # 新建物理卷sudo pvcreate /dev/nvme0n1 /dev/nvme1n1 # 查看现有物理卷信息sudo pvdisplay # 新建物理卷sudo vgcreate dnyjy_vg /dev/nvme0n1 /dev/nvme1n1…

微服务之服务保护

Sentinel引入Java项目中 一&#xff1a;安装Sentinel 官网地址&#xff1a;https://github.com/alibaba/Sentinel/releases 二&#xff1a;安装好后在sentinel-dashboard.jar所在目录运行终端 三&#xff1a;运行命令&#xff0c;端口自己指定 java -Dserver.port8090 -Dcs…

Unity 热更新(HybridCLR+Addressable)-资源更新

七、资源更新 创建一个叫Aot的文件夹&#xff0c;用来存放不会热更新的资源 这个修改为第三个 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b8be5e6465184ad5ad6173c6870bfa06.png 这个是更新 在更新或者打包时遇到端口被占的报错&#xff0c;不用理会&#xf…

frp内网穿透常见问题

Frp编译和部署比较复杂&#xff0c;多端口映射时或者连接数多的情况下会出现不稳定的现象&#xff0c;不适合小白使用&#xff0c;而且仅是上一代的内网穿透技术&#xff0c;生产环境使用建议选择稳定性比较高的产品&#xff0c;如神卓互联、花生壳等&#xff0c;都是采用C语言…

Springboot原理之bean的依赖功能、自动配置

1. Bean管理 Spring 当中提供的注解 Component 以及它的三个衍 生注解&#xff08; Controller 、 Service 、 Repository &#xff09;来声明 IOC 容器中的 bean 对象&#xff0c;同时我们也学 习了如何为应用程序注入运行时所需要依赖的 bean 对象&#xff0c;也就是依赖注…

电池快充协议芯片

1&#xff1a;18650充电快充规则 电池知识 | 东莞市恒帝电子科技有限公司 (heldee.com) 锂电池快速充电知识【钜大锂电】 (juda.cn)18 锂电池和18650锂电池能不能快速充电&#xff0c;四种充电方式讲解 | 东莞市恒帝电子科技有限公司 (heldee.com) 2&#xff1a;国产厂家 …

光子架与电子架 -- 主从子架

主从子架模式可以实现物理上的多个子架在网管上作为一个网元统一管理&#xff0c;这样可以节省IP资源与管理开销&#xff0c;方便维护。 主从子架级联模式 在主从子架模式下&#xff0c;仅主子架可以和网管相连。和网管相连的主子架所在网元为网关网元。主从子架支持树型级联和…

node-rtsp-stream、jsmpeg.min.js实现rtsp视频在web端播放

1. 服务地址&#xff08;私有&#xff09;&#xff1a;https://gitee.com/nnlss/video-node-server 2.node-rtsp-stream 需要安装FFMPEG&#xff1b; 3.给推拉流做了开关&#xff0c;可借助http请求&#xff0c;有更好方式可联系&#xff1b; 4.存在问题&#xff1a; 1&…

浅谈提示工程之In-context learning技术

提示工程之In-context learning技术&#xff1b; 通过一张图片围绕下边几个方面进行简单说明 概念起因本质结构注意事项 日常总结

C++(9.24)

头文件 #ifndef MY_STRING_H #define MY_STRING_H#include <iostream>class My_string { private:char *ptr; // 指向字符数组的指针int size; // 字符串的最大容量int len; // 字符串的当前长度public:My_string();My_string(const char *src);My_string(const My_s…

Error:Decorators are not valid here. 使用Angular中的装饰器

Decorators are not valid here&#xff0c;项目中出现这个提示信息&#xff0c;说明装饰器未知错误、或者在不支持的元素上使用了装饰器。 如下图所示&#xff0c;我在NgModule装饰器后面加了一个导出方法&#xff0c;加完之后控制台提示了如下错误&#xff1a;Error TS1206&a…

【python】横截面数据分析及可视化报告示例

问题描述 题目&#xff1a; 共享的数据文件夹包含 2 个外部文件。第一个文件 "project data.xls "涉及国家层面的数据&#xff08;2000-2019 年&#xff09;&#xff0c;变量大多摘自世界发展指标。变量解释在第二个文件中 创建一个模型&#xff0c;解释为什么一些国…

STM32基础学习笔记-SPI通讯协议协议面试基础题8

第八章、SPI : LCD屏 1、LCD是什么 &#xff1f;发光原理 &#xff1f; 1.LCD:液晶显示 当有电流的时候&#xff0c;液晶层中的物质会有序排列 没有电流的时候&#xff0c;无序排列&#xff0c;光不可以透过 当像素点只有黑/白色的时候&#xff0c;灰度图&#xff08;非黑即…

windows C++-同步数据结构与 Windows API

将并发运行时提供的同步数据结构的行为与 Windows API 提供的同步数据结构的行为进行比较。 并发运行时提供的同步数据结构遵循协作线程模型。 在协作线程模型中&#xff0c;同步基元显式将其处理资源传递给其他线程。 这与抢占式线程模型不同&#xff0c;其中处理资源由控制调…