我的java日记(基础下)

本文详细介绍了选择排序、冒泡排序、数据校验等核心计算机科学概念,通过实例代码展示算法实现,并强调了在实际应用中正确使用Scanner类获取数据的重要性。同时,阐述了数组排序与查找方法,如折半查找,以及二维数组的使用场景,旨在提升读者在编程领域的技能。


今天又学到了很多东西,把以前一直不太明白的选择排序,冒泡排序和折半查找搞明白了,心中不由的产生一股动力, 因为在这个社会没有一技之长是无法立足的.所以我一定进入黑马学习. 只有学到了真正的东西,才能在社会上站稳脚跟.

一:Scanner类:从键盘上输出
   System.in:标准输入流
 例:
import java.util.Scanner;   //导包
class  ScannerTest
{
 public static void main(String[] args)
 {    //创建一个对象,指定从键盘输入
  Scanner sr=new Scanner(System.in);
  int num=sr.nextInt();//获取一个整型数据
  System.out.println("num="+num);
  Scanner sc=new Scanner(System.in);
  String str=sc.nextLine();
  System.out.println("输入的内容是:"+str);
 }
}


/*
通过Scanner对象获取数据注意:
如果先输入整数,再输入字符串则必须要再次实例化一个Scanner对象.
*/

二:数据的校验:
       1:正确数据
       2:边界数据
       3:错误数据

三:选择排序
 让0角标处的元素和其他的元素进行比较,第一次比较完后,最小值出现在了0角标位置.
 再让1角标处的元素和其后元素进行比较,比较完后,此小值出现在了1角标位置.
 依次类推,即可得到一个从小到大排序的数组.
例:class SelectDemo
{
 public static void main(String[] args)
 {
  int[] arr={12,23,45,223,4,2,452};
  System.out.println("排序前:");
  print(arr);
  selectsort(arr);
  System.out.println("\n排序后:");
  print(arr);
 }
 public static void selectsort(int[] a){
  int temp=0;
  //外循环控制比较次数
  for(int x=0;x<a.length-1;x++){
   //内循环控制元素的比较.
   //y=0,但是重复,所以y从1开始
   //下一次,x从1开始,那么,这时候又重复了.
   //经过观察,发现规律:y永远比x大1,所以最终确定y=x+1;
   for(int y=(x+1);y<a.length;y++){
    //数据比较
    if(a[x]>a[y]){
     //交换数据
     temp=a[x];
     a[x]=a[y];
     a[y]=temp;
    }
   }
  }
 }
 public static void print(int[] a){ //打印输出
  for(int i=0;i<a.length;i++){
    System.out.print(a[i]+"  ");
   }
 }
}

四:冒泡排序
相邻的元素两两比较,第一次比较完后,较大值出现在较大角标索引位置.
依次类推,就得到了一个从小到大排序的数组.
例:
class BubbleDemo
{
 public static void main(String[] args)
 {
  int[] arr={12,23,45,223,4,2,452};
  System.out.println("排序前:");
  print(arr);
  bubblesort(arr);
  System.out.println("\n排序后:");
  print(arr);
 }
 public static void bubblesort(int[] a){
  for(int x=0;x<a.length-1;x++){  //外循环控制比较次数
   for(int y=0;y<a.length-1-x;y++){  //length-1是为了防止y+1越界
    if(a[y]>a[y+1]){//数据的比较
     int temp=a[y];//交换数据
     a[y]=a[y+1];
     a[y+1]=temp;
    }
   }
  }
 }
 public static void print(int[] a){ //打印输出
  for(int i=0;i<a.length;i++){
    System.out.print(a[i]+"  ");
   }
 }
}
五:Arrays.sort();

五:查找数据:

  1:普通查找:
例;
//查找某个元素在数组中的角标
/*思路:就是遍历这个数组,然后把6和这个数组中的的元素进行比较,如果有满足条件的元素,就把其索引返回即可.
  1:6在数组中存在.
     返回第一个6的索引位置

  2:6在数组中不存在
     返回-1
*/
class SearchArray1
{
 public static void main(String[] args)
 {
  int arr[]={1,2,3,4,6,7};
  System.out.println("6的位置:"+search(arr,6));
 }
 public static int search(int[] arr,int value){
  int temp=-1;
  for(int i=0;i<arr.length;i++){
   if (arr[i]==value)
   {
    temp=i;
   }
  }
  return temp;
 }
}

//此中方法的查找效率很低.一般用于无序数组

.
2:折半查找(二分查找):
    前提:数组必须有序.
    注意:不能先对数组排序,再进行二分查找.
   例:
/*
折半查找:必须要求数组有序.
我们可以定义三个变量,用于保存数组的头索引,中间索引,尾索引.
int min=0;
int max=arr.length-1;
int middle=(min+max)/2;
int value     //要查找的值
如果value<middle,则在左半边找,max=middle-1,middle=(max+min)/2;
如果value>middle,max=middle+1,middle=(max+min)/2则在右半边查找.
依次类推就可以找到value值,
如果value值不存在则返回-1.
*/
class ZhebanSearch   //
{
 public static void main(String[] args)
 {
  int[] arr={12,23,32,45,56,67,78};
  
  System.out.println("要查找的内容是arr["+search(arr,56)+"]");
 }
 public static int search(int[] arr,int value){
  int min=0;
  int max=arr.length-1;
  int middle=(max-min)/2;
  while (arr[middle]!=value)
  {
   if(value>arr[middle]){
    min=middle+1;
   }else if(value<arr[middle]){
    max=middle-1;
   }
   if (min>max)
   {
    return -1;//如果小的索引比大的索引还大,那么,数据不存在。所以返回-1.
   }
   middle=(max+min)/2;
  }
  return middle;
 }
}


六:二维数组:数组中的数组,一维数组中的每一个元素又是一个一维数组.

 格式1:
    int[][] arr=new int[3][2];表示有三个一维数组,每个一维数组中又有2个元素.
  
 格式2:
    int[][] arr=new int[3][2];表示此二维数组中有三个一维数组,每个一维数组都是默认初始化值null,
    可以对这三个一维数组分别进行初始化.
    arr[0]=new int[1];
    arr[1]=new int[2];
    arr[2]=new int[3];
 格式3:
    int[][] arr={{1,2,4},{23,2},{7,45,6,3}};
    arr[0][2]={1,2,4};
    arr[1][]={23,2};
    arr[2][]={7,45,6,6};
  for(int i=0;i<arr.length;i++){
 for(int j=0;j<arr[i].length;i++){
  System.out.println(a[i][j]);
 }
  }

 

 

 

 

 


 

内容概要:本文详细介绍了一个基于Java和Vue的联邦学习隐私保护推荐系统的设计与实现。系统采用联邦学习架构,使用户数据在本地完成模型训练,仅上传加密后的模型参数或梯度,通过中心服务器进行联邦平均聚合,从而实现数据隐私保护与协同建模的双重目标。项目涵盖完整的系统架构设计,包括本地模型训练、中心参数聚合、安全通信、前后端解耦、推荐算法插件化等模块,并结合差分隐私与同态加密等技术强化安全性。同时,系统通过Vue前端实现用户行为采集与个性化推荐展示,Java后端支撑高并发服务与日志处理,形成“本地训练—参数上传—全局聚合—模型下发—个性化微调”的完整闭环。文中还提供了关键模块的代码示例,如特征提取、模型聚合、加密上传等,增强了项目的可实施性与工程参考价值。 适合人群:具备一定Java和Vue开发基础,熟悉Spring Boot、RESTful API、分布式系统或机器学习相关技术,从事推荐系统、隐私计算或全栈开发方向的研发人员。 使用场景及目标:①学习联邦学习在推荐系统中的工程落地方法;②掌握隐私保护机制(如加密传输、差分隐私)与模型聚合技术的集成;③构建高安全、可扩展的分布式推荐系统原型;④实现前后端协同的个性化推荐闭环系统。 阅读建议:建议结合代码示例深入理解联邦学习流程,重点关注本地训练与全局聚合的协同逻辑,同时可基于项目架构进行算法替换与功能扩展,适用于科研验证与工业级系统原型开发。
源码来自:https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值