Android安卓实战项目(9)—漂亮的健身APP主页控件+开机动画+BMI计算(源码在文末)可用于比赛项目或者作业参考中

news2024/12/23 15:38:45

Android安卓实战项目(9)—漂亮的健身控件APP+开机动画+BMI计算(源码在文末🐕🐕🐕)

介绍: BMI(Body Mass Index,身体质量指数)是一种常用的健康指标,用于评估一个人的体重是否合理。在本篇博客中,我们将使用Android Studio开发一个简单的应用程序,用于计算用户的BMI,并根据计算结果显示相应的BMI分类和背景颜色。我们将逐步介绍代码实现和功能,让您了解整个过程。

前提条件: 在开始之前,您需要安装Android Studio,并了解一些基本的Java和Android开发知识。

【bilibili演示】
https://www.bilibili.com/video/BV1BV4y1e7Nj/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed

一.项目运行介绍

源码展示

image-20230807114040687

APP图标

image-20230807120743845

开机动画

image-20230807114337491

主页面

image-20230807120815683

BMI计算界面

image-20230807121131587

BMI历史记录

image-20230807121152131

其他控件不过多展示

二.具体实现

(部分代码解释)

MainActivity.java
package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;

import com.example.myapplication.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    @NonNull
    ActivityMainBinding binding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        getSupportActionBar().hide();

        binding.ExerciseId.setOnClickListener(view -> {

        Intent intent = new Intent(this,AllExercises.class);
        startActivity(intent);

        });

        binding.FoodId.setOnClickListener(view -> {

            Intent intent = new Intent(this,Food_page.class);
            startActivity(intent);

        });

        binding.BmiId.setOnClickListener(view -> {

            Intent intent = new Intent(this,BMI_Page.class);
            startActivity(intent);

        });

        binding.InfoId.setOnClickListener(view -> {

//        Toast.makeText(MainActivity.this , "App That Help You To Gain Muscles", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(this,Info_page.class);
            startActivity(intent);

        });




    }}
  1. 导入语句:
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import com.example.myapplication.databinding.ActivityMainBinding;

代码开始时导入了必要的类和库。它包括来自AndroidX和AppCompatActivity库的组件,Intent类用于启动新的活动,并且还导入了一个数据绑定类(ActivityMainBinding),用于访问布局文件中的UI元素。

  1. MainActivity类:
public class MainActivity extends AppCompatActivity {
    @NonNull
    ActivityMainBinding binding;
    // ...
}

这一行声明了一个名为MainActivity的类,它继承自AppCompatActivity。它还声明了一个类型为ActivityMainBinding的变量binding,用于数据绑定以访问活动布局文件中的UI元素。

  1. onCreate()方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    getSupportActionBar().hide();
    // ...
}

onCreate()方法在活动创建时被调用。以下是它的功能:

  • super.onCreate(savedInstanceState);:它调用父类的onCreate()方法来执行必要的初始化。

  • binding = ActivityMainBinding.inflate(getLayoutInflater());:它使用ActivityMainBinding类(根据布局XML文件生成)来填充布局并创建一个名为binding的绑定对象,以便访问UI元素。

  • setContentView(binding.getRoot());:这将活动的内容视图设置为使用数据绑定填充的布局的根视图。

  • getSupportActionBar().hide();:这将隐藏活动的默认动作栏(顶部工具栏)。

  1. 按钮点击监听器:
binding.ExerciseId.setOnClickListener(view -> {
    Intent intent = new Intent(this, AllExercises.class);
    startActivity(intent);
});
// ...

代码为不同的按钮(ExerciseIdFoodIdBmiIdInfoId)定义了点击监听器。当这些按钮被点击时,将执行与其关联的操作。

  • 当点击ExerciseId按钮时,它创建一个启动AllExercises活动的Intent,并使用startActivity(intent)启动该活动。

  • 类似地,当点击FoodIdBmiIdInfoId按钮时,分别创建相应的Intent对象来启动Food_pageBMI_PageInfo_page活动。

总的来说,这段代码设置了Android应用程序的主活动,使用数据绑定处理UI元素,并为特定的按钮提供了点击监听器,以便在应用程序内启动不同的活动。


BMI_Page.java
package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Toast;

import com.example.myapplication.databinding.ActivityBmiPageBinding;

import java.util.ArrayList;

public class BMI_Page extends AppCompatActivity {

    @NonNull ActivityBmiPageBinding binding;
    int intialWeight = 50;
    int intialِAge= 20;
    int intialHeight = 170;
    boolean everyThingIsRigyt = true;
    String currentHeaight = "170";
    String currentWeight = "50";
    String typeOfUser = "0";
    String currentAge= "20";
    private Button but;

    DBHelper myDB;
    ArrayList<String> BMI, height, weight, age;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityBmiPageBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        getSupportActionBar().hide();
        binding.calculateBmi.setOnClickListener(view -> {
            calculateBmi();
        });
        binding.male.setOnClickListener(view -> {
            binding.male.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.selected_gender));
            binding.female.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.card_back));
            typeOfUser = "Male";

        });
        binding.female.setOnClickListener(view -> {
            binding.female.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.selected_gender));
            binding.male.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.card_back));
            typeOfUser = "Female";

        });
        binding.seekbar.setMax(280);
        binding.seekbar.setProgress(170);
        binding.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                intialHeight = i;
                currentHeaight = String.valueOf(intialHeight);
                binding.currentHeight.setText(currentHeaight);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }

        });
        binding.incrementAge.setOnClickListener(view -> {
            intialِAge = intialِAge+1;
            currentAge= String.valueOf(intialِAge);
            binding.currentAge.setText(currentAge);
        });
        binding.decrementAge.setOnClickListener(view -> {
            intialِAge = intialِAge-1;
            currentAge= String.valueOf(intialِAge);
            binding.currentAge.setText(currentAge);
        });
        binding.incrementWeight.setOnClickListener(view -> {
            intialWeight = intialWeight+1;
            currentWeight= String.valueOf(intialWeight);
            binding.currentWeight.setText(currentWeight);
        });
        binding.decrementWeight.setOnClickListener(view -> {
            intialWeight = intialWeight-1;
            currentWeight= String.valueOf(intialWeight);
            binding.currentWeight.setText(currentWeight);
        });

        myDB = new DBHelper(this);
        BMI = new ArrayList<>();
        height = new ArrayList<>();
        weight = new ArrayList<>();
        age = new ArrayList<>();



        displayData();
        but=(Button) findViewById(R.id.viewhistory);
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                open_history();
            }
        });

    }
    public void open_history(){
        Intent intent =new Intent(this,BMI_History.class);
        startActivity(intent);
    }

    private void calculateBmi() {
        if(typeOfUser.equals("0")){
            Toast.makeText(this, "Please Enter Reasonable Data", Toast.LENGTH_SHORT).show();
            everyThingIsRigyt = false;
        }
        if (intialHeight <= 0 || currentHeaight.equals("0")){
            Toast.makeText(this, "Please Enter Reasonable Data", Toast.LENGTH_SHORT).show();
            everyThingIsRigyt = false;
        }
        if  (intialWeight<=0|| currentWeight.equals("0")){
            Toast.makeText(this, "Please Enter Reasonable Data", Toast.LENGTH_SHORT).show();
            everyThingIsRigyt = false;
        }
        if (currentAge.equals("0")||intialِAge<=0){
            Toast.makeText(this, "Please Enter Reasonable Data", Toast.LENGTH_SHORT).show();
            everyThingIsRigyt = false;
        }
        if (everyThingIsRigyt){
            Intent intent = new Intent(this,BMI_Result.class);
            intent.putExtra("gender", typeOfUser);
            intent.putExtra("height",currentHeaight );
            intent.putExtra("weight", currentWeight);
            intent.putExtra("age", currentAge);

            startActivity(intent);

        }
        else {
            everyThingIsRigyt = true;
        }

    }

    void displayData(){
        Cursor cursor = myDB.readAllData(); //store there result from our readAllData in our cursor obj
        if (cursor.getCount() == 0){ //there is no data
            Toast.makeText(this, "No Data. ", Toast.LENGTH_SHORT).show();
        }
        else {
            while (cursor.moveToNext()){ //read all data from our cursor
                BMI.add(cursor.getString(4)); //0 means the 1st column
                height.add(cursor.getString(2)); //1 means the 2nd column
                weight.add(cursor.getString(1)); //2 means the 3rd column
                age.add(cursor.getString(3)); //3 means the 4th column
            }
        }
    }

}

代码中的主要类是BMI_Page,表示一个身体质量指数(BMI)页面的活动。我们来一步一步详细解释代码:

  1. 导入语句:
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Toast;

import com.example.myapplication.databinding.ActivityBmiPageBinding;

import java.util.ArrayList;

代码开始时,导入了必要的类和库,包括用于创建和管理活动(AppCompatActivity),支持向下兼容性(ContextCompat),用于处理滑动条(SeekBar),用于显示提示消息(Toast)的类,以及一些其他辅助类。

  1. BMI_Page类:
public class BMI_Page extends AppCompatActivity {
    @NonNull
    ActivityBmiPageBinding binding;
    int intialWeight = 50;
    int intialِAge= 20;
    int intialHeight = 170;
    boolean everyThingIsRigyt = true;
    String currentHeaight = "170";
    String currentWeight = "50";
    String typeOfUser = "0";
    String currentAge= "20";
    private Button but;

    DBHelper myDB;
    ArrayList<String> BMI, height, weight, age;
    // ...
}

该代码声明了一个名为BMI_Page的类,它扩展自AppCompatActivity,表示一个身体质量指数(BMI)页面的活动。它还声明了一些变量,包括身高、体重、年龄等初始值和用户选择的性别类型。此外,还有一些辅助变量和数据库相关的变量和数据结构(DBHelperArrayList)。

  1. onCreate()方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityBmiPageBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    getSupportActionBar().hide();
    // ...
}

onCreate()方法是活动在创建时自动调用的方法。在这里进行了一些初始化设置:

  • super.onCreate(savedInstanceState);:这将调用父类的onCreate()方法,执行必要的初始化。

  • binding = ActivityBmiPageBinding.inflate(getLayoutInflater());:通过使用ActivityBmiPageBinding类(基于布局XML文件自动生成)来填充布局并创建一个名为binding的绑定对象,以便在活动中访问UI元素。

  • setContentView(binding.getRoot());:设置活动的内容视图为通过数据绑定填充的布局的根视图。

  • getSupportActionBar().hide();:隐藏活动的默认动作栏(顶部工具栏)。

  1. 点击监听器:
    该代码包含一些点击事件的监听器,处理用户在页面上的交互。
  • binding.calculateBmi.setOnClickListener(view -> {...});:计算BMI的按钮点击监听器。在点击该按钮时,将调用calculateBmi()方法。

  • binding.male.setOnClickListener(view -> {...});:性别选择按钮(男性)的点击监听器。在点击该按钮时,将更改选定的性别为男性。

  • binding.female.setOnClickListener(view -> {...});:性别选择按钮(女性)的点击监听器。在点击该按钮时,将更改选定的性别为女性。

  • binding.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {...});:滑动条的监听器。当用户拖动滑动条时,将更新用户选择的身高值。

  • binding.incrementAge.setOnClickListener(view -> {...});:增加年龄的按钮点击监听器。在点击该按钮时,将增加年龄的值。

  • binding.decrementAge.setOnClickListener(view -> {...});:减少年龄的按钮点击监听器。在点击该按钮时,将减少年龄的值。

  • binding.incrementWeight.setOnClickListener(view -> {...});:增加体重的按钮点击监听器。在点击该按钮时,将增加体重的值。

  • binding.decrementWeight.setOnClickListener(view -> {...});:减少体重的按钮点击监听器。在点击该按钮时,将减少体重的值。

  1. calculateBmi()方法:
    该方法用于计算BMI,并根据输入数据判断是否合理。如果输入数据合理,将启动一个新的BMI_Result活动,并将计算得到的BMI值和其他数据传递给该活动。

  2. open_history()方法:
    该方法用于打开历史记录页面BMI_History,在点击名为viewhistory的按钮时调用。

  3. displayData()方法:
    该方法用于从数据库中读取历史记录数据并将其存储在相应的ArrayList(BMI、身高、体重和年龄)中。这些数据用于历史记录的展示和处理。

总的来说,这段代码实现了一个BMI页面的活动,允许用户输入身高、体重、年龄和性别,并根据输入计算BMI值。用户还可以查看历史记录,并点击按钮查看历史记录页面。

BMI_Result.java
package com.example.myapplication;

import static java.lang.Math.pow;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.RelativeLayout;


import com.example.myapplication.databinding.ActivityBmiResultBinding;

public class BMI_Result extends AppCompatActivity {
    ActivityBmiResultBinding binding;

    String currentBMI ="26";
    double intialBMI =26;
    String height;
    String weight;
    String age , gender;
    double intialHeight, intialWeight;
    RelativeLayout mBackground;
    Intent intent ;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DBHelper db = new DBHelper(this);
        binding = ActivityBmiResultBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        mBackground = findViewById(R.id.content_layout) ;
        intent = getIntent();
        height = intent.getStringExtra("height");
        weight = intent.getStringExtra("weight");
        age = intent.getStringExtra("age");
        gender = intent.getStringExtra("gender");

        intialWeight = Float.parseFloat(weight);
        intialHeight = Float.parseFloat(height);
        //intHeight=intHeight/100;
        intialBMI = intialWeight /pow(intialHeight /100 , 2);
        currentBMI =  Double.toString(intialBMI);

        db.insert(gender, height, weight, age,  currentBMI.substring(0,4));



        getSupportActionBar().hide();


        if (intialBMI < 18.5){
            binding.bmiCategory.setText("underweight");
            mBackground.setBackgroundColor(Color.parseColor("#DA8181"));
            binding.imageView.setImageResource(R.drawable.ic_baseline_highlight_off_24);
        }
        else   if (intialBMI <39.9&& intialBMI >30){
            binding.bmiCategory.setText("Moderate Thiness");
            mBackground.setBackgroundColor(Color.parseColor("#C1B35B"));

        }
        else   if (intialBMI <24.9 && intialBMI >18.5){
            binding.bmiCategory.setText("Healthy");
//            mBackground.setBackgroundColor(Color.YELLOW);
            binding.imageView.setImageResource(R.drawable.ic_baseline_check_circle_outline_24);
        }
        else   if (intialBMI <29.9&& intialBMI >25){
            binding.bmiCategory.setText("Over Weight");
            mBackground.setBackgroundColor(Color.parseColor("#C1B35B"));

        }

        else  {
            binding.bmiCategory.setText("obese");
            mBackground.setBackgroundColor(Color.parseColor("#C1B35B"));
            binding.imageView.setImageResource(R.drawable.ic_baseline_highlight_off_24);
        }

        binding.genderDisplay.setText(gender);

        binding.bmiDisplay.setText(currentBMI.substring(0,5));

        binding.reCalculateBmi.setOnClickListener(view -> {
            startActivity(new Intent(this, BMI_Page.class));
        });


    }
}

这段代码是一个用于计算BMI(Body Mass Index,身体质量指数)并显示结果的Android应用程序。下面逐行解释代码:

package com.example.myapplication;

这一行声明了Java文件所属的包名。

import static java.lang.Math.pow;

导入了Java的Math类中的pow方法,用于计算指数。

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.RelativeLayout;
import com.example.myapplication.databinding.ActivityBmiResultBinding;

导入所需的Android类和库。

public class BMI_Result extends AppCompatActivity {

定义了一个名为BMI_Result的类,并继承自AppCompatActivity,表示这是一个Android活动。

ActivityBmiResultBinding binding;

创建一个ActivityBmiResultBinding对象,用于与布局文件activity_bmi_result.xml中的视图进行绑定。

String currentBMI = "26";
double intialBMI = 26;
String height;
String weight;
String age, gender;
double intialHeight, intialWeight;
RelativeLayout mBackground;
Intent intent;

声明一些变量,用于存储用户的身高、体重、年龄、性别和计算后的BMI值等信息。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DBHelper db = new DBHelper(this);
    binding = ActivityBmiResultBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    mBackground = findViewById(R.id.content_layout);
    intent = getIntent();
    height = intent.getStringExtra("height");
    weight = intent.getStringExtra("weight");
    age = intent.getStringExtra("age");
    gender = intent.getStringExtra("gender");

重写了活动的onCreate方法,在活动启动时执行以下操作:

  • 创建了一个DBHelper对象db,用于与数据库进行交互。
  • 通过ActivityBmiResultBinding将布局文件activity_bmi_result.xml中的视图与代码中的变量进行绑定。
  • 设置布局文件activity_bmi_result.xml作为活动的显示内容。
  • 获取从上一个活动传递过来的用户身高、体重、年龄和性别的信息。
intialWeight = Float.parseFloat(weight);
intialHeight = Float.parseFloat(height);
intialBMI = intialWeight / pow(intialHeight / 100, 2);
currentBMI = Double.toString(intialBMI);

将传递过来的身高和体重信息转换为数值型,并根据BMI的计算公式计算出BMI值,然后将其转换为字符串格式,存储在currentBMI变量中。

db.insert(gender, height, weight, age, currentBMI.substring(0, 4));

将用户的性别、身高、体重、年龄和四舍五入后的BMI值插入到数据库中。

getSupportActionBar().hide();

隐藏活动的标题栏。

接下来是一系列条件判断,根据计算得到的BMI值,设置相应的显示文本和背景颜色,以及显示对应的图片。

binding.genderDisplay.setText(gender);
binding.bmiDisplay.setText(currentBMI.substring(0, 5));

将性别和四舍五入后的BMI值显示在界面上。

binding.reCalculateBmi.setOnClickListener(view -> {
    startActivity(new Intent(this, BMI_Page.class));
});

当用户点击"reCalculateBmi"按钮时,跳转到BMI_Page活动,允许用户重新计算BMI。

这就是这段代码的功能和实现逻辑。它主要是通过获取用户输入的身高和体重信息,计算BMI值,然后根据计算结果显示对应的BMI分类和相应的背景颜色。同时,还允许用户重新计算BMI。

三.项目源码

链接:https://pan.baidu.com/s/1jv31F7Y86bOcEpMBuSq-zg?pwd=jynl
提取码:jynl

有软件开发请私信作者

(wei)15135757306

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

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

相关文章

Spring Cloud Alibaba (一)

1 微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。 从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->S…

LeetCode 29题:两数相除

题目 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#xff0c;-2.…

一生一芯1——windows与Ubuntu双系统安装

UltraISO下载 下载链接&#xff1a;https://pan.baidu.com/s/18ukDs6yL64qU6thYyZEo-Q?pwdo8he 提取码&#xff1a;o8he 一路傻瓜安装&#xff0c;安装后点击继续试用 Ubuntu系统下载 这里我使用的是官网的22.04版本&#xff0c;由于大于4G&#xff0c;无法上传至百度网盘…

【CSS】CSS 选择器

CSS 选择器 1.基础选择器 1.1 元素选择器 语法&#xff1a;标签名{...} 元素选择器会选中对应标签名的HTML元素&#xff0c;例如&#xff1a;p{...}&#xff0c;div{...}&#xff0c;span{...}等 1.2 类选择器 语法&#xff1a;.类名{...} 类选择器会选中class属性为指定…

老胡的周刊(第102期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 ChatGPT-Shortcut[2] ChatGPT 快捷指令&…

MyBatis-Plus是什么以及特性[MyBatis-Plus系列] - 第481篇

​ 悟纤&#xff1a;师傅&#xff0c;宝宝不开心呢。 师傅&#xff1a;怎么不开心&#xff1f; 悟纤&#xff1a;感觉好多重复的代码来着。 师傅&#xff1a;是哪个部分重复的代码来着&#xff1f; 悟纤&#xff1a;就是对于一个model的增删改查部分。 师傅&#xff1a;那这…

周赛357(模拟、脑经急转弯、多源BFS+并查集、反悔贪心)

文章目录 周赛357[2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)模拟双端队列O(n) [2811. 判断是否能拆分数组](https://leetcode.cn/problems/check-if-it-is-possible-to-split-array/)脑经急转弯 [2812. 找出最安全路径](https://leetcode.cn/problems/f…

SpringBoot系列---【三种启动传参方式的区别】

三种启动传参方式的区别 1.三种方式分别是什么? idea中经常看到下面三种启动传参方式 优先级 Program arguments > VM options > Environment variable > 系统默认值 2.参数说明 2.1、VM options VM options其实就是我们在程序中需要的运行时环境变量&#xff0c;它需…

实现Jenkins自动发包配置

参考抖音&#xff1a;Java不良人 其中的视频演示代码 不推荐把jenkins端口一直开放&#xff0c;推荐使用时候放开&#xff08;版本不太新&#xff0c;避免漏洞攻击&#xff09; [rootVM-4-12-centos soft]# docker-compose -v Docker Compose version v2.19.1docker-compose.…

TCP三次握手四次断开

一、了解TCP &#x1f345;TCP &#xff1a;传输控制协议&#xff0c;是一种面向连接的可靠的传输协议。 什么是可靠的传输协议&#xff1f;如何保障可靠传输&#xff1f; 保证可靠性&#xff1a; 1.确认机制 2.重传输机制什么是面向连接&#xff1f;如何保障面…

C语言 | 位运算符>>的高级用法

一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、优化除法运算 除法运算需要比位移运算需要更多的计算资源&#xff0c;某些情况下采用位移运算可以提高性能 代码示例 #in…

代码随想录算法训练营第51天|动态规划part09|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第51天&#xff5c;动态规划part09&#xff5c;198.打家劫舍、213.打家劫舍II、337.打家劫舍III 198.打家劫舍 198.打家劫舍 思路&#xff1a; 仔细一想&#xff0c;当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到&a…

VectorDBBench向量数据库性能评测工具

目录 一、背景和意义 二、特点和优势 三、应用场景和实际效果 四、总结 摘要: VectorDBBench.com是一个基于云计算的向量数据库基准测试平台,旨在评估不同向量数据库的性能和可扩展性。本文介绍了VectorDBBench的背景和意义,分析了VectorDBBench的特点和优势,并从多个方…

C# Atrribute和反射的简单例子

Attribute 需要以Attribute 结尾, 并继承Attribute namespace AttributeTest {public class HeroAttribute : Attribute{} }namespace AttributeTest {public class SkillAttribute : Attribute{} }namespace AttributeTest {[Hero]public class Blademaster{[Skill]public vo…

【PCB专题】Allegro中如何自动查找并删除不使用的规则

在Allegro软件使用中,我们经常是从上一个版本修改而来的。那么就会遇到有些多余规则没有使用的情况,怎么能够知道哪些规则没有使用并删除呢? 如下所示在Electrical中的All Constraints下存在SDIO规则和WIFI_SDIO规则。这两个规则是重复的,只是名称不同而已。 在规则的使…

前端工具类

日期类 1️⃣ 新建index.js文件/*** param {date} time 需要转换的时间* param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss*/ export function formatTime(time, fmt) {if (!time) {return "";}else {const date new Date(time);const o {M:…

[深度学习入门]PyTorch深度学习[数组变形、批量处理、通用函数、广播机制]

目录 一、前言二、数组变形2.1 更改数组的形状2.1.1 reshape2.1.2 resize2.1.3 T(转置)2.1.4 ravel2.1.5 flatten2.1.6 squeeze2.1.7 transpose 2.2 合并数组2.2.1 append2.1.2 concatenate2.1.3 stack 三、批量处理四、通用函数4.1 math 与 numpy 函数的性能比较4.2 循环与向量…

无涯教程-Perl - endhostent函数

描述 此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。 语法 以下是此函数的简单语法- endhostent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile( ($name, $aliases, $addrtype, $length, addrs)gethostent() ) …

Android 网络协议与网络编程

一、TCP/IP协议 Transmission Control Protocol/Internet Protocol的简写&#xff0c;中译名为传输控制协议/因特网互联 协议&#xff0c;是Internet最基本的协议、Internet国际互联网络的基础&#xff0c;由网络层的IP协议和传输层的TCP 协议组成。协议采用了4层的层级结构。…

ad+硬件每日学习十个知识点(24)23.8.4(时序约束,SignalTap Ⅱ)

文章目录 1.建立时间和保持时间2.为什么要建立时序约束&#xff1f;3.SignalTap Ⅱ4.SignalTap Ⅱ使用方法5.HDL的仿真软件&#xff08;modelsim&#xff09;6.阻抗匹配 1.建立时间和保持时间 答&#xff1a; 2.为什么要建立时序约束&#xff1f; 答&#xff1a; 3.Sign…