1.JavaScript之reduce()的游戏源码游戏源码用法
2.java 写的计算器源代码只实现加减乘除四则运算即可
JavaScript之reduce()的用法
首先,参考了这位大佬的精品总结,敲了一遍,游戏源码游戏源码收获很大。精品记录下来。游戏源码游戏源码参考链接背景:之前是精品jsp 商城源码接触vue源码的时候,发现使用reduce的游戏源码游戏源码地方很多。当时也是精品在看别人分享,简单带过,游戏源码游戏源码发现很好用。精品简单研究后,游戏源码游戏源码很少用到。精品导致理解不深。游戏源码游戏源码TVM源码解读今天碰到到使用场景,精品特意花时间研究了一番,游戏源码游戏源码可以说理解的很到位了。
语法arr.reduce(function(prev,cur,index,arr){ ...},init);其中,\arr表示原数组;\prev表示上一次调用回调时的返回值,或者初始值init;\cur表示当前正在处理的完整源码分享数组元素;\index表示当前正在处理的数组元素的索引,若提供init值,则索引为0,否则索引为1;\init表示初始值。这个初始值在很多技巧上要用到,要重点留意
在实际使用当中,其实常用的xp源码 bt参数只有两个:prev和cur。结合例子来分析一番。
实例以下举的例子除了用reduce来实现,还有很多其他的方法。不过使用reduce有它独有的技巧性和方便。
1、求数组的jvm源码反射和方式一:
letarr=[3,4,5,6,9,2,4,6];letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;})console.log(sum);方式二:
letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;},0)console.log(sum);注意:方式二,由于传入了初始值0,所以pre的初始值就是0,cur的值,就是数组的第一个值为3;如果不传初始值的话,就如方式一,这时,pre的值是3,cur的值是4;相加后为7,作为下一轮的pre的值,cur是5,依次类推下去。
2、求数组的最大值方式一:
letarr=[1,4,5,6,9,2,4,6];letmax=arr.reduce((pre,cur)=>{ returnMath.max(pre,cur)})console.log(max);方式二:
letmax2=arr.reduce((pre,cur)=>{ returnpre>cur?pre:cur;})console.log('max2:',max2);3、给数组去重letnewArr=arr.reduce((pre,cur)=>{ pre.indexOf(cur)===-1&&pre.push(cur)returnpre},[])console.log(newArr);进阶用法1.求字符串中字幕出现的次数conststr='sfhjasfjgfasjuwqrqadqeiqsajsdaiwqdaklldflas-cmxzmnha';constres=str.split('').reduce((pre,cur)=>{ pre[cur]?pre[cur]++:pre[cur]=1;returnpre},{ })console.log('汇总次数:',res);2.数组转数组letarr1=[2,3,4,5,6,7];letnewArr1=arr1.reduce((pre,cur)=>{ pre.push(cur*cur)returnpre;},[])console.log('数组转数组:',newArr1);3.数组转对象letstreams=[{ name:'博士',id:1},{ name:'硕士',id:2},{ name:'本科',id:3}];letobj1=streams.reduce((pre,cur)=>{ pre[cur.id]=cur;returnpre;},{ })console.log('数组转对象:',obj1);高级用法1.多维的叠加执行操作例子:各科成绩占比不一样,求结果
constresult=[{ subject:'math',score:},{ subject:'chinese',score:},{ subject:'english',score:},];constdis={ math:0.5,chinese:0.2,english:0.4};letres2=result.reduce((pre,cur)=>{ returndis[cur.subject]*cur.score+pre},0)console.log('多维叠加:',res2);加大难度:商品对应不同国家汇率不同,求价格
letarr=[3,4,5,6,9,2,4,6];letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;})console.log(sum);、扁平一个二维数组letarr=[3,4,5,6,9,2,4,6];letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;})console.log(sum);1多维数组扁平化
3、对象数组去重letarr=[3,4,5,6,9,2,4,6];letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;})console.log(sum);、compose函数reduxcompose源码实现
letarr=[3,4,5,6,9,2,4,6];letsum=arr.reduce((pre,cur,index,arr)=>{ //console.log('index:',index);//console.log('arr:',arr);returnpre+cur;})console.log(sum);3java 写的计算器源代码只实现加减乘除四则运算即可
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
public class calculator
{
String str1="0"; //运算数1 初值一定为0 为了程序的安全
String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果
//状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2
int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算
int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0
int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉
JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(,);
JFrame frame=new JFrame("sunshine---计算器");
JTextField jg_TextField=new JTextField(jg,);//列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0");
JButton button1=new JButton("1");
JButton button2=new JButton("2");
JButton button3=new JButton("3");
JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6");
JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9");
JButton button_Dian=new JButton(".");
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-");
JButton button_cheng=new JButton("*");
JButton button_chu=new JButton("/");
JButton button_dy=new JButton("=");
public static void main(String[] args)
{
calculator calculator=new calculator();
}
calculator()
{
jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐
JPanel pan=new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距
JPanel pan2=new JPanel();
pan2.add(jg_TextField);
JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小
pan3.setLayout(new FlowLayout());
pan3.add(clear_Button);
//clear_Button.setSize(,);//设置清零按钮的大小 吗的 不好使 !!
frame.setLocation(, ); //主窗口 出现在位置
frame.setResizable(false); //不能调大小
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.getContentPane().add(pan3,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
//以上是 控件 和 布局
//下面是事件处理 程 序
//--------------- 数 字 键 ----------------
class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//还原开关k5状态
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
}
//--------符 号-----------
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数
}
else
{
int a=vt.size();
JButton c=(JButton)vt.get(a-2); if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/")))
{
yuns();
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
k4=1;
fh=ss2;
} k2=k2+1;
}
}
}
//--------清除-------
class JianTing_clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextField.setText(jg);
vt.clear();
}
}
//----------------等 于 ---------------------
class JianTing_dy implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
yuns();
k1=1; //还原开关k1状态
//str1=jg;
k2=1;
k3=1;//还原开关k3状态
k4=1; //还原开关k4状态
str1=jg; //为7+5= +5= 这种计算做准备
}
}
//----------------小数点 ---------------------
class JianTing_xiaos implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1)
{
String ss2=((JButton)e.getSource()).getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //还原开关k5状态
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
k5=k5+1;
}
}
//注册 监听器
JianTing_dy jt_dy=new JianTing_dy();
JianTing jt= new JianTing();//临听数字键
JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键
JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键
button7.addActionListener(jt);
button8.addActionListener(jt);
button9.addActionListener(jt);
button_chu.addActionListener(jt_fh);
button4.addActionListener(jt);
button5.addActionListener(jt);
button6.addActionListener(jt);
button_cheng.addActionListener(jt_fh);
button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt);
button_jian.addActionListener(jt_fh);
button0.addActionListener(jt);
button_Dian.addActionListener(jt_xs);
button_dy.addActionListener(jt_dy);
button_jia.addActionListener(jt_fh);
clear_Button.addActionListener(jt_c);
//关闭事件处理程序
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//---------------计 算------------------
public void yuns()
{
double a2,b2;//运算数1,2
String c=fh;// 运算符
double jg2=0 ;//结果
if (c.equals(""))
{
//System.out.println("请输入运算符");
jg_TextField.setText("请输入运算符");
}
else
{
System.out.println("str1:"+str1);//调试时 使 用
System.out.println("str2:"+str2);//调试时 使 用
System.out.println("运算符:"+fh);//调试时 使 用
if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转
str1="0.0";
if (str2.equals("."))
str2="0.0";
a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue();
System.out.println("double型的a2:"+a2); //调试时 使 用
System.out.println("double型的b2:"+b2); //调试时 使 用
if (c.equals("+"))
{
jg2=a2+b2;
}
if (c.equals("-"))
{
jg2=a2-b2;
}
if (c.equals("*"))
{
jg2=a2*b2;
}
if (c.equals("/"))
{
if(b2==0)
{
jg2=0;// by 0 cu!
}
else
{
jg2=a2/b2;
}
}
System.out.println("double型a2"+fh+"b2结果:"+jg2);
System.out.println();
jg=((new Double(jg2)).toString());
jg_TextField.setText(jg);
}
}
}