Practice| 数组
/*
从键盘确定班级的组号,在从键盘输入每一组的人数,并输入每一个学员的成绩,并求出,每一组的平均分,
全部的平均分,每一组的最高分,全部的最高分,并显示结果. */
class Test3{
public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in); //先确定一共有多少个组;
System.out.print("请输入一共有多少个组:");
int groups = input.nextInt(); int[][] scores = new int[groups][]; //如5个组,+ 人数 //遍历输入每个组的人数 for(int i = 0;i < scores.length;i++){ System.out.print("请输入第" + (i+1) +"组的人数:");
int num = input.nextInt();
scores[i] = new int[num]; //确定每 i 行的列数 <==> 相当于一维数组; } //遍历scores二维数组,输入成绩即填充列数,默认值为0 ;
for(int i = 0; i < scores.length;i++){
for(int j = 0;j < scores[i].length;j++){
System.out.print("请输入第"+ (i+1) +"组" + "第"+ (j+1) + "个学员的成绩:");
int score = input.nextInt();
scores[i][j] = score;
}
System.out.println();
}
//每个组和班级的平均分
int sumAll = 0;
int countAll = 0;
for(int i = 0; i < scores.length;i++){
int sumGroup = 0; //每循环一次就会赋0 -->可求出每组的成绩
int countGroup = 0;
for(int j = 0;j < scores[i].length;j++){
sumAll += scores[i][j];
countAll++; sumGroup += scores[i][j];
countGroup++;
}
System.out.println("第" + (i+1) + "组的总分为:" + sumGroup + "\t" + "第" + (i+1) + "组的平均分为:" + sumGroup/countGroup);
}
System.out.println("全班总分为:" + sumAll + "\t" + "全班平均分为:" + sumAll/countAll); //求每个组和班级的最高分
int max_ban = 0;
for(int i = 0;i < scores.length;i++){
int max_zu = 0;
//int max_ban = 0;
for(int j = 0;j < scores[i].length;j++){ if(scores[i][j] > max_zu){
max_zu = scores[i][j];
}
if(scores[i][j] > max_ban){
max_ban = scores[i][j];
} }System.out.println("第" + (i+1) + "组的最高分为:" + max_zu); }System.out.println("全班最高分为:" + max_ban); }
}
数组的复制
/*
(1)已知一个数组存储了成绩
int[] scores = {67,89,23,45,99};
要让你把,所有不及格的成绩找出来,放到一个数组中
结果:{23,45} (1)先统计不及格的有几个人,count个
(2)新建数组 int[] low = new int[count];
(3)再遍历scores,把不及格的复制到low数组中
*/ class ArrayCopy{
public static void main(String[] args){
int[] scores = {67,89,23,45,99};
int count = 0;
for(int i = 0;i < scores.length; i++){
if(scores[i] < 60){
count++;
}
}
int[] low = new int[count]; for(int i = 0,j = 0; i < scores.length && j<count; i++){ //&& j<count不写也可以不会超范围;
if(scores[i] < 60){
//j = i;//i=2, 3
low[j] = scores[i]; //这里是关键啊啊
j++;
}
} //for(int i = 0;i<low.length;i++){
//System.out.println(low[i]);
//}
for(int num : low){
System.out.print("不及格的有:" + num + "\n");
}
}
}
二分查找(前提是有顺序的)
使用二分查找算法查找字符串数组中 {"a","b","c","d","e","f","g","h"} g的元素。
* String类型:
* (1)重写了equals方法
* (2)实现了java.lang.Comparable接口
* 这个接口的抽象方法 int compareTo(String str)
*/
public class Test19 {
public static void main(String[] args) {
String[] arr = {"a","b","c","d","e","f","g","h"};
String find = "g"; int left = 0;
int right = arr.length-1;
int mid = (left + right)/2;
int index = -1; while(left<=right){
if(arr[mid].equals(find)){
index = mid;
break;
}else if(find.compareTo(arr[mid])>0){//find比arr[mid]大,去mid的右边查找
left = mid +1;
}else{
right = mid - 1;
}
mid = (left + right)/2;
}
System.out.println("g的下标是:" +index);
}
}
//二分法
class BinarySearch{
public static void main(String [] args){
int[] arr = {0,1,2,5,8,9,12,17,20};
//int[] arr = {1,2,5,8,9,12,17,20};
int index = -1;
int find = 5;
int left = 0;
int right = arr.length - 1;
int mid = (left + right) /2; while(left <= right){ //left left left left
if(arr[mid] == find){//找到了
index = mid;
break;
}else if(find < arr[mid]){//说明find在[mid]的左边
right = mid-1;
}else{//说明find在[mid]的右边
left = mid + 1;
}
mid = (left + right)/2;
}
if(index==-1){
System.out.println("未找到");
}else{
System.out.println("下标:" + index);
}
}
}
冒泡排序(把大的往右边移动-下沉;把小的往左移动-冒泡)
/*
冒泡排序:
从小到大 //1、先照我这个写
//2、如果我要求,每一轮从最后一个元素开始比较
//我刚才,相当于把“大”往“右”移动
//现在,把“小”往“左”移动
/*
冒泡排序:实现从小到大
(1)方法一:把“大”往“右”移动,称为“下沉”
(2)方法二:把“小”往“左”移动,称为“冒泡” */ class BubbleSort{
public static void main(String[] args){
int[] arr = {3,9,4,2,1,8,6}; //6 //从小到大:通过相邻元素的比较, 大的往后移动称为 下沉; for(int i = 1;i < arr.length-1;i++ ){
for(int j = 0;j < arr.length-1;j++){
if(arr[j] > arr[j+1]){
int temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + "\t");
} }
} ---->>>
1 2 3 4 6 8 9
class BubbleSort{
public static void main(String[] args){
int[] arr = {3,9,4,2,1,8,6}; //6 //从小到大:把 小 的往 左 移动;称为"冒泡"。
for(int i = 0; i < arr.length;i++){
for(int j = arr.length-1; j > i;j--){
if(arr[j] < arr[j-1]){ //如果后边的arr[j] < 前边的arr[j-1]
int temp = 0;
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
} ---->>>
1 2 3 4 6 8 9
package com.atguigu.exam; import java.util.Arrays; public class Test20 {
public static void main(String[] args) {
int[] array = {4,3,6,1};
sort(array);
System.out.println(Arrays.toString(array));
} public static void sort(int[] arr){
//轮数:n-1
for (int i = 1; i < arr.length; i++) {
//每一轮从左往右比较
/*
* 当i=1,j=0,1,2,...arr.length-2 j<arr.length-i
*/
for (int j = 0; j < arr.length-i; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
直接选择排序
/* 直接选择排序-->>
思路:
每一轮找出本轮未排序元素中的最小值,然后和它应该在的位置的元素交换 例如:
第一轮:最小值是1,它的位置[4],它应该在[0],[4]和[0]位置元素交换 {1,2,7,9,4,6}
第二轮:最小值是2,它的位置[1],它应该在[1],不动 {1,2,7,9,4,6}
第三轮:最小值是4,它的位置[4],它应该在[2],[4]和[2]位置元素交换 {1,2,4,9,7,6}
第四轮:最小值是6,它的位置[5],它应该在[3],[5]和[3]位置元素交换 {1,2,4,6,7,9}
第五轮:最小值是7,它的位置[4],它应该在[4],不动
*/ class TestSelectSort{
public static void main(String[] args){
int[] arr = {4,2,7,9,1,6};
//外循环:5轮
//i的循环值:0,1,2,3,4 i<arr.length-1
for(int i = 0; i <arr.length-1;i++){
//找出本轮的最小值及其下标
//(1)先假设“本轮未排序部分”的第一个元素最小
int min = arr[i];
int index = i; //(2)用min 和 "剩余的元素" 进行比较,确定本轮的最小值; 从i+1开始比较,到最后;
/*
第一轮:未排序部分 [0,5],min=arr[0],index=0,j=1,2,3,4,5
第二轮:未排序部分 [1,5],min=arr[1],index=1,j=2,3,4,5
第三轮:未排序部分 [2,5],min=arr[2],index=2,j=3,4,5
第四轮:未排序部分 [3,5],min=arr[3],index=3,j=4,5
第五轮:未排序部分 [4,5],min=arr[4],index=4,j=5
*/ for(int j = i+1; j < arr.length; j++){
if(min > arr[j]){
min = arr[j];
index = j;
}
} //(3)把[index]位置的元素和它应该在的位置交换
/*
第一轮,最小值应该在[0],第一轮i=0
第二轮,最小值应该在[1],第一轮i=1
第三轮,最小值应该在[2],第一轮i=2
第四轮,最小值应该在[3],第一轮i=3
第五轮,最小值应该在[4],第一轮i=4
*/
if(index != i){ //如果arr[index],即本轮的最小值,不在它应该在的位置[i],就要交换
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
for(int num : arr){
System.out.print(num); //
} }
}
Practice| 数组的更多相关文章
- PAT (Basic Level) Practice 1008 数组元素循环右移问题
个人练习 一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN ...
- PAT (Basic Level) Practice 1008 数组元素循环右移问题 分数 20
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN ...
- PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808 #include <iost ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- ConCurrent in Practice小记 (1)
ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局 ...
- C++类实现三维数组算法
在学习北京大学教授的<程序设计实习 / Practice on Programming>中,遇到了一个习题,花了很长时间研究,现在分享出来: 课题地址:https://class.cour ...
- Java RGB数组图像合成 ImageCombining (整理)
/** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...
- 双数组Trie树 (Double-array Trie) 及其应用
双数组Trie树(Double-array Trie, DAT)是由三个日本人提出的一种Trie树的高效实现 [1],兼顾了查询效率与空间存储.Ansj便是用DAT(虽然作者宣称是三数组Trie树,但 ...
- java对象数组的概述和使用
1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public ...
随机推荐
- Cocos2dx制作帧动画
1.使用plist + png方式加载资源图,参数只需要plist路径 cc.SpriteFrameCache:getInstance()::addSpriteFrames("res/yk/ ...
- Confluence 6 在数据源连接中启用校验查询
确定 Confluence 在数据库连接池中校验数据库连接: 停止 Confluence. 编辑 <installation-directory>/conf/server.xml 文件(或 ...
- SpringCloud注册中心(Eureka)
注册中心的作用就是用来方便接口暴露出来的一个管理工具,如果所有的接口只是暴露出来,没有一个同一的管理工具,又有谁知道你暴露了哪些接口了,Eureka是一个springcloud的服务注册和发现模块 搭 ...
- 使用 declare 语句和strict_types 声明来启用严格模式:
使用 declare 语句和strict_types 声明来启用严格模式: Caution: 启用严格模式同时也会影响返回值类型声明. Note: 严格类型适用于在启用严格模式的文件内的函数调用,而不 ...
- Metasploit渗透测试模块(一)
1.Metasploit模块加载 初始化界面,成功要加载数据库 查看 Metasploit中已近存在的漏洞模块使用 show payloads
- 用来表达更复杂的sql语句!!!!!extra 原声sql
extra 用来表达更复杂的sql语句!!!!! extra可以指定一个或多个 参数,例如 select, where or tables. 这些参数都不是必须的,但是你至少要使用一个!要注意这些额外 ...
- linux基础练习题(3)
关卡三 练习题 在家路径下创建A文件夹 在上一步创建的A文件夹中,创建B/C/D文件夹 在上一步所在的路径中,创建C/E/F文件夹 使用目录树查看文件夹结构 A/B/C中创建一个hello.py文件 ...
- 将txt文本转换为excel格式
将txt文本转换为excel格式,中间使用的列分割为 tab 键 一.使用xlwt模块 注:Excel 2003 一个工作表行数限制65536,列数限制256 需要模块:xlwt 模块安装:xlwt ...
- EntityFramework Reverse POCO Code First 反向生成器
https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator ...
- ORA-01536: 超出表空间 'tablespace_name' 的空间限额
表空间限额问题知识总结: 表空间的大小与用户的配额大小是两种不同的概念 表空间的大小是指实际的用户表空间的大小,而配额大小指的是用户指定使用表空间的的大小 把表空间文件增大,还是出现 ...