Scratch3.0编译

1、准备工作

/* 对版本要求较高,需升级 */
npm install -g npm /* npm升级到最新版本 */
npm install -g n /* nodejs升级 */
n stable /* 升级到最新的稳定版本 */

mkdir scratch /*便于管理,新建一个文件夹存放*/
cd scratch
git clone https://github.com/llk/scratch-gui /*scratch-gui下载*/
git clone https://github.com/llk/scratch-vm /*scratch-vm下载*/
git clone https://github.com/llk/scratch-blocks /*scratch-blocks下载*/

也可以直接从https://github.com/LLK这个地址内下载对应的文件.

2、配置scratch相关模块信息

cd scratch-vm
npm install
npm link
npm run watch

cd ../scratch-blocks
npm install
npm link

cd ../scratch-gui
npm install
npm link scratch-vm scratch-blocks
npm install
npm start

3、输入网址:http://localhost:8601/

4、异常问题:由于node版本升级的比较高,scratch-blocks的时候报了个异常.
处理方法: https://blog.csdn.net/Nikoye/article/details/128372310
环境变量配置好了之后需要更新一下,另外重启终端.

airplay问题

1、搜索不到设备:检查bonjour是否安装,bonjour服务是否开启,网络是否在同一网络下(有的路由器2.4G可以5G不行,需要看路由器配置参数)

参考链接:https://baijiahao.baidu.com/s?id=1662604391329132561&wfr=spider&for=pc

最大连续乘积子串

/**
* 常规穷举法
*/
fun maxContinueProduce_fun1(intAttrs: MutableList): Double {
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxValue = intAttrs[0] var minIndex = 0 var maxIndex = 0 for (i in 0..intAttrs.size-1) { var value = intAttrs[i] for (j in i+1..intAttrs.size-1) { value = value * intAttrs[j] if (value>maxValue) {
maxValue = value
minIndex = i
maxIndex = j
}
}
}
println(“value:”+maxValue+”,min:”+minIndex+”,max:”+maxIndex)
return maxValue
}
/**
* 乘积可以为0,负数和正数
* 负数乘负数得正,也可能产生最大乘积
*/
fun maxContinueProduce_fun2(intAttrs: MutableList): Double{
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxProduce = 1.0 var minProduct = 1.0 var maxCurrent = maxProduce var minCurrent = minProduct var index = 0 var minindex = 0 // 找到最大乘积 已经最大index for (i in 0..intAttrs.size-1) { maxCurrent = intAttrs[i]*maxCurrent minCurrent = intAttrs[i]*minCurrent if (maxCurrent>maxProduce) {
maxProduce = maxCurrent
index = i
}
if (minCurrent>maxProduce) {
maxProduce = minCurrent
index = i
}
if (maxCurrent<minProduct) {
minProduct = maxCurrent
}
if (minCurrent<minProduct) { minProduct = minCurrent } if (minCurrent>maxCurrent) {
var temp = minCurrent
minCurrent = maxCurrent
maxCurrent = temp
}
if (maxCurrent<1) {
maxCurrent = 1.0
}
}

// 通过最大index和最大乘积计算最小index
var temp = 1.0
for (i in index downTo 0) {
temp *= intAttrs[i]
if (temp==maxProduce) {
minindex=i
break
}
}
println(“value:”+maxProduce+”,min:”+minindex+”,max:”+index)
return maxProduce
} Continue reading “最大连续乘积子串”

Kotlin与Java混编,ButterKnife编译异常

1、nullpoint
针对此问题,只需将annotationProcessor com.jakewharton:butterknife-compiler:x.x.x
改为apt com.jakewharton:butterknife-compiler:x.x.x即可

kotlin项目:

plugins {
id ‘com.android.application’
id ‘kotlin-android’
id ‘kotlin-kapt’
}

2、https://blog.csdn.net/lky199024/article/details/75309776

3、如果配置都正常有可能是转AndroidX之后,使用了AppcompatActivity,但是manifest文件的style不是Appcompat

Android UDP广播地址

1、如果手机开热点,广播地址“192.168.43.255”
或者通过连接热点设备的IP来判断广播地址。
2、如果连接Wi-Fi
@Throws(UnknownHostException::class)
fun getBroadcastAddress(context: Context): InetAddress? {
val wifi = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val dhcp = wifi.dhcpInfo ?: return InetAddress.getByName(“255.255.255.255”)
val broadcast = dhcp.ipAddress and dhcp.netmask or dhcp.netmask.inv()
val quads = ByteArray(4)
for (k in 0..3) quads[k] = (broadcast shr k * 8 and 0xFF).toByte()
return InetAddress.getByAddress(quads)
}

Android Webview访问不安全链接

WebViewClient实现下面方法
@Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
// super.onReceivedSslError(webView, sslErrorHandler, sslError);
if( sslErrorHandler!=null) {
sslErrorHandler.proceed();
}
}

\\s+

split(“\\s+”) 按空格,制表符,等进行拆分
(也就是说它是按空白部分进行拆分,不管这个空白使用设么操作留下
的,提如空格键 tab键)
split(” +”) 按空格进行拆分(也就是说只有按空格键流出来的空白才会是拆分的一句)