安卓期末大作业——仿番茄免费小说APP

news2024/11/24 8:30:32

《移动应用开发实践》实践报告

APP名称: 番茄免费小说

要求:

格式:宋体,小四号字;首行缩进;行距:1.5倍。

  1. 每人独立完成Android App的设计与开发
  2. App必须包含SOLite数据库操作

一、所调查的App简介。(限200字以内)

番茄小说是抖音 旗下的免费网文阅读APP,致力于为读者提供畅快不花钱的极致阅读体验,于2019年11月正式上线。

番茄小说拥有海量正版小说,涵盖言情、玄幻、悬疑、都市等全部主流网文类型,以及大量热剧原著和经典出版物,支持用户看书听书。

  1. 你要参照的App的界面截图及界面对应的流程图和功能图,并给出具体的文字说明。

 

功能图

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

参照的App的界面截图

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

三、技术剖析(调查的App界面可以运用哪些课程所学内容实现,请对照一一说明)

3.1 首页

首页从上往下整体可以用垂直的线性布局实现,顶部的搜索框可以用RelativeLayout相对布局实现,接下来的4×4的排行榜可以HorizontalScrollView和RecyclerView瀑布流实现。

底部导航栏可以用成熟的BottomNavigationView技术方案实现,底部导航图片可以采用ventor矢量图标。

3.2 榜单

可以用左右组合RecyclerView列表实现,根据左侧分类动态显示右侧的书籍。

3.3 书架

可以采用3列布局的列表实现,单击事件可以查看书籍详情,长按事件可以删除书籍

3.4 我的

可以采用ConstraintLayout布局实现。退出登录可以通过button按钮单击事件实现

四、App实现

1.界面完成的截图

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

2.界面布局代码

  1. 首页
    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:app=”http://schemas.android.com/apk/res-auto”
    xmlns:tools=”http://schemas.android.com/tools”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    tools:context=”.ui.home.HomeFragment”
    android:orientation=”vertical”>
    <RelativeLayout
    android:id=”@+id/re1″
    android:layout_width=”match_parent”
    android:layout_height=”70dp”
    android:background=”#E6E8EA”>
    <RelativeLayout
    android:layout_width=”match_parent”
    android:layout_height=”42dp”
    android:layout_centerInParent=”true”
    android:layout_marginLeft=”50dp”
    android:background=”@drawable/back3″>
    <ImageView
    android:layout_width=”35dp”
    android:layout_height=”35dp”
    android:layout_centerVertical=”true”
    android:layout_marginLeft=”5dp”
    android:background=”@drawable/ic_baseline_search_24″ />
    <EditText
    android:id=”@+id/edinput”
    android:layout_width=”match_parent”
    android:layout_height=”50dp”
    android:layout_marginLeft=”43dp”
    android:layout_marginRight=”55dp”
    android:background=”#FCFDFD”
    android:hint=”请输入搜索内容” />
    <TextView
    android:id=”@+id/tv_refresh1″
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:layout_alignParentRight=”true”
    android:layout_centerVertical=”true”
    android:layout_marginRight=”10dp”
    android:text=”搜索”
    android:textColor=”#A60F43″
    android:textSize=”17dp” />
    </RelativeLayout>
    </RelativeLayout>
    <RelativeLayout
    android:layout_width=”match_parent”
    android:layout_height=”wrap_content”>
    <TextView
    android:id=”@+id/tv_rank”
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”排行榜”
    android:textSize=”32dp”
    android:textStyle=”bold”
    />
    <TextView
    android:id=”@+id/all_rank”
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”完整榜单>”
    android:textSize=”24dp”
    android:layout_alignParentRight=”true”
    />
    </RelativeLayout>
    <HorizontalScrollView
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”>
    <androidx.recyclerview.widget.RecyclerView
    android:id=”@+id/homeRecyclerView”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:background=”@color/colorContent”
    android:overScrollMode=”never”
    app:layout_constraintBottom_toBottomOf=”parent”
    app:layout_constraintEnd_toEndOf=”parent”
    app:layout_constraintHorizontal_bias=”0.0″
    app:layout_constraintStart_toStartOf=”parent”
    app:layout_constraintTop_toTopOf=”parent” />
    </HorizontalScrollView>
    </LinearLayout>
  2. 榜单

<?xml version=”1.0″ encoding=”utf-8″?>

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”

xmlns:tools=”http://schemas.android.com/tools”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”horizontal”

android:weightSum=”10″

tools:context=”.ui.snack.SnackFragment”>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”2″

android:orientation=”vertical”>

<androidx.recyclerview.widget.RecyclerView

android:id=”@+id/snackLeftRecyclerView”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:background=”#4DEEEEEE”

android:overScrollMode=”never” />

</LinearLayout>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”8″

android:orientation=”vertical”

android:overScrollMode=”never”>

<androidx.recyclerview.widget.RecyclerView

android:id=”@+id/snackRightRecyclerView”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:background=”@color/colorBgWhite”

android:overScrollMode=”never” />

</LinearLayout>

</LinearLayout>

  1. 书架
    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:tools=”http://schemas.android.com/tools”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:orientation=”vertical”
    tools:context=”.ui.place.PlaceFragment”>
    <androidx.recyclerview.widget.RecyclerView
    android:id=”@+id/placeRecyclerView”
    android:layout_width=”match_parent”
    android:layout_height=”0dp”
    android:layout_weight=”1″
    android:background=”@color/colorContent”
    android:overScrollMode=”never” />
    </LinearLayout>
  2. 我的

<?xml version=”1.0″ encoding=”utf-8″?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android”

xmlns:app=”http://schemas.android.com/apk/res-auto”

xmlns:tools=”http://schemas.android.com/tools”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:background=”@color/colorContent”

tools:context=”.ui.my.MyFragment”>

<ScrollView

android:layout_width=”0dp”

android:layout_height=”0dp”

android:overScrollMode=”never”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toTopOf=”parent”>

<androidx.constraintlayout.widget.ConstraintLayout

android:layout_width=”match_parent”

android:layout_height=”wrap_content”>

<androidx.constraintlayout.widget.ConstraintLayout

android:id=”@+id/constraintLayout”

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:background=”@drawable/detail_info”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toTopOf=”parent”

tools:ignore=”MissingConstraints”>

<de.hdodenhof.circleimageview.CircleImageView

android:id=”@+id/myUserHead”

android:layout_width=”80dp”

android:layout_height=”80dp”

android:layout_marginStart=”16dp”

android:layout_marginTop=”24dp”

android:layout_marginBottom=”24dp”

android:src=”@mipmap/hejubian”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toTopOf=”parent” />

<TextView

android:id=”@+id/myUserNickName”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:layout_marginStart=”17dp”

android:layout_marginTop=”24dp”

android:text=”未登录”

android:textSize=”22sp”

app:layout_constraintStart_toEndOf=”@+id/myUserHead”

app:layout_constraintTop_toTopOf=”parent” />

<TextView

android:id=”@+id/myUserName”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:layout_marginStart=”17dp”

android:layout_marginTop=”8dp”

android:text=””

android:textSize=”18sp”

app:layout_constraintStart_toEndOf=”@+id/myUserHead”

app:layout_constraintTop_toBottomOf=”@+id/myUserNickName” />

</androidx.constraintlayout.widget.ConstraintLayout>

<LinearLayout

android:id=”@+id/linearLayout”

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:layout_marginTop=”16dp”

android:background=”@drawable/radius_content”

android:orientation=”horizontal”

android:padding=”10sp”

android:weightSum=”4″

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toBottomOf=”@+id/constraintLayout”>

<LinearLayout

android:id=”@+id/myOrderView”

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”1″

android:orientation=”vertical”>

<ImageView

android:layout_width=”match_parent”

android:layout_height=”55dp”

android:padding=”8dp”

android:src=”@drawable/ic_baseline_assignment_24dp” />

<TextView

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:gravity=”center_horizontal”

android:text=”我的订单” />

</LinearLayout>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”1″

android:orientation=”vertical”>

<ImageView

android:layout_width=”match_parent”

android:layout_height=”55dp”

android:padding=”8dp”

android:src=”@drawable/ic_sharp_monetization_on_24dp” />

<TextView

android:id=”@+id/textView4″

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:gravity=”center_horizontal”

android:text=”待付款” />

</LinearLayout>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”1″

android:orientation=”vertical”>

<ImageView

android:layout_width=”match_parent”

android:layout_height=”55dp”

android:padding=”8dp”

android:src=”@drawable/ic_baseline_question_answer_24dp” />

<TextView

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:gravity=”center_horizontal”

android:text=”待评价” />

</LinearLayout>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”match_parent”

android:layout_weight=”1″

android:orientation=”vertical”>

<ImageView

android:layout_width=”match_parent”

android:layout_height=”55dp”

android:padding=”8dp”

android:src=”@drawable/ic_baseline_report_24dp” />

<TextView

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:gravity=”center_horizontal”

android:text=”退款” />

</LinearLayout>

</LinearLayout>

<LinearLayout

android:id=”@+id/linearLayout2″

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:layout_marginStart=”1dp”

android:layout_marginTop=”16dp”

android:background=”@drawable/radius_content”

android:orientation=”vertical”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toBottomOf=”@+id/linearLayout”>

<TextView

android:layout_width=”match_parent”

android:layout_height=”45dp”

android:gravity=”center_vertical”

android:paddingStart=”16dp”

android:text=”支付设置”

android:textSize=”18sp”

tools:ignore=”RtlSymmetry” />

<View

android:layout_width=”match_parent”

android:layout_height=”1dp”

android:background=”#EEEEEE” />

<TextView

android:id=”@+id/myModifyText”

android:layout_width=”match_parent”

android:layout_height=”45dp”

android:gravity=”center_vertical”

android:paddingStart=”16dp”

android:text=”修改地址”

android:textSize=”18sp”

tools:ignore=”RtlSymmetry” />

<LinearLayout

android:id=”@+id/myModifyView”

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:background=”#1A409EFF”

android:orientation=”vertical”

android:visibility=”gone”>

<EditText

android:id=”@+id/editTextTextPersonName2″

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:layout_marginLeft=”32sp”

android:layout_marginTop=”22sp”

android:layout_marginRight=”32sp”

android:layout_marginBottom=”12sp”

android:ems=”10″

android:hint=”请输入新的手机号码”

android:inputType=”textPersonName” />

<EditText

android:id=”@+id/editTextTextPersonName3″

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:layout_marginLeft=”32sp”

android:layout_marginTop=”12sp”

android:layout_marginRight=”32sp”

android:layout_marginBottom=”12sp”

android:ems=”10″

android:hint=”请输入新的收货地址”

android:inputType=”textPersonName” />

<Button

android:id=”@+id/myModifyBtn”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:layout_gravity=”end”

android:layout_marginEnd=”32sp”

android:layout_marginBottom=”12sp”

android:text=”确定” />

</LinearLayout>

<View

android:layout_width=”match_parent”

android:layout_height=”1dp”

android:background=”#EEEEEE” />

</LinearLayout>

<LinearLayout

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:layout_marginTop=”16dp”

android:layout_marginBottom=”16dp”

android:background=”@drawable/radius_content”

android:orientation=”vertical”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toBottomOf=”@+id/linearLayout2″>

<TextView

android:id=”@+id/logoutBtn”

android:layout_width=”match_parent”

android:layout_height=”45dp”

android:gravity=”center”

android:paddingStart=”16dp”

android:text=”退出账号”

android:textSize=”16sp”

tools:ignore=”RtlSymmetry” />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

3.App功能实现关键代码

(1)首页

private void initHomeAdapter() {

// 实例化电子书列表适配器对象

HomeAdapter adapter = new HomeAdapter(DataServer.getHomeList());

// 设置动画效果

adapter.setAnimationEnable(true);

// adapter.setAnimationFirstOnly(false);

// adapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom);

adapter.setAdapterAnimation(new MyAnimation3());

// 设置头部

adapter.setHeaderView(getHeadView(), 1);

// 设置尾部

adapter.setFooterView(getFooterView(), 1);

// 点击事件监听器

adapter.setOnItemClickListener((adapter1, view, position) -> {

Snack snack = (Snack) adapter1.getItem(position);

DetailActivity.actionStart(getContext(), snack);

});

// 设置适配器

homeRecyclerView.setAdapter(adapter);

}

  1. 榜单

/**

* 初始化左边适配器

*/

@SuppressLint(“ResourceAsColor”)

private void initLeftAdapter() {

// 实例化左边适配器对象

SnackLeftAdapter leftAdapter = new SnackLeftAdapter(DataServer.getSnackOrderList());

// 设置动画效果

leftAdapter.setAnimationEnable(true);

leftAdapter.setAnimationFirstOnly(false);

leftAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInLeft);

// 触发点击按钮

leftAdapter.setOnItemClickListener((adapter, view, position) -> {

if (position != leftSelectPosition) {

String item = (String) adapter.getItem(position);

// 原本选中的item变成未选中颜色

Objects.requireNonNull(adapter.getViewByPosition(leftSelectPosition, R.id.snackLeftType)).setBackgroundResource(R.color.colorContent);

// 当前item变成选中颜色

Objects.requireNonNull(adapter.getViewByPosition(position, R.id.snackLeftType)).setBackgroundResource(R.color.colorBgWhite);

leftSelectPosition = position;

// 刷新右边列表

// rightAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom);

rightAdapter.setAnimationEnable(false);

switch (position) {

case 1:

rightAdapter.setNewInstance(DataServer.getGuangxiList());

break;

case 2:

rightAdapter.setNewInstance(DataServer.getGuangzhouList());

break;

case 3:

// rightAdapter.setNewInstance(DataServer.getBeijingList());

break;

case 4:

// rightAdapter.setNewInstance(DataServer.getChongqingList());

break;

default:

rightAdapter.setNewInstance(DataServer.getFujianList());

break;

}

}

});

// 设置左边列表适配器

leftRecyclerview.setAdapter(leftAdapter);

}

/**

* 初始化右边适配器

*/

public void initRightAdapter() {

// 实例化右边适配器对象

rightAdapter = new SnackRightAdapter(DataServer.getFujianList());

// 设置动画效果

rightAdapter.setAnimationEnable(true);

// rightAdapter.setAnimationFirstOnly(false);

rightAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInRight);

// 设置尾部

rightAdapter.addFooterView(getFooterView());

// 点击item事件

rightAdapter.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {

Snack snack = (Snack) adapter.getItem(position);

DetailActivity.actionStart(getContext(), snack);

}

});

// 左边列表加入书架点击事件

rightAdapter.addChildClickViewIds(R.id.snackRightAddBtn);

rightAdapter.setOnItemChildClickListener((adapter, view, position) -> {

Snack snack = (Snack) adapter.getItem(position);

if (view.getId() == R.id.snackRightAddBtn) {

if (!MyApplication.getCartSnacks().contains(snack)) {

// 添加到书架

snack.setCount(1);

MyApplication.getCartSnacks().add(snack);

Tips.show(“已添加” + snack.getName() + “到书架”);

} else {

Tips.show(“已在书架中,不能重复添加”);

}

}

});

// 设置右边列表适配器

rightRecyclerView.setAdapter(rightAdapter);

}

  1. SQLite数据库表设计(格式如下,一个数据表对应一个表格)
字段含义类型
name书籍名称string
price书籍热度double
Image书籍图片Int
detail书籍详情string
列名数据类型长度允许空说明
usernamevarchar20N用户名
passwordvarchar30Y密码
addressvarchar100N收货地址
idint10N编号
headimageint100Y头像

5.调查的App界面中你觉得哪些设计不合理,你是如何改进的(选做)

首页列表在不同设备显示的比例不同,可能导致美观度不够,可以进一步根据不同设备进行适配

  1. 测试用例
  2. 搜索

输入:“黑科技1”

搜索结果:

安卓期末大作业——仿番茄免费小说APP安卓期末大作业——仿番茄免费小说APP

(2)加入书架

输入:点击加入书架

结果文字:提示成功加入书架

  1. 总结(不少于500字,本次调查目的、过程、开发经历等)

1)通过半个学期的学习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。

2)通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如:要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。

3)对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。

android是一种很错的手机系统,使用起来简单,而且可以根据自己的需求选择适合自己的版本,非常的方便。我要多多学习关于android的知识,在未来,将android系统研发的更加人性化,使用起来更加的舒适。

 

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

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

相关文章

Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

典型回答 讲清楚Android中的消息机制&#xff0c;先表述一下和Handler相关的一些类&#xff1a; Message&#xff1a;消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息&#xff1b; MessageQueue&#xff1a;消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMe…

疫情下为什么年轻、未婚女性更容易拿到offer

最近发现一个奇怪的现象&#xff0c;为什么会奇怪。大家别着急&#xff0c;容我慢慢道来。由于疫情开始后&#xff0c;也是大家开始躺平后&#xff0c;企业在有意、无意的疯狂裁员&#xff0c;导致人心惶惶&#xff0c;大家都不敢轻易跳槽了。甚至有的人很庆幸&#xff0c;有份…

一文弄懂JUnit5相关注解

JUnit5 JUnit是Java生态系统中最流行的单元测试框架之一。JUnit5版本包含许多令人兴奋的创新&#xff0c;其目标是支持Java8和更高版本中的新功能&#xff0c;并支持多种不同风格的测试。 Maven依赖 启动JUnit5.x.0非常简单&#xff1b;我们只需要将以下依赖项添加到pom.xml…

昆石网络 VOS3000虚拟运营支撑系统任意文件读取漏洞

漏洞描述&#xff1a; 昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测&#xff0c;可导致任意文件读取漏洞。 漏洞利用条件: 对⽤户查看或下载的⽂件没有限制或者限制绕过&#xff0c;就可以查看或下载任意⽂件 漏洞影响范围&#xff1a; VOS3000 漏…

阿里云Redis性能压力测试(二十)

文章目录1.云Redis性能压力测试2.安装redis-banchmark压测工具3.压测两节点的Redis集群4.压测四节点的Redis集群4.1.扩容集群为四节点4.2.压力测试5.压测结果对比1.云Redis性能压力测试 我们当前Redis集群是2个节点2个分片&#xff0c;使用redis-benchmark工具对Redis集群进行…

轨迹预测——day 57 基于车道交叉和考虑驾驶方式的终点生成模型的前目标车辆轨迹预测

Trajectory Prediction of Preceding Target Vehicles Based on Lane Crossing and Final Points Generation Model Considering Driving Styles导读II.问题表述与系统架构A. Trajectory Prediction for PTVs&#xff08;preceding target vehicles&#xff09;B. Position and…

python自学程序练习01:99乘法表

#完成99乘法表 #1*11 #1*22 2*24 #1*33 2*36 3*39 #很明显要两个循环print(打印99乘法表&#xff1a;) for i in range(1,10):for j in range(1, i1):print(f{j}*{i}{j * i}, end )结果如上图所示&#xff0c;很明显发现&#xff0c;是我们想要的数据但是他的形式需要有所修改。…

Vue3创建项目(四)main.js配置,避坑指南

系列文章目录 第一篇 Vue3创建项目&#xff08;一&#xff09;新手教程 第二篇 Vue3创建项目&#xff08;二&#xff09;router路由配置和使用 第三篇 Vue3创建项目&#xff08;三&#xff09;Vuex配置 目录 系列文章目录 main.js配置&#xff0c;直接看图&#xff0c;如下…

作为前端你还不懂MutationObserver?那Out了

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

Netty(一)- Netty与BIO、NIO、AIO介绍

文章目录一、Netty的介绍二、Netty的应用场景1. 互联网行业2. 游戏行业3. 大数据领域三、I/O模型1. Java BIO&#xff08;1&#xff09;Java BIO 基本介绍&#xff08;2&#xff09;Java BIO 工作机制&#xff08;3&#xff09;Java BIO 应用实例&#xff08;4&#xff09;Java…

css如何快速将网站设置为灰色背景

突然想起写这篇文章是因为&#xff0c;公司的产品大早上打电话说&#xff1a;“赶紧&#xff0c;业务刚通知&#xff0c;我们的官网、小程序、公众号的首页需要变为灰色背景&#xff0c;最好在10点半之前上线”。当时心有千般不愿&#xff0c;但最后生活压倒我坚硬的脊梁。哈哈…

关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

C语言用高斯消元法求行列式

目录 数学原理 程序设计 整体流程与代码 测试函数 测试结果 数学原理 高斯消元法求行列式&#xff1a;利用初等行变换&#xff0c;化为上三角行列式&#xff0c;求其主对角线的乘积 行列式的初等行变换&#xff1a; 1&#xff09;换行变换&#xff1a;交换两行&#xf…

静态路由配置案例

静态路由配置案例配置静态路由原理命令&#xff1a;案例&#xff1a;最后结果&#xff1a;配置静态路由原理命令&#xff1a; [Huawei]ip route-static 来源ip 子网掩码 去向ip [Huawei]ip route-static 192.168.20.1 255.255.255.0 192.168.1.2 案例&#xff1a; pc1,pc2,a…

世界杯里的数学知识

一、前言 2022 年卡塔尔世界杯足球赛已经开幕&#xff0c;这是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足球赛。除此之外&#xff0c;卡塔尔世界杯还是首次在北半球冬季举行、首次由从未进过世界杯决赛圈的国家举办的世界杯足球赛。世界杯足球赛里…

凌玮科技IPO注册生效:曾踩雷理财损失2000万元,胡颖妮为董事长

11月30日&#xff0c;广州凌玮科技股份有限公司&#xff08;下称“凌玮科技”&#xff09;在深圳证券交易所创业板递交招股书&#xff08;注册稿&#xff09;。相较于此前招股书&#xff0c;凌玮科技补充披露了截至2022年9月30日的财务数据等信息&#xff0c;并对2022年度的业绩…

SimCSE:对比学习,只需要Dropout

要说2021年上半年NLP最火的论文&#xff0c;想必非《SimCSE: Simple Contrastive Learning of Sentence Embeddings》莫属。SimCSE的全称是Simple Contrastive Sentence Embedding Sentence Embedding Sentence Embedding一直是NLP领域的一个热门问题&#xff0c;主要是因为其…

独家 | AI是如何帮助创造看起来和听起来都和我们一样的仿真数码人的

作者&#xff1a;Anthony Green翻译&#xff1a;顾伟嵩 校对&#xff1a;赵茹萱本文约6000字&#xff0c;建议阅读14分钟 由AI驱动的仿真数码人正在从事娱乐、执法等工作。图来源于ERICA SNYDER/MITTR | UNSPLASH仿真数码双胞胎捕获了真实人类的外表和表情。这些复制品越来越多…

科技云报道:从百度智能云的探索,看懂边缘云的过去和未来

科技云报道原创。 布莱恩阿瑟在《技术的本质》一书中写道&#xff0c;“技术是一个异常美丽的主题&#xff0c;它不动声色地创造了财富&#xff0c;成就了经济的繁荣&#xff0c;改变了人类的生存方式。” 五年前&#xff0c;人们还不会在地铁公交上看视频&#xff0c;因为视频…

obsidian和zotero联动

前言 看了好多obsidian和zotero联动的视频和教程&#xff0c;终于还是下手了。 obsidian和zotero之所有能够完美联动&#xff0c;很大程度上建立在这两个软件都有这活跃的第三方插件市场&#xff0c;只要肯花功夫挖掘&#xff0c;我相信是能玩出花来的。 网上的多数联动是基…