Java语言怎么实现一个函数返回2个返回值

Java语言怎么实现一个函数返回2个返回值,两个返回值在不同时候返回可以实现么?类似println那样多次调用的,return为什么不行,后面的不执行?

2个回答

如果想让一个方法返回的时候带着多项信息,可直接返回一个对象,也可以传入一个对象作为参数,在该方法体中修改改对象的相应的属性,方法返回空。
如果想 像 println 那样多次调用,可以收集 return 的返回值,然后多次使用就可以了。

return直接就退出函数体了,后面的当然不会执行,你要是想同时返回两个值,可以把这两个值(不同类型的话)封装到类、容器等里面,然后返回类或者容器就可以,不同时候返回我不太明白你的意思,如果是指不同时的话应该是没有办法

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java语言,如何实现一个函数里返回2个值,请给出具体代码,答非所问的不采纳
Java语言,如何实现一个函数里返回2个值,请给出具体代码,答非所问的不采纳
Java语言,3个数字输出max和min,用一个函数怎么做?两个返回值就不会了
Java语言,3个数字输出max和min,用一个函数怎么做?两个返回值就不会了 Java语言,3个数字输出max和min,用一个函数怎么做?两个返回值就不会了
中途退出有返回值的函数
怎么中途退出有返回值的函数啊, return的话,出现java.lang.NullPointerException, 用exit(0)的话退出整个程序,不是我所要的
新手关于Java语言语法及环境变量的疑问
最近看了些java语言基础,里面讲到Java单独写一个字面值,会报错,但是写一个有返回值的函数却不接收,则不会报错,但是有返回值的函数最后不是返回一个字面值吗,这和单独写一个字面值有什么区别又为什么不会报错呢? 还有就是关于ClassPATH和ClassLoader的的疑问,我下载JDK后,在配置环境变量的时候,由于失误,只配置了PATH以及JAVA_HOME ,而没有配置ClassPATH环境变量。(cmd里编译,运行,以及桌面使用编译软件时均可正常使用) 按照网上资料的说法,java虚拟机的ClassLoader就应该只会在当前目录下面寻找.class文件。 我尝试了一下,同一个文件夹下的.class文件的确可以相互调用,同一根目录,不同文件夹下的确不行,但是,JDK里的库函数也没有在我后来写代码的目录下呀,甚至连根目录都不相同(一个在C盘,一个在F盘),然而还是可以调用,请问这是什么原理呢?求大佬解答
c语言和java的混编问题
能不能用c做核心算法,java做界面和控制,并且把java方法的返回值传递给c中的函数来调用。如果能实现,大致思路是什么。
对函数式编程的不理解 (Haskell)
1. 函数式编程没有副作用? 网上说,是因为只有返回值,而中间不会抛出任何东西,或者是函数式编程不受任何外界的影响。 这一点我完全没有办法理解, 程序结构写完之后都是固定的,当我输入什么,就输出什么,既然结构固定了,怎么还会有影响呢? 2. 函数式编程在固定的输入下就有固定的输出? 难道不是所有的程序语言在固定的输入下只有固定的输出吗? 3. 说函数式变成语言是透明的,这一点我也完全没有办法理解,什么叫引用透明。 请大佬用比较简单的Java或者Haskell语言解释一下上述三个问题,跪谢!
java(JNA/JNative/JNI等)怎样调用 DLL 中 返回 指针 的函数 得到指针值?
<p><strong>JAVA</strong>(JNA/JNative/JNI等)怎样调用<strong><span style="color: blue;">DLL</span></strong>中 <span style="color: #ff0000;">返回指针</span>的函数(指针函数),得到<strong>其值</strong>(其指针对应的值)<strong>?</strong></p> <p>以下给出其它语言的调用示例:</p> <p> </p> <p>//////////////////////////////////////////////////////////////////////////////////////////</p> <p> </p> <p><strong>vb中的调用方式:</strong><br /><br />Private Declare Function functionA Lib "mydll.dll" (ByVal a As Long, ByVal  b As Long, ByVal c As String, d As Long) As Long<br /><br />jieguo = "    "<br />no1 = functionA(0,0,strA,0) '返回识别结果字符的指针<br />no2 = lstrcpy(jieguo, no1) 'VB中用lstrcpy就可以从指针得到字符了,当然你也可以选择其他的方式</p> <p> </p> <p>我要的就是<strong> <em>jiegou</em></strong><br /><br />///////////////////////////////////////////////////////////////////////////////////////////</p> <p><br /><strong>vc中的调用:</strong><br /><br />char* WINAPI functionA(...)<br />    Def_API(tag_functionA, functionA, "mydll.dll")<br /><br />char* ret = functionA(...);<br /><br />我要的就是 <strong>ret</strong>字符串</p> <p> </p> <p>///////////////////////////////////////////////////////////////////////////////////////////</p> <p> </p> <p><span style="color: #ff0000;">那JAVA中怎样来调用呢</span>,DLL我是没办法更改的!试过用JNative、JNA调用,都没有调用<strong>指针函数</strong>的示例.自己用<strong>C</strong>写一个DLL<strong>间接</strong>调用估计可以,但C写DLL不会...</p>
如何把c语言转化成java语言?
#include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> #include<iostream> using namespace cv; using namespace std; //宏定义 #define WINDOW_NAME "image[procedure window]" //全局变量声明 Mat g_srcImage,g_maskImage; Point prevPt(-1,-1); //全局函数声明 static void on_Mouse(int event,int x,int y,int flags,void*); //主函数 int main() { //载入源图像 g_srcImage=imread("/Users/new/Desktop/1.jpg"); if(!g_srcImage.data){printf("读取源图像srcImage错误~!\n");return false;} //显示源图像 imshow(WINDOW_NAME,g_srcImage); Mat srcImage,grayImage; g_srcImage.copyTo(srcImage); //灰度化 cvtColor(srcImage, g_maskImage, COLOR_BGR2GRAY); //imshow("image[mask]",g_maskImage); cvtColor(g_maskImage, grayImage, COLOR_GRAY2BGR); //imshow("image[gray]",grayImage); //掩膜图像初始化为0 g_maskImage=Scalar::all(0); //设置鼠标回调函数 setMouseCallback(WINDOW_NAME, on_Mouse,0); //轮询按键处理 while(1) { //获取键值 int c=waitKey(0); //若按键为ESC时,退出 if((char)c == 27) break; //若按键为2时,恢复原图 if((char)c=='2') { g_maskImage=Scalar::all(0); srcImage.copyTo(g_srcImage); imshow("image",g_srcImage); } //若按键为1,则进行处理 if((char)c=='1') { //定义一些参数 int i,j,compCount=0; vector<vector<Point>>contours; vector<Vec4i> hierarchy; //寻找轮廓 findContours(g_maskImage, contours, hierarchy, CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE); //轮廓为空时的处理 if(contours.empty()) continue; //复制掩膜 Mat maskImage(g_maskImage.size(),CV_32S); maskImage=Scalar::all(0); //循环绘制轮廓 for(int index=0;index>=0;index=hierarchy[index][0],++compCount) drawContours(maskImage, contours, index, Scalar::all(compCount+1),-1,8,hierarchy,INT_MAX); //compCount为零时的处理 if(compCount==0) continue; //生成随机颜色 vector<Vec3b>colorTab; for(int i=0;i<compCount;++i) { int b=theRNG().uniform(0, 255); int g=theRNG().uniform(0, 255); int r=theRNG().uniform(0, 255); colorTab.push_back(Vec3b((uchar)b,(uchar)g,(uchar)r)); } //计算处理时间并输出到窗口中 double dTime=(double)getTickCount(); //进行分水岭算法 watershed(srcImage, maskImage); dTime=(double)getTickCount()-dTime; printf("\t 处理时间=%gms\n",dTime*1000./getTickFrequency()); //双层循环,将分水岭图像遍历存入watershedImage中 Mat watershedImage(maskImage.size(),CV_8UC3); for(i=0;i<maskImage.rows;++i) for(j=0;j<maskImage.cols;++j) { int index=maskImage.at<int>(i,j); if(index==-1) watershedImage.at<Vec3b>(i,j)=Vec3b(255,255,255);//图像变白色 else if(index<=0||index>compCount) watershedImage.at<Vec3b>(i,j)=Vec3b(0,0,0);//图像变黑色 else watershedImage.at<Vec3b>(i,j)=colorTab[index-1]; } //混合灰度图和分水岭效果图并显示最终的窗口 watershedImage=watershedImage*0.5+grayImage*0.5; imshow("image[watershed]",watershedImage); } } return 0; } //回调函数定义 void on_Mouse(int event,int x,int y,int flags,void*) { //处理鼠标不在窗口中的情况 if(x<0||x>=g_srcImage.cols||y<0||y>=g_srcImage.rows) return; //处理鼠标左键相关消息 if(event==EVENT_LBUTTONUP||!(flags & EVENT_FLAG_LBUTTON))//按下左键 prevPt=Point(-1,-1); else if(event==EVENT_LBUTTONDOWN)//松开左键 prevPt=Point(x,y);//鼠标所指的位置 //鼠标左键按下并移动,绘制出白色线条 else if(event==EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)) { Point pt(x,y); if(prevPt.x<0)//如果指出去了,返回 prevPt=pt; line(g_maskImage, prevPt, pt, Scalar::all(255),2,8,0);//画白线 line(g_srcImage,prevPt,pt,Scalar::all(255),2,8,0);//画白线 prevPt=pt; imshow(WINDOW_NAME, g_srcImage); } }
java list传值问题
函数说明: 生成一个 url 语法: link(serviceName{,jspArgNames,jspArgValues{,reportArgNames,reportArgValues}}) 参数说明: serviceName 服务名称 jspArgNames jsp 参数名称数组,可为空,元素类型需为字符串型 jspArgValues jsp 参数值数组,需与 jspArgNames 元素个数相同 reportArgNames 报表参数名称数组,可为空,元素类型需为字符串型 reportArgValues 报表参数值数组,需与 reportArgNames 元素个数相同 示例: 例1:link("ServiceName",list("jspArg1","jspArg2"), list("value1",2),"count",5) 返回 ServiceName?jasArg1=value1&jspArg2=2&params=count=5 这个具体要怎么实现呢? 有点不明白.
这个怎么解????~~~~~
1.我们的程序运行过程中每分钟会采集一个整数的数据指标。 持续采集n分钟就得到一个有n个元素的整数数组a[n]。 现在我们需要一个简单的算法,检测采集到的数据指标中,是否有异常。 异常的检测标准是:如果在连续m分钟内的指标的平均值大于w,则说明有异常。 输入:数组a[n], 正整数m, 整数w 返回:有异常返回 1,没有异常返回 0 例如:对于a={1, 5, 1, 3, 2}, m=2, w=2, 返回:1 附加说明:不同的实现方式执行效率不一样,如果能找到一个很高效的算法就更好了。 2、我们的程序运行过程中用到了一个数组a,数组元素是一个Map/Dictionary。 数组元素的“键”和“值”都是字符串类型。在不同的语言中,对应的类型是: PHP的array, Java的HashMap, C++的std::map, Objective-C的NSDictionary, Swift的Dictionary, Python的dict, JavaScript的object, 等等 示例: a[0]["key1"]="value1" a[0]["key2"]="value2" a[1]["keyA"]="valueA" ... 为了方便保存和加载,我们使用了一个基于文本的存储结构,数组元素每行一个: text="key1=value1;key2=value2\nkeyA=valueA\n..." 要求:请实现一个“保存”函数、一个“加载”函数。 text=store(a); a=load(text); 这两个函数分别用于把数组保存到一个文本字符串中、把文本字符串中的内容读取为数组。 必须自己手写代码实现保存/加载逻辑,严格按照上述的“每行一个、key=value”的格式保存。 附加说明:基于上述格式,如果value中有特殊字符,比如有换行符/分号等怎么办?
jvm 带来的困惑 --! 希望高人知道 在此谢谢
jvm.h 文件声明的函数 在 jvm.cpp 都是这样实现的 [code="java"] JVM_ENTRY(返回值, 方法名(参数)) 。 。(函数体) 。 JVM_END [/code] 那这个JVM_ENTRY 是做了什么,好像就是一个标记 。。整个过程有点像加载类(这里是函数),貌似是 jvm 启动的时候 就加载进去,但是这个过程是什么样的流程,大家都知道 , 在.h的头文件中申明 ,在cpp 文件中都是 用头文件的声明为函数头加以实现,但是这里是用这样一个特殊的结构,难道这个文件不是由c++ 编译 ,一个专用的编译器,那它又是谁呢 --! 困惑 上网查 都是提下函数体调用一个c++类就走了 望高人 指点下
easyui 回调函数与行值比对
这个函数绑定到行上了,我用ajax取到before_mpa_in和after_mpa_out这两个值范围,可是if的时候怎么也进不去满足条件的,好比行的val是12,取回来berfore是11,after是22,这个满足了应该直接进去返回val就可以了,但是却进入了else。。。我也转换成整形对比也不行 [code="java"] function getMPA_IN(val,row,rowIndex){ if(val!=null && val!=""){ var before_mpa_in=null; var after_mpa_out=null; $.get("${pageContext.request.contextPath }/hotpowerstation/getByUnitOperationLog.do",function(data){ before_mpa_in = data[0].before_mpa_in; after_mpa_out = data[0].after_mpa_in; }); if(parseInt(val,10) >= parseInt(before_mpa_in,10) && parseInt(val,10) <= (after_mpa_in,10)){ //alert(val); return val; }else{ row.status = 1; //alert('nn'); return "<span style='color:red'>" + val + "</span>"; } } } [/code]
【字节码】如何理解构造函数中return指令?
<p>经反编译后的构造函数,其字节码最后一条指令return如何理解?<br>构造函数没有数值返回类型,也非void返回类型,为何会有一条return指令存在?<br>这条指令在虚拟机中做了些什么工作?</p> <p> </p> <pre name="code" class="字节码">public Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."&lt;init&gt;":()V 4: return LineNumberTable: line 10: 0 </pre> <p> </p><br/><strong>问题补充</strong><br/><div class="quote_title">devworks 写道</div><div class="quote_div">构造方法返回void</div> <br />返回void为啥不显式地写在方法定义处.<img src="/images/smiles/icon_cool.gif"/> <br/><strong>问题补充</strong><br/><div class="quote_title">kerrysk 写道</div><div class="quote_div">return就是返回函数调用,没什么特殊含义。 <br />这个是构造函数,在你在java内写new时,后面除了一条new指令外,还有个 <br />invokespecial调用这个类的构造函数。 <br />return指的是,pop构造函数frame,回到new指令所在的frame。</div> <br /> <br />哦. <br />"pop构造函数frame,回到new指令所在的frame。" <br />确实是return指令的作用,没有特殊含义. <br /> <br />但为什么不显式写在定义处,虚拟机规范要特别采用隐式方式?<br/><strong>问题补充</strong><br/><div class="quote_title">mercyblitz 写道</div><div class="quote_div"><div class="quote_title">yeshaoting 写道</div><div class="quote_div"><div class="quote_title">devworks 写道</div><div class="quote_div">构造方法返回void</div> <br />返回void为啥不显式地写在方法定义处.<img src="/images/smiles/icon_cool.gif"/> </div> <br /> <br /> <br />构造器又不是方法,并且不需要return语句。</div> <br /> <br />不需要return语句,为什么要加return指令...<img src="/images/smiles/icon_cry.gif"/> <br /><br/><strong>问题补充</strong><br/>public Test()<br /> {<br /> System.out.println("public Test();");<br /> }<br /><br /> public void Test()<br /> {<br /> System.out.println("public void Test();");<br /> }<br /><br />void能区分开构造函数与一般方法<br/><strong>问题补充</strong><br/><div class="quote_title">kerrysk 写道</div><div class="quote_div">return就是返回函数调用,没什么特殊含义。 <br />这个是构造函数,在你在java内写new时,后面除了一条new指令外,还有个 <br />invokespecial调用这个类的构造函数。 <br />return指的是,pop构造函数frame,回到new指令所在的frame。</div> <br /> <br />刚又理解了一下,解释得好.<img src="/images/smiles/icon_idea.gif"/> <br />加void与没加void,可能就是为着区分构造函数与一般方法吧.<br/><strong>问题补充</strong><br/><div class="quote_title">mercyblitz 写道</div><div class="quote_div"><div class="quote_title">yeshaoting 写道</div><div class="quote_div"><div class="quote_title">mercyblitz 写道</div><div class="quote_div"><div class="quote_title">yeshaoting 写道</div><div class="quote_div"><div class="quote_title">devworks 写道</div><div class="quote_div">构造方法返回void</div> <br />返回void为啥不显式地写在方法定义处.<img src="/images/smiles/icon_cool.gif"/> </div> <br /> <br /> <br />构造器又不是方法,并且不需要return语句。</div> <br /> <br />不需要return语句,为什么要加return指令...<img src="/images/smiles/icon_cry.gif"/> <br /></div> <br /> <br />必要性和存在性不同,在实现构造器的时候,可以重用方法的部分语法检查!</div> <br /> <br />嗯.对.<br/><strong>问题补充</strong><br/><div class="quote_title">kerrysk 写道</div><div class="quote_div"><div class="quote_title">yeshaoting 写道</div><div class="quote_div"> <br />加void与没加void,可能就是为着区分构造函数与一般方法吧.</div> <br />构造函数与一般方法在虚拟机内不是靠这个区分的。 <br />构造函数与一般方法在虚拟机内的方法签名是不一样的,构造函数一般为&lt;init&gt; <br />一般方法为方法名。 <br />虚拟机根据方法签名,在数据区加载相应的类,构造method结构体,里面有虚拟机指令, <br />解释器负责解释执行。每个方法调用,都在栈上push一个frame,在方法返回时pop,return是 <br />用来告诉解释器,方法解释完毕,在栈上pop frame。 <br /> <br />如果有返回值: <br />&nbsp; sun虚拟机会返回到值栈的栈顶,供调用frame用。 <br />&nbsp; 在dalvik下,是有类似return v0这样的指令,把v0放到全局ret变量,再在调用方法中用move_result指令放到调用栈的 <br />寄存器中。 <br />&nbsp; 也可以在设计invoke指令时,就将返回寄存器直接赋值到调用栈的寄存器中。 <br /></div> <br />谢谢你的耐心讲解,最近在看虚拟机规范很多东西还没理解透彻.
JAVA通讯录 TXT文档分页问题
我在做一个JAVA通讯录,想请问一下如何把这个TXT文档 超过20行分页显示,请前辈们多多指教,谢谢 方便的话请帮我写一下代码看看行吗 package MyAddBook; import java.awt.Choice;//选择 import java.awt.Container;//容器 import java.awt.Frame; import java.awt.GridLayout;//间距 import java.awt.Toolkit;//居中 import java.awt.event.ActionEvent;//事件 import java.awt.event.ActionListener;//监听 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;//文本输出流打印对象的格式化 import java.text.Collator;//区分语言 import java.util.Arrays; import java.util.Comparator;//排序 import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane;//消息提示框 import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyAddBook { public static JFrame frame; public MyAddBook() { frame=new JFrame("通讯录");//面板标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭按钮关闭窗口 frame.setVisible(true);//窗口可见 /* * 在一个窗口中,我们经常需要给窗口添加菜单条。在 Java * 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem, 分别对应菜单条、菜单和菜单项。 * 同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器. * * 一、菜单条(JMenuBar) * JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar * 方法: JMenuBar TestJMenuBar=new JMenuBar(); * TestFrame.setJMenuBar(TestJMenuBar); 需要说明的是,JMenuBar 类根据 JMenu * 添加的顺序从左到右显示,并建立整数索引。 * * 二、菜单(JMenu) 在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 * JMenu 类的构造方法有4种: JMenu() 构造一个空菜单。 JMenu(Action a) * 构造一个菜单,菜单属性由相应的动作来提供。 JMenu(String s) 用给定的标志构造一个菜单。 JMenu(String * s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true, * 那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。 在构造完后,使用 JMenuBar 类的 add * 方法添加到菜单条中。 * * 三、菜单项(JmenuItem) 接下来的工作是往菜单中添加内容。 * 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。 在构造完后,使用 JMenu 类的 * add 方法添加到菜单中。 子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。 */ JMenuBar bar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Type());//监听 JMenu show=new JMenu("按性别显示"); JMenuItem show1=new JMenuItem("男"); JMenuItem show2=new JMenuItem("女"); Container c=frame.getContentPane(); JPanel p=new JPanel(); c.add(p); p.add(bar); bar.add(edit); bar.add(show); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); show.add(show1); show.add(show2); // 获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; // 然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); frame.setSize(500, 300); /* * 1. JFrame是javax.swing.JFrame的类,Frame是Java.awt.Frame的类 * * 2. 关闭窗口的方式不同: * 2.1 JFrame的关闭方式:传递参数使得关闭按钮有效 * Frame的关闭方式:加监听使得关闭按钮有效 */ edit2.addActionListener(new ActionListener() // 监听查询 { public void actionPerformed(ActionEvent e) { new Operation("查询", 2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() // 监听删除 { public void actionPerformed(ActionEvent e) { //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); new Operation("删除", 3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() // 监听修改 { public void actionPerformed(ActionEvent e) { new Operation("修改", 4).dialog.setVisible(true); } }); // 输出类 edit5.addActionListener(new ActionListener() // 监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后", 2);//调用 排序 函数 } }); show1.addActionListener(new ActionListener() // 监听男 { public void actionPerformed(ActionEvent e) { new Print("男", 1);//调用 匹配 显示 } }); show2.addActionListener(new ActionListener() // 监听女 { public void actionPerformed(ActionEvent e) { new Print("女", 1);//调用 匹配 显示 } }); } public static void main(String[] args) { new MyAddBook(); } public String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境,这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } class Operation{ private Frame frame; /* * public JDialog(Dialog owner, String title, boolean modal) * 创建一个具有指定标题、模式和指定所有者 Dialog 的对话框。 此构造方法将该组件的语言环境属性设置为 * JComponent.getDefaultLocale 所返回的值。 * * 参数: owner - 显示该对话框的所有者 Dialog; 如果此对话框没有所有者,则为 null * title -该对话框的标题栏中所显示的 String * modal - 指定对话框在显示时是否阻塞用户向其他顶层窗口输入。如果为true,则模式类型属性被设置为 DEFAULT_MODALITY_TYPE; * 否则对话框是无模式的。 * 抛出: * HeadlessException - 如果 GraphicsEnvironment.isHeadless() 返回 true。 */ JDialog dialog = new JDialog(frame, "查询对话框", true); public Operation(String str, int n) { dialog.setSize(450, 300); //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, dialog.setLocation(width / 2 - 200, height / 2 - 150); Container c = dialog.getContentPane(); /*GridLayout(int rows, int cols, int hgap, int vgap) : 创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。*/ dialog.setLayout(new GridLayout(2, 1, 5, 5)); JLabel LOperation = new JLabel("请输入要" + str + "人员的名字"); final JTextField Tname = new JTextField(10);//单行文本输入框 JButton sure = new JButton("确定"); JButton cancel = new JButton("取消"); JPanel pane1 = new JPanel(); JPanel pane2 = new JPanel(); c.add(pane1); c.add(pane2); pane1.add(LOperation); pane1.add(Tname); pane2.add(sure); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); if (n == 2) { sure.addActionListener(new ActionListener() // 查询 { public void actionPerformed(ActionEvent e) { try { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); /* * 这里while括号里面的find.hasNext()方法用于判断find对象中有没有下一条数据 * 返回 bool 值 , 有则返回true 无 则返回false * 下面的find.next()是获取find对象中的值 然后赋值给 str 然后输出这个方法 * 其实就是循环输出it 对象中所有的值 */ while (find.hasNext()) { if (find.next().equals(Tname.getText())) { dialog.dispose();//关闭窗体,并释放一部分资源。 Type fd = new Type(); fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Csex.select(find.next()); fd.Tunit.setText(find.next()); fd.Thomephone.setText(find.next()); fd.Temail.setText(find.next()); fd.Ttelephone.setText(find.next()); fd.Type(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 3) { sure.addActionListener(new ActionListener() // 删除 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt");//创建文件 Scanner find = new Scanner(file);//输入 FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) {//取下一个元素 String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { find.next(); find.next(); find.next(); find.next(); find.next(); } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null, "删除成功", "删 除 结 果", JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 4) { sure.addActionListener(new ActionListener() // 修改 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt"); Scanner find = new Scanner(file); FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) { String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { dialog.dispose(); Type fd = new Type(); Type.y = 1; fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1 = find.next(); fd.Csex.select(s1); String s2 = find.next(); fd.Tunit.setText(s2); String s5 = find.next(); fd.Thomephone.setText(s5); String s6 = find.next(); fd.Temail.setText(s6); String s7 = find.next(); fd.Ttelephone.setText(s7); fd.Type(); if (Type.z == 1) { write.print(Tname.getText() + "\t"); write.print(s1 + "\t"); write.print(s2 + "\t\t"); write.print(s5 + "\t\t"); write.print(s6 + "\t\t"); write.println(s7); Type.z = 2; } } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() // 取消 { public void actionPerformed(ActionEvent e) { dialog.dispose();//关闭查询面板 } }); } } class Print{ public JTextArea area;// 多行文本输入框 public Print(String st, int n) { JFrame frame = new JFrame(st + "信息如下"); area = new JTextArea();// 多行文本输入框 frame.add(area); frame.setVisible(true); frame.setSize(1000, 500); frame.setLocation(350, 150);// 显示位置坐标 if (n == 2) try // 排序 { int i, j, k; String[] all; all = new String[1000]; BufferedReader read = new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); int z = 1, count = 0; while (z == 1) { for (i = 0; i < 1000; i++) { String str = read.readLine(); if (str != null) { all[i] = str; count++; } else z = 0; } } String[] bll; bll = new String[count]; for (i = 0; i < count; i++) bll[i] = all[i]; getSortOfChinese(bll);// 调用排序函数 for (i = 0; i < count; i++) area.append(bll[i] + '\n');// 在指定元素的结尾追加内容 read.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } if (n == 1) try // 指定类人员 { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); while (find.hasNext()) { String str1 = find.next(); String str2 = find.next(); if (str2.equals(st)) { area.append(str1 + "\t"); area.append(str2 + "\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + '\n'); } else { find.next(); find.next(); find.next(); find.next(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } } private void getSortOfChinese(String[] bll) { // TODO Auto-generated method stub } } class Type implements ActionListener { public static int z = 2; public static int y = 0; public JLabel Lname, Lsex, Lunit, Lhomephone, Lemail, Ltelephone, Lnote;//添加标签 public JTextField Tname = new JTextField(15), Thomephone = new JTextField(25), Temail = new JTextField(25),Ttelephone = new JTextField(25), Tunit = new JTextField(25); public Choice Csex = new Choice();//创建文本框 public JButton sure, cancel;//添加“确定”“取消”按钮 public JFrame frame = new JFrame("录入联系人信息");//面板标题 public Type() { Csex.addItem("男");//给列表框或组合框等具有列表的对象添加项目 Csex.addItem("女"); } public void Type() { Container c = frame.getContentPane();//创建容器 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击窗口的关闭按钮时程序执行的操作 frame.setSize(800, 400);//窗口大小 frame.setLayout(new GridLayout(7, 2, 7, 7));//设置用户界面上的屏幕组件的格式布局 frame.setVisible(true);//设置面板可见 //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); Lname = new JLabel("姓名");//标签 Lsex = new JLabel("性别"); Lunit = new JLabel("单位"); Lhomephone = new JLabel("住宅电话"); Lemail = new JLabel("Email"); Ltelephone = new JLabel("移动电话"); sure = new JButton("确定"); cancel = new JButton("取消"); JPanel pane1 = new JPanel();//添加面板 JPanel pane2 = new JPanel(); JPanel pane3 = new JPanel(); JPanel pane5 = new JPanel(); c.add(pane1);//将面板添加到容器中 c.add(pane2); c.add(pane3); c.add(pane5); pane1.add(Lname);//将标签添加到面板 pane1.add(Tname); pane1.add(Lsex); pane1.add(Csex); pane2.add(Lunit); pane2.add(Tunit); pane2.add(Lhomephone); pane2.add(Thomephone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Ltelephone); pane3.add(Ttelephone); pane5.add(sure); pane5.add(cancel); sure.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { if (Tname.getText().equals(""))//输入的姓名是否为空 /* * 显示一个错误对话框,该对话框显示的 message 为 'alert': * JOptionPane.showMessageDialog(null, "alert", * "alert", JOptionPane.ERROR_MESSAGE); */ JOptionPane.showMessageDialog(null, "录入失败姓名必须填写", "录入结果", JOptionPane.INFORMATION_MESSAGE); else { try { FileWriter AddressBook = new FileWriter("D:\\AddressBook.txt", true);//写入文件 PrintWriter add = new PrintWriter(AddressBook); String s1, s2, s3,s4; if (Tunit.getText().equals(""))//未输入数据 s1 = "无"; else s1 = Tunit.getText(); if (Thomephone.getText().equals("")) s2 = "无"; else s2 = Thomephone.getText(); if (Temail.getText().equals("")) s3 = "无"; else s3 = Temail.getText(); if (Ttelephone.getText().equals("")) s4 = "无"; else s4 = Ttelephone.getText(); add.println(Tname.getText()+ "\t" + Csex.getSelectedItem() + "\t" + s1 + "\t\t" + s2 + "\t\t" + s3 + "\t\t" + s4); add.close(); AddressBook.close(); z = 1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (y == 0) { JOptionPane.showMessageDialog(null, "录入成功", "录入结果", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "修改成功", "修改结果", JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); //删除时传入空白串 Tunit.setText(""); Thomephone.setText(""); Temail.setText(""); Ttelephone.setText(""); } } }); cancel.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { frame.dispose();//关闭面板 z = 0; } }); } public void actionPerformed(ActionEvent e) { new Type().Type(); } }
main.java:3: 错误: 类Point是公共的, 应在名为 Point.java 的文件中声明,这是什么错误
public static class Point { public double x; public double y; //定义一个点方法(函数),其表示为自然语言中的平面坐标点 public Point(double x, double y) { //定义点的横轴坐标值 this.x=x; //定义点的纵轴坐标值 this.y=y; } //根据已知点计算两点间的距离 public double getDistance(Point p) { //定义一个双精度的参数x放两点横轴坐标差值的绝对值 double x=Math.abs(this.x-p.x); //定义一个双精度的参数y放两点纵轴坐标差值的绝对值 double y=Math.abs(this.y-p.y); //根据正弦定理计算出一个双精度的两点坐标距离的值,并将其作为该方法(计算两点间坐标距离)的返回值 return Math.sqrt(x*x+y*y); } //根据已知点计算方位角 public double getAngle(Point p) { //定义一个双精度的参数x放两点横轴坐标差值的绝对值 double x=Math.abs(this.x-p.x); //定义一个双精度的参数y放两点纵轴坐标差值的绝对值 double y=Math.abs(this.y-p.y); //定义一个双精度的参数z放y/x的绝对值 double z=Math.abs(y/x); //计算出两点的坐标方位角,并将其作为该方法(计算已知两点构成的边的坐标方位角)的返回值 return (1/Math.atan(z))/Math.PI*180; } } public interface Check { public static final int Rou=206265; double check(Point P1, Point P2); } //前方交会测量计算 public static class Front_Intersection implements Check { public Point pointA = null; public Point pointB = null; public double angleA = 0; public double angleB = 0; public Point QFJH() { // 定义待定淀P的横轴坐标和纵轴坐标 double x_P = 0; double y_P = 0; int sign = 1; /* * 求出P点的坐标算法,根据余切定理式子的程序化,只需将对应点按逆时针顺序放入即可求出待定点,具体算法如下 */ double sAcB = Math.sin(angleA) * Math.cos(angleB); double cAsB = Math.cos(angleA) * Math.sin(angleB); double sAsB = Math.sin(angleA) * Math.sin(angleB); x_P = (pointA.x * sAcB + pointB.x * cAsB + sign * (pointA.y - pointB.y) * sAsB) / (sAcB + cAsB); y_P = (pointA.y * sAcB + pointB.y * cAsB + sign * (pointB.x - pointA.x) * sAsB) / (sAcB + cAsB); return new Point(x_P, y_P);// 返回P点的坐标值 } /* * 前方交会检核,返回值为求得的两点的横向位移之差的绝对值。 * */ @Override public double check(Point P1, Point P2) { // TODO Auto-generated method stub return P1.getDistance(P2); } } //侧方交会测量计算 public static class Side_Intersection implements Check { public Point pointA = null; public Point pointB = null; public Point pointC = null; public Point pointP = null; public double angleA = 0; public double angleP = 0; public double angleB = 180 - ( angleA + angleP ); public Point CFJH(){ //定义待定淀P的横轴坐标和纵轴坐标 double x_P =0; double y_P =0; int sign = 1; //求出P点的坐标算法 double sAcB = Math.sin(angleA)*Math.cos(angleB); double cAsB = Math.cos(angleA)*Math.sin(angleB); double sAsB = Math.sin(angleA)*Math.sin(angleB); x_P = (pointA.x*sAcB + pointB.x*cAsB + sign*(pointA.y - pointB.y)*sAsB) /(sAcB + cAsB); y_P = (pointA.y*sAcB + pointB.y*cAsB + sign*(pointB.x - pointA.x)*sAsB) /(sAcB + cAsB); return new Point(x_P, y_P);//返回P点的坐标值 } /* * 侧方交会检测方法,返回的是AP的方位角,由于基本的集合知识可以知道AP方位角正弦值的倒数即为观测∠APC的弧度 * */ @Override public double check(Point P1, Point P2) { // TODO Auto-generated method stub return P1.getAngle(P2); } } //主函数 public static class Main { public static void main(String[] args) { // TODO Auto-generated method stub /* * 前方交会测量实现以及对测量值的检核 * */ Point pC1 = new Point(0, 200); Point pB1 = new Point(0, 100); Point pA1 = new Point(0,0); double angleC1 = 44.992/180*Math.PI; double angleB11 = 89.999/180*Math.PI; double angleB12 = 90.001/180*Math.PI; double angleA1 = 45.0/180*Math.PI; //建立前方测量的第一次测量对象test Front_Intersection test = new Front_Intersection(); //依次按逆时针放入对应的点和参数值 test.pointA = pC1; test.pointB = pB1; test.angleA = angleC1; test.angleB = angleB11; Point ret = test.QFJH(); //建立前方测量的第二次测量对象test1 Front_Intersection test1 = new Front_Intersection(); //依次按逆时针放入对应的点和参数值 test1.pointA = pB1; test1.pointB = pA1; test1.angleA = angleB12; test1.angleB = angleA1; Point ret0 = test1.QFJH(); //第一次测量出来的点P的坐标 Point pP11 = new Point (ret.x , ret.y); //第二次测量出来的点P的坐标 Point pP12 = new Point (ret0.x , ret0.y); /* * * 以下为输出语句 * */ System.out.println("根据点C、B,以及∠C和∠CBP求得点P的第一次测量值:"); System.out.println("第一次测量出的点P :"+"(" + ret.x + ", " + ret.y +")"); System.out.println("根据点B、A,以及∠PBA和∠BAP求得点P的第二次测量值:"); System.out.println("第二次测量出的点P :"+"(" + ret0.x + ", " + ret0.y +")"); //实现检测方法 System.out.println("下面进行测量检测:"); double m = test.check(ret, ret0); if(m <= 0.2) { System.out.println("检测合格"); System.out.println("为了更精确P点,取两次测量的平均值:"); Point AVGP1 = new Point ((ret.x + ret0.x)/2 , (ret.y + ret0.y)/2); System.out.println("点P的综合测量值为 :" + "(" + AVGP1.x + ", " + AVGP1.y +")"); System.out.println("点P到点A的距离为:" + AVGP1.getDistance(pA1)); System.out.println("点P到点B的距离为:" + AVGP1.getDistance(pB1)); System.out.println("点P到点C的距离为:" + AVGP1.getDistance(pC1)); System.out.println("AP的方位角为:" + AVGP1.getAngle(pA1)); System.out.println("BP的方位角为:" + AVGP1.getAngle(pB1)); System.out.println("CP的方位角为:" + AVGP1.getAngle(pC1)); } else System.out.println("检测不合格 , 需要重新检测!!!"); /* * * 以下为侧方交会的实现以及对测量值的检核 * */ //侧方交会的参数值 Point pC2 = new Point(100, 0); Point pB2 = new Point(0, 100); Point pA2 = new Point(0, 0); double angleP2 = 45.002/180*Math.PI; double anglePO = 45.005/180*Math.PI; double angleA2 = 44.995/180*Math.PI; double angleB2 = (90.0 - angleP2 + angleA2)/180*Math.PI; //侧方交会的测量对象Test Side_Intersection Test= new Side_Intersection(); //按逆时针顺序依次放入参数 Test.pointA = pB2; Test.pointB = pA2; Test.angleA = angleB2; Test.angleP = angleP2; Point ret1 = Test.CFJH(); //求得的P点值 Point pP2 = new Point (ret1.x , ret1.y); //定义一个双精度变量n放置测量出来的P点到A的方位角正切值得倒数,即∠APC的测量值 double n = 1/Math.atan(Test.check(ret1, Test.pointA)); //定义一个双精度变量l放置点∠APC和观测值和测量值之差的绝对值 double l = Math.abs(anglePO - n); //进行检核判断 if(l <= 40){ System.out.println("检测合格"); System.out.println("点P的综合测量值为 :" + "(" + ret1.x + ", " + ret1.y +")"); System.out.println("点P到点A的距离为:" + pP2.getDistance(pA2)); System.out.println("点P到点B的距离为:" + pP2.getDistance(pB2)); System.out.println("点P到点C的距离为:" + pP2.getDistance(pC2)); System.out.println("AP的方位角为:" + pP2.getAngle(pA2)); System.out.println("BP的方位角为:" + pP2.getAngle(pB2)); System.out.println("CP的方位角为:" + pP2.getAngle(pC2)); } else System.out.println("检测不合格 , 需要重新检测!!!"); } }
ssh整合,action与logic之间统一接口问题
struts1.3+hibernate3.0+spring2.0整合已经整合完了,但是有个问题就是action和logic之间的传值问题,也就是logic的接口应该怎么定义才能打到action调用的统一 这个是我项目的结构图 [img]http://dl.iteye.com/upload/attachment/540343/143fd1b4-a59c-3648-bece-5effce7a30da.jpg[/img] LoginAction [code="java"] public class LoginInAction extends BaseAction { LoginLogic loginLogic; @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String msg = ""; String url = request.getParameter("url"); LoginVO vo = new LoginVO msg = getLoginLogic().doIt(vo); //判断doit返回的string是成功还是失败 if(msg.toLowerCase().indexOf("error") >= 0){ request.setAttribute(ERROR_KEY.ERROR_INFO_NAME, msg); return mapping.findForward("error"); } if(msg.equals(ERROR_KEY.SUCCESS)){ userLoginVO = new UserLoginVO(); //成功就把logic里面的vo获得到,传送到页面和session中 userLoginVO = getLoginLogic().getUserLoginVO(); request.getSession().setAttribute(WEB_KEY.VO_USER_LOGIN, userLoginVO); return mapping.findForward("success"); } return mapping.findForward("error"); } private LoginLogic getLoginLogic() { return loginLogic; } public void setLoginLogic(LoginLogic loginLogic) { this.loginLogic = loginLogic; } } [/code] LoginLogic 接口 [code="java"] public interface LoginLogic { /** * 主函数 * @param loginVO * @return ERROR_KEY */ public String doIt(LoginVO loginVO); /** * 获取userVO * * @return LoginVO */ public UserLoginVO getUserLoginVO(); } [/code] LoginLogicImpl [code="java"] public class LoginLogicImpl extends BaseLogicImpl implements LoginLogic { private LoginService loginService; private UserLoginVO userLoginVO; public LoginLogicImpl() { } public String doIt(LoginVO vo) { String msg = ERROR_KEY.ERROR_USERIDPWD_500; return msg; } private LoginService getLoginService() { return loginService; } public void setLoginService(LoginService loginService) { this.loginService = loginService; } public UserLoginVO getUserLoginVO() { return userLoginVO; } private void setUserLoginVO(UserLoginVO userLoginVO) { this.userLoginVO = userLoginVO; } [/code] 可以看出,为了获取一个uservo只能在logic的实现类里面定义一个 private UserLoginVO userLoginVO; 大家知道,spring默认是单例模式,所以这样的话可能回导致vo被其他请求修改 我想问问有没有一种方法能达到logic返回值可以支持多个,并且接口能定义为通用的,例如doit()这样的接口,所有的logic都是这一个主入口 我目前想到的就是,把返回值定义为成Map的 请问谁还有好的办法,谢谢了,前提是还是使用spring单例模式.谢谢
javascript:这里的this所示变量还有什么实际意义呢?
this方法有什么用呢?这种方法必须要有具体的绑定对象才能调用的呀,但是由于是匿名函数自执行,还有绑定对象么?写this属性还有意义么? [code="java"]ClassID=(function(){        var id =0 ; //私有的那个值  静态私有属性         this.get1=function(){          return id;      };      return function (){ //外层函数返回一个有权访问私有值的嵌套的函数,就是我们保存在ClassID中的嵌套函数            this.getId=function(){              get1();          }      };    })();   ClassID.get3=function(){      return get1(); } alert(ClassID.get3());//0 [/code] 但是这段书上代码竟然可用 我实在是不理解了 求解
初学者关于java的synchronized的弱弱的疑问
import java.awt.*; <br />import java.awt.event.*; <br />import java.applet.*; <br /> <br />class TwoCounter2 extends Thread { <br />&nbsp; private boolean started = false; <br />&nbsp; private TextField <br />&nbsp;&nbsp;&nbsp; t1 = new TextField(5), <br />&nbsp;&nbsp;&nbsp; t2 = new TextField(5); <br />&nbsp; private Label l = <br />&nbsp;&nbsp;&nbsp; new Label("count1 == count2"); <br />&nbsp; private int count1 = 0, count2 = 0; <br />&nbsp; public TwoCounter2(Container c) { <br />&nbsp;&nbsp;&nbsp; Panel p = new Panel(); <br />&nbsp;&nbsp;&nbsp; p.add(t1); <br />&nbsp;&nbsp;&nbsp; p.add(t2); <br />&nbsp;&nbsp;&nbsp; p.add(l); <br />&nbsp;&nbsp;&nbsp; c.add(p); <br />&nbsp; }&nbsp;&nbsp;&nbsp; <br />&nbsp; public void start() { <br />&nbsp;&nbsp;&nbsp; if(!started) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; started = true; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.start(); <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />&nbsp; public&nbsp; synchronized void run() { <br />&nbsp;&nbsp;&nbsp; while (true) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t1.setText(Integer.toString(count1++)); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t2.setText(Integer.toString(count2++)); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(500); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (InterruptedException e){} <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />&nbsp; public synchronized void synchTest() { <br />&nbsp;&nbsp;&nbsp; Sharing2.incrementAccess(); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; if(count1 != count2){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l.setText("Unsynched"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("count1="+count1); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("count2="+count2); <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />} <br /> <br />class Watcher2 extends Thread { <br />&nbsp; private Sharing2 p; <br />&nbsp; public Watcher2(Sharing2 p) { <br />&nbsp;&nbsp;&nbsp; this.p = p; <br />&nbsp;&nbsp;&nbsp; start(); <br />&nbsp; } <br />&nbsp; public void run() { <br />&nbsp;&nbsp;&nbsp; while(true) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; p.s.length; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.s[i].synchTest(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(500); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (InterruptedException e){} <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />} <br /> <br />public class Sharing2 extends Applet { <br />&nbsp; TwoCounter2[] s; <br />&nbsp; private static int accessCount = 0; <br />&nbsp; private static TextField aCount = <br />&nbsp;&nbsp;&nbsp; new TextField("0", 10); <br />&nbsp; public static void incrementAccess() { <br />&nbsp;&nbsp;&nbsp; accessCount++; <br />&nbsp;&nbsp;&nbsp; aCount.setText(Integer.toString(accessCount)); <br />&nbsp; } <br />&nbsp; private Button <br />&nbsp;&nbsp;&nbsp; start = new Button("Start"), <br />&nbsp;&nbsp;&nbsp; observer = new Button("Observe"); <br />&nbsp; private boolean isApplet = true; <br />&nbsp; private int numCounters = 0; <br />&nbsp; private int numObservers = 0; <br />&nbsp; public void init() { <br />&nbsp;&nbsp;&nbsp; if(isApplet) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numCounters = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt(getParameter("size")); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("++"+numCounters); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numObservers = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getParameter("observers")); <br />&nbsp;&nbsp;&nbsp; System.out.println("++"+numCounters); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; s = new TwoCounter2[numCounters]; <br />&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; s.length; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[i] = new TwoCounter2(this); <br />&nbsp;&nbsp;&nbsp; Panel p = new Panel(); <br />&nbsp;&nbsp;&nbsp; start.addActionListener(new StartL()); <br />&nbsp;&nbsp;&nbsp; p.add(start); <br />&nbsp;&nbsp;&nbsp; observer.addActionListener(new ObserverL()); <br />&nbsp;&nbsp;&nbsp; p.add(observer); <br />&nbsp;&nbsp;&nbsp; p.add(new Label("Access Count")); <br />&nbsp;&nbsp;&nbsp; p.add(aCount); <br />&nbsp;&nbsp;&nbsp; add(p); <br />&nbsp; } <br />&nbsp; class StartL implements ActionListener { <br />&nbsp;&nbsp;&nbsp; public void actionPerformed(ActionEvent e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; s.length; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[i].start(); <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />&nbsp; class ObserverL implements ActionListener { <br />&nbsp;&nbsp;&nbsp; public void actionPerformed(ActionEvent e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; numObservers; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Watcher2(Sharing2.this); <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp; } <br />&nbsp; public static void main(String[] args) { <br />&nbsp;&nbsp;&nbsp; Sharing2 applet = new Sharing2(); <br />&nbsp;&nbsp;&nbsp; // This isn't an applet, so set the flag and <br />&nbsp;&nbsp;&nbsp; // produce the parameter values from args: <br />&nbsp;&nbsp;&nbsp; applet.isApplet = false; <br />&nbsp;&nbsp;&nbsp; applet.numCounters = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (args.length == 0 ? 5 : <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt(args[0])); <br />&nbsp;&nbsp;&nbsp; applet.numObservers = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (args.length &lt; 2 ? 5 : <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer.parseInt(args[1])); <br />&nbsp;&nbsp;&nbsp; Frame aFrame = new Frame("Sharing2"); <br />&nbsp;&nbsp;&nbsp; aFrame.addWindowListener( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new WindowAdapter() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void windowClosing(WindowEvent e){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(0); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }); <br />&nbsp;&nbsp;&nbsp; aFrame.add(applet, BorderLayout.CENTER); <br />&nbsp;&nbsp;&nbsp; aFrame.setSize(350, applet.numCounters *100); <br />&nbsp;&nbsp;&nbsp; applet.init(); <br />&nbsp;&nbsp;&nbsp; applet.start(); <br />&nbsp;&nbsp;&nbsp; aFrame.setVisible(true); <br />&nbsp; } <br />} <br /> <br />//以上的代码是从java思想上摘得。我搞不明白为什么,在start之后,为什么synchTest()不能返回值。 <br />synchronized run(){} <br />是对run()方法加锁还是对count1和count2加锁。<br /><strong>问题补充:</strong><br />;;;;;;;;<br /><strong>问题补充:</strong><br />我怎么不能回答自己的帖子,我给run()是不想其他的thread访问run(),这样写是不是不可以?<br /><strong>问题补充:</strong><br />对这也正是我不明白的地方,每个thread对象,都是调用自己的run()方法。但是加上之后和不加之后的效果完全不一样,这样就让我更糊涂了。如果在run()和synchTest()上分别上加同步限制,在run()运行之后,synchTest()的比较部分一直停留在等待状态。费解啊。<br /><strong>问题补充:</strong><br />在run()上同步不是加给run()方法的吗?怎么是Thread锁定了thread对象呢。 那样的话我的synchTest()同样是同步了run(),为什么当start按钮按下时,synchTest()函数感觉就被挂起了呢。 我刚学,您多多点化点化。
commons-fileupload-1.2.jar加Ext.ux.UploadDialog.js做上传,求高手
<p>用commons-fileupload-1.2.jar加Ext.ux.UploadDialog.js做上传,结果文件是上传成功了,但遇到两个问题,求高人解决</p> <p><br>1、上传附件名称为中文的会出现乱码。</p> <p>2、虽然文件已经上传,但UploadDialog.js控件提示的是上传失败,在网上查了好久,都说要返回一个json给UploadDialog.js,但是我太菜鸟了,没搞明白怎么返回这个值。</p> <p><br>贴出我的代码</p> <p><br>调用的jsp代码:</p> <p> </p> <pre name="code" class="javascript">&lt;input type="file"&gt; &lt;input type="button" id="btnUplod" onclick="uploadSw()" value="上传附件"&gt;</pre> <p> js代码:</p> <pre name="code" class="javascript">function uploadSw() { debugger; dialog = new Ext.ux.UploadDialog.Dialog({ title: '文件上传' , url:'demo2.jsp' , post_var_name:'files', width : 450, height : 300, minWidth : 450, minHeight : 300, draggable : true , resizable : true , // autoCreate: true, constraintoviewport: true , // permitted_extensions:[ 'JPG' , 'jpg' , 'jpeg' , 'JPEG' , 'GIF' , // 'gif' , 'png' , 'PNG' ], modal: true , reset_on_hide: false , allow_close_on_upload: false , // 关闭上传窗口是否仍然上传文件 // upload_autostart: true //是否自动上传文件 upload_autostart: false }); dialog.show(); dialog.on( 'uploadsuccess' , onUploadSuccess); // 定义上传成功回调函数 dialog.on( 'uploadfailed' , onUploadFailed); // 定义上传失败回调函数 dialog.on( 'uploaderror' , onUploadFailed); // 定义上传出错回调函数 dialog.on( 'uploadcomplete' , onUploadComplete); // 定义上传完成回调函数 } // 文件上传成功后的回调函数 onUploadSuccess = function(dialog, filename, resp_data, record){ if(!resp_data.success){ alert(resp_data.message);// resp_data是json格式的数据 } }; // 文件上传失败后的回调函数 onUploadFailed = function(dialog, filename, resp_data, record){ alert(resp_data.message); }; // 文件上传完成后的回调函数 onUploadComplete = function(dialog){ dialog.hide(); }; </pre> <p> </p> <p>jsp代码:</p> <p>demo2.jsp</p> <pre name="code" class="jsp">&lt;%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%&gt; &lt;%@ page import="org.apache.commons.fileupload.*"%&gt; &lt;%@ page import="org.apache.commons.fileupload.servlet.*"%&gt; &lt;%@ page import="org.apache.commons.fileupload.disk.*"%&gt; &lt;%@ page import="java.util.*"%&gt; &lt;%@ page import="java.io.*"%&gt; &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; &lt;% String uploadPath = "E:\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart == true) { try { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List&lt;FileItem&gt; items = upload.parseRequest(request);//得到所有的文件 Iterator&lt;FileItem&gt; itr = items.iterator(); while (itr.hasNext()) {//依次处理每个文件 FileItem item = (FileItem) itr.next(); String fileName = item.getName();//获得文件名,包括路径 if (fileName != null) { File fullFile = new File(item.getName()); File savedFile = new File(uploadPath, fullFile.getName()); item.write(savedFile); } out.print("'success':true,'fileName':'"+fileName+"','message':'success!'"); } out.print("upload succeed"); out.print("'success':true,'fileName':'fileName','message':'success!'"); response.getWriter().print("{success:true,message:'上传成功'}"); } catch (Exception e) { e.printStackTrace(); } } else { //out.println("the enctype must be multipart/form-data"); } %&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=GB18030"&gt; &lt;title&gt;File upload&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p> </p> <p>谢谢各位大侠了啊</p>
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问

相似问题

4
用java怎么拟合形如y=ax^b的幂函数
1
C# 新建线程递归调用包含回调函数,怎么判断递归调用结束,获取返回值
3
python3编写一个求平均值且带返回值的自定义的函数
0
java反射,自动调用方法,方法的返回值类型是不一定的,怎么得到方法的返回值类型的原来的类型!
1
javascrpt语言怎么实现对数组排序,用log输出,不能调用系统函数,
2
如何将用Spyder写的程序封装成一个函数,生成一个和Java连接的端口?
1
关于JAVA8的新特性函数式接口与Stream的一个问题
1
c语言关于主函数调用子函数实现特定功能
4
微信小程序云开发 云函数怎么实现多个方法
3
回调函数里的变量作为外层函数返回值的问题
3
关于java的构造函数的一个问题
0
关于gomobile bind方法生成.aar文件过程中go 函数返回多个值的问题
4
我的问题是为什么我的函数返回不了正确的返回值;
1
python定义的函数怎么返回遍历的多个值,如果是返回多个字符串呢?
1
新手关于Java语言语法及环境变量的疑问
2
用C语言写了一个输入一个一维数组的函数,如何在函数中调用该数组?
3
java 海康SDK二次开发有没有获取所有摄像头ip的函数
0
用C语言实现一个函数问题,F(x)
2
c语言 为什么函数可以返回了一个局部指针结构体?
1
C++如何获取一个程序运行结束后的返回值?如何隐藏调用系统的控制台?