为什么,字符串数组不能直接作为参数传递,需要定义变量进行传递?

图片说明

为什么,字符串数组不能直接作为参数传递,需要定义变量后以变量的形式进行传递?

qq_42417143
qq_42417143 你的“hello”在{}中的,你直接输出它,相当于你直接输出语句块,计算机当然报错。变量的作用就是可操作性增强,很方便。你想直接输出字符串数组那是底层代码所决定的,是已定规矩。
11 个月之前 回复

3个回答

你的“hello”在{}中的,你直接输出它,相当于你直接输出语句块,计算机当然报错。变量的作用就是可操作性增强,很方便。你想直接输出字符串数组那是底层代码所决定的,是已定规矩。

qq_43037983
qq_43037983 多谢指导
10 个月之前 回复

因为占的存储空间不同

qq_43037983
qq_43037983 多谢指导
10 个月之前 回复

{“hello”},java工具编译器不能识别出你这个是数组,所以就报错

qq_43037983
qq_43037983 多谢指导
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言可变参数如何传递给另一个接受可变参数的函数?
比如说,有一个log_printf的函数定义如下: ``` void log_printf(char *fmt, ...); ``` 参数fmt和后面的变参,调用规则和printf相同。该函数使用sprintf,将fmt和之后的参数转换成格式化字符串,再使用fwrite写入到文件,或使用OutputDebugStirng输出调试信息。 那么,如何在该函数内部将fmt和后面的变参传递给sprintf?C语言能否实现这一操作?还是必须使用内嵌汇编?
找密码(c语言的问题)~~~
在一个古堡的大门上有5行字符。其中隐藏着打开大门的密码。密码共有4位数字(0到9)。小明发现了一种找密码的方法:最后一行中的字符在第一行字符中出现的总次数是密码的第一个数字,依此类推。输入数据保证每行得到的数字在0到9之间。 请编写一个函数 decode帮助小明找出密码。 函数接口定义: int decode(char**s); 通过参数s向函数传递5行字符串,函数返回密码值。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define N 100 #define M 5 int decode(char**s); int main() { char *s[M]; int i; int key; for(i=0; i<M; i++){ s[i] = (char *)malloc((N+1)*sizeof(char)); gets(s[i]); } key = decode(s); printf("%04d",key); for(i=0; i<M; i++){ free(s[i]); } return 0; } /* 您提交的代码将放置在这里 */ 输入样例: 1111 222 33 41 2341 输出样例: 4322
C#传递参数问题。。。。。
我在form1中定义了一个字符串str。。如何把它传递到form2。在form2中也可调用
Javascript 是pass-by-reference(传址)还是pass-by-value(传值)?
基本类型(数字、字符串等)通过值传递,但对象是未知的,因为它们既可以pass-by-value(假如我们认为保存对象的变量实际上是对对象的引用) ,也可以pass-by-reference(假如我们认为对象的变量保存对象本身)。 尽管到最后这并不太重要,但我想知道用什么正确的方式来表示传递约定的参数。是否有 JavaScript 规范,定义了与此相关的语义?
C++的类种创建了一个其他类的对象,怎么给这个其他类的对象传递参数
我在程序中的一个类的定义里面创建了一个其他类的对象,我应该怎么将参数传递给这个其他类的对象呢?比如说: class Catalogue { private: BookRecord *BR; public: Catalogue(int n) { BR = new BookRecord[n]; } }; class BookRecord { public: void setInformation(string); }; 在这里我应该怎么传递一个字符串到 BookRecord里面的 setInformation呢? 相关的文章也可以,或者说这个涉及到什么知识
求大神来帮助C#,一个简单学生类
定义枚举类型 Public enum SexType {男, 女, 未知}; Public enum ProTitle (助教,讲师,副教授、教授、未知) Public enum StuTitle {班长,副班长,学委,学员} 定义下面类 Person类(抽象类)    包含的字段:姓名Name(字符串型)、身高Height(单精度型,单位:米)、体重Weight(单精度,单位:kg)、性别Sex(枚举类型SexType)    包含的属性:身份证号ID(字符串型,长度固定为18,且不包含空格字符)、年龄Age(只读方法)    包含的方法:    Public abstract void Saying(); //该方法为抽象方法    构造函数(带参数和不带参数的各定义一个):    Public Person(){}; //在该构造函数对字段进行初始化,按默认值进行初始化,其中身份证号码初始化为“999999999999999999”    Public person(string name, string id, float height, float weight, SexType sex)    {}; //添加代码,利用实例化时传递的参数对类中的字段进行初始化    Public abstract void Write(FileStream fs); //功能:将数据保存到文件中    Public abstract void Read(FileStream fs); //功能:从文件中读取数据 Teacher类,该类从Person类继承    包含的字段:职称Title(ProTitle枚举类型)、课程Courses(集合类型,集合元素类型为字符串,访问控制符为private)    包含的属性:CourseNumber (数据类型:int,只读属性,含义:课程的数量)    包含的方法:    Public string CourseAdd(string coursename) //增加一门课程,同一门课程不能重复添加    Public string CourseDelete(string coursename); //删除一门课程,当要删除的课程不存在时,应给出提示    对父类中的抽象函数Saying()进行重写;//在控制台上输出:“我正在讲课,不方便接电话”    对Object类中的虚函数ToString()进行重写;//将有关教师的所有信息整合成一个字符串,并返回。该虚函数在Object中的定义如下:    Public virtual string ToString()    对父类的中Read()、Write()方法进行重写。(方法中的代码可暂时不写) 定义结构体    Public struct coursescore    {     String coursename; //课程的名称     Float score; //课程的成绩    } 定义学生类Student,从Person类派生    包含的字段:学号StuID(字符串类型,长度固定,以实际学号的长度为准)、课程成绩CourseScore(集合类型,集合中的元素类型为结构体coursescore,访问修饰符采用private)、学生身份title(类型为枚举类型StuTitle)    包含的属性:    课程门数CourseNumber,定义为只读属性,表示学生所选的课程门数    包含的方法:    Public void CourseAdd(string coursename, float score);    Public void CourseAdd(coursescore course);    上述2个方法为重载,功能是实现增加一门课程及该课程的成绩    对父类的中的Saying()进行重写,要求输出“我正在上课,不方便接电话”    对父类的中的Read、Write方法进行重写(方法体中可暂时不写代码) 增加如下方法:    //功能:获取学生的所有课程的最高分、最低分和平均分    Public void GetScore(ref double HighScore, ref double LowScore, ref double AverageScore)    参数的含义:    HighScore:所有课程中的最高分    LowScore:所有课程中的最低分    AverageScore:所有课程的平均分    对Object类中的虚函数ToString()进行重写,要求该方法将学生的所有信息整合为一个字符串,并返回
C#类,求帮忙求帮忙帮忙帮忙
定义枚举类型 Public enum SexType {男, 女, 未知}; Public enum ProTitle (助教,讲师,副教授、教授、未知) Public enum StuTitle {班长,副班长,学委,学员} 定义下面类 Person类(抽象类)    包含的字段:姓名Name(字符串型)、身高Height(单精度型,单位:米)、体重Weight(单精度,单位:kg)、性别Sex(枚举类型SexType)    包含的属性:身份证号ID(字符串型,长度固定为18,且不包含空格字符)、年龄Age(只读方法)    包含的方法:    Public abstract void Saying(); //该方法为抽象方法    构造函数(带参数和不带参数的各定义一个):    Public Person(){}; //在该构造函数对字段进行初始化,按默认值进行初始化,其中身份证号码初始化为“999999999999999999”    Public person(string name, string id, float height, float weight, SexType sex)    {}; //添加代码,利用实例化时传递的参数对类中的字段进行初始化    Public abstract void Write(FileStream fs); //功能:将数据保存到文件中    Public abstract void Read(FileStream fs); //功能:从文件中读取数据 Teacher类,该类从Person类继承    包含的字段:职称Title(ProTitle枚举类型)、课程Courses(集合类型,集合元素类型为字符串,访问控制符为private)    包含的属性:CourseNumber (数据类型:int,只读属性,含义:课程的数量)    包含的方法:    Public string CourseAdd(string coursename) //增加一门课程,同一门课程不能重复添加    Public string CourseDelete(string coursename); //删除一门课程,当要删除的课程不存在时,应给出提示    对父类中的抽象函数Saying()进行重写;//在控制台上输出:“我正在讲课,不方便接电话”    对Object类中的虚函数ToString()进行重写;//将有关教师的所有信息整合成一个字符串,并返回。该虚函数在Object中的定义如下:    Public virtual string ToString()    对父类的中Read()、Write()方法进行重写。(方法中的代码可暂时不写) 定义结构体    Public struct coursescore    {     String coursename; //课程的名称     Float score; //课程的成绩    } 定义学生类Student,从Person类派生    包含的字段:学号StuID(字符串类型,长度固定,以实际学号的长度为准)、课程成绩CourseScore(集合类型,集合中的元素类型为结构体coursescore,访问修饰符采用private)、学生身份title(类型为枚举类型StuTitle)    包含的属性:    课程门数CourseNumber,定义为只读属性,表示学生所选的课程门数    包含的方法:    Public void CourseAdd(string coursename, float score);    Public void CourseAdd(coursescore course);    上述2个方法为重载,功能是实现增加一门课程及该课程的成绩    对父类的中的Saying()进行重写,要求输出“我正在上课,不方便接电话”    对父类的中的Read、Write方法进行重写(方法体中可暂时不写代码) 增加如下方法:    //功能:获取学生的所有课程的最高分、最低分和平均分    Public void GetScore(ref double HighScore, ref double LowScore, ref double AverageScore)    参数的含义:    HighScore:所有课程中的最高分    LowScore:所有课程中的最低分    AverageScore:所有课程的平均分    对Object类中的虚函数ToString()进行重写,要求该方法将学生的所有信息整合为一个字符串,并返回
大神求再来。。。。。。。
定义枚举类型 Public enum SexType {男, 女, 未知}; Public enum ProTitle (助教,讲师,副教授、教授、未知) Public enum StuTitle {班长,副班长,学委,学员} 定义下面类 Person类(抽象类)    包含的字段:姓名Name(字符串型)、身高Height(单精度型,单位:米)、体重Weight(单精度,单位:kg)、性别Sex(枚举类型SexType)    包含的属性:身份证号ID(字符串型,长度固定为18,且不包含空格字符)、年龄Age(只读方法)    包含的方法:    Public abstract void Saying(); //该方法为抽象方法    构造函数(带参数和不带参数的各定义一个):    Public Person(){}; //在该构造函数对字段进行初始化,按默认值进行初始化,其中身份证号码初始化为“999999999999999999”    Public person(string name, string id, float height, float weight, SexType sex)    {}; //添加代码,利用实例化时传递的参数对类中的字段进行初始化    Public abstract void Write(FileStream fs); //功能:将数据保存到文件中    Public abstract void Read(FileStream fs); //功能:从文件中读取数据 Teacher类,该类从Person类继承    包含的字段:职称Title(ProTitle枚举类型)、课程Courses(集合类型,集合元素类型为字符串,访问控制符为private)    包含的属性:CourseNumber (数据类型:int,只读属性,含义:课程的数量)    包含的方法:    Public string CourseAdd(string coursename) //增加一门课程,同一门课程不能重复添加    Public string CourseDelete(string coursename); //删除一门课程,当要删除的课程不存在时,应给出提示    对父类中的抽象函数Saying()进行重写;//在控制台上输出:“我正在讲课,不方便接电话”    对Object类中的虚函数ToString()进行重写;//将有关教师的所有信息整合成一个字符串,并返回。该虚函数在Object中的定义如下:    Public virtual string ToString()    对父类的中Read()、Write()方法进行重写。(方法中的代码可暂时不写) 定义结构体    Public struct coursescore    {     String coursename; //课程的名称     Float score; //课程的成绩    } 定义学生类Student,从Person类派生    包含的字段:学号StuID(字符串类型,长度固定,以实际学号的长度为准)、课程成绩CourseScore(集合类型,集合中的元素类型为结构体coursescore,访问修饰符采用private)、学生身份title(类型为枚举类型StuTitle)    包含的属性:    课程门数CourseNumber,定义为只读属性,表示学生所选的课程门数    包含的方法:    Public void CourseAdd(string coursename, float score);    Public void CourseAdd(coursescore course);    上述2个方法为重载,功能是实现增加一门课程及该课程的成绩    对父类的中的Saying()进行重写,要求输出“我正在上课,不方便接电话”    对父类的中的Read、Write方法进行重写(方法体中可暂时不写代码) 增加如下方法:    //功能:获取学生的所有课程的最高分、最低分和平均分    Public void GetScore(ref double HighScore, ref double LowScore, ref double AverageScore)    参数的含义:    HighScore:所有课程中的最高分    LowScore:所有课程中的最低分    AverageScore:所有课程的平均分    对Object类中的虚函数ToString()进行重写,要求该方法将学生的所有信息整合为一个字符串,并返回
跪求大神帮帮忙,都好说。。。
实验目的: 1. 掌握常用控件的属性、方法、事件 2. 掌握窗体的常用属性、方法和事件 3. 掌握Windows应用程序人机界面可视化设计方法 4. 掌握事件驱动模型的思想 5. 巩固C#语言中类的定义、继承、流程控制语句等基础知识 实验步骤: (1) 在.Net环境中建立Windows窗体应用程序; (2) 定义枚举类型 Public enum SexType {男, 女, 未知}; Public enum ProTitle (助教,讲师,副教授、教授、未知) Public enum StuTitle {班长,副班长,学委,学员} (3) 定义下面类  Person类(抽象类) 包含的字段:姓名Name(字符串型)、身高Height(单精度型,单位:米)、体重Weight(单精度,单位:kg)、性别Sex(枚举类型SexType) 包含的属性:身份证号ID(字符串型,长度固定为18,且不包含空格字符)、年龄Age(只读方法) 包含的方法: Public abstract void Saying(); //该方法为抽象方法 构造函数(带参数和不带参数的各定义一个): Public Person(){}; //在该构造函数对字段进行初始化,按默认值进行初始化,其中身份证号码初始化为“999999999999999999” Public person(string name, string id, float height, float weight, SexType sex) {}; //添加代码,利用实例化时传递的参数对类中的字段进行初始化 Public abstract void Write(FileStream fs); //功能:将数据保存到文件中 Public abstract void Read(FileStream fs); //功能:从文件中读取数据  Teacher类,该类从Person类继承 包含的字段:职称Title(ProTitle枚举类型)、课程Courses(集合类型,集合元素类型为字符串,访问控制符为private) 包含的属性:CourseNumber (数据类型:int,只读属性,含义:课程的数量) 包含的方法: Public string CourseAdd(string coursename) //增加一门课程,同一门课程不能重复添加 Public string CourseDelete(string coursename); //删除一门课程,当要删除的课程不存在时,应给出提示 对父类中的抽象函数Saying()进行重写;//在控制台上输出:“我正在讲课,不方便接电话” 对Object类中的虚函数ToString()进行重写;//将有关教师的所有信息整合成一个字符串,并返回。该虚函数在Object中的定义如下: Public virtual string ToString() 对父类的中Read()、Write()方法进行重写。(方法中的代码可暂时不写)  定义结构体 Public struct coursescore { String coursename; //课程的名称 Float score; //课程的成绩 }  定义学生类Student,从Person类派生 包含的字段:学号StuID(字符串类型,长度固定,以实际学号的长度为准)、课程成绩CourseScore(集合类型,集合中的元素类型为结构体coursescore,访问修饰符采用private)、学生身份title(类型为枚举类型StuTitle) 包含的属性: 课程门数CourseNumber,定义为只读属性,表示学生所选的课程门数 包含的方法: Public void CourseAdd(string coursename, float score); Public void CourseAdd(coursescore course); 上述2个方法为重载,功能是实现增加一门课程及该课程的成绩 对父类的中的Saying()进行重写,要求输出“我正在上课,不方便接电话” 对父类的中的Read、Write方法进行重写(方法体中可暂时不写代码) 增加如下方法: //功能:获取学生的所有课程的最高分、最低分和平均分 Public void GetScore(ref double HighScore, ref double LowScore, ref double AverageScore) 参数的含义: HighScore:所有课程中的最高分 LowScore:所有课程中的最低分 AverageScore:所有课程的平均分 对Object类中的虚函数ToString()进行重写,要求该方法将学生的所有信息整合为一个字符串,并返回  Document类 字段: Private List<string> CourseList; //存储课程列表 Private List<Person> PersonList; //存储学生和教师信息的列表 方法: Public Document(); //构造函数 Public void AddCourse(string CourseName) ;//增加课程 Pulic void DeleteCourse(string CourseName); //删除课程 Public void AddPerson(person personobj); //增加学生或教师 Public void DeletePerson(person persin); //删除学生或教师对象 Public void DeletePerson(string ID); //按照身份证号码删除教师或学生 Public person FindPerson(string ID); //按照身份证号码查找教师或学生对象 Public void SaveData(FileStream fs); //将数据保存到文件中 Public void ReadData(FileStream fs); //从文件中读取数据 属性: Public int TeacherNumber; Public int StudentNumber; 事件: Public event NumberChangingEventHandler onPersonNumberChanging;  委托 Public delegate void NumberChangingEventHandler(object sender, EventNumberArgs e);  EventNumberArgs类(用户传递事件参数) 字段: Public int teacherNumber; Public int studentNumber;
谁能帮我解释下 这个代码 然后最好能让里面数据显示到listview中去
package com.httppost.main; import java.io.IOException; import java.io.InterruptedIOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.HttpConnectionParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class HttpPostActivity extends Activity { TextView textView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取main这个页面 Button jsonBtn = (Button) findViewById(R.id.get_array_json); //获取组件 jsonBtn.setOnClickListener(jsonClick); //监听按键 Button listBtn = (Button) findViewById(R.id.get_list_json); listBtn.setOnClickListener(listClick); } //获取单个json封装的数据 OnClickListener jsonClick = new OnClickListener() { //按键事件 @Override public void onClick(View v) { // TODO Auto-generated method stub ProgressDialog proDialog = ProgressDialog.show(v.getContext(), "", "正在获取数据……", true, true); //显示dialong HttpThread jsonThread = new HttpThread(v.getContext(), proDialog); // 创建一个Http线程 String url = "http://birsys.ceshiceshi.com/json_1.php"; //创建URL // url传递参数 String[] key = { "type" }; //传递参数 String[] value = { "0" }; // php页面返回的json键 String[] jsonKey = { "id", "username", "lat", "lon","type" }; //传递相应的参数 jsonThread.setUrl(url); jsonThread.setKey(key); jsonThread.setValue(value); jsonThread.setJsonKey(jsonKey); jsonThread.start(); textView= (TextView)findViewById(R.id.textview); textView.setText(url); } }; //获取带数组类型的封装 OnClickListener listClick = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ProgressDialog proDialog = ProgressDialog.show(v.getContext(), "", "正在获取数据……", true, true); HttpThread jsonThread = new HttpThread(v.getContext(), proDialog); String url = "http://birsys.ceshiceshi.com/json_2.php"; // url传递参数 String[] key = { "type" }; String[] value = { "1" }; // php页面返回的json键 String[] jsonKey = { "id", "username", "lat", "lon","type" }; String jsonName="json_2"; //传递相应的参数 jsonThread.setUrl(url); jsonThread.setKey(key); jsonThread.setValue(value); jsonThread.setJsonName(jsonName); jsonThread.setJsonKey(jsonKey); jsonThread.start(); } }; public class Json { // 解析单一的json封装,并返回字符串数组 /** * 参数说明: * 1.webContent 获取的网页封装的json格式数据 * 2.key 以数组形式组成的json的键名称 * */ public String[] getJSON(String webContent, String[] key) { int size = key.length; String[] s = new String[size]; try { JSONObject jsonObject = new JSONObject(webContent); for (int j = 0; j < size; j++) { s[j] = jsonObject.getString(key[j]); System.out.println(key[j] + "===string===" + jsonObject.getString(key[j])); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); s = null; } return s; } // 获取数组型的结构,返回ArrayList<HashMap<String, Object>>,方便listview中填充数据 /** * 参数说明: * 1.webContent 获取的网页封装的json格式数据 * 2.key 以数组形式组成的json的键名称 3.jsonName * 封装json数组数据的json名称 * public ArrayList<HashMap<String, Object>> getJSONArray(String webContent, String[] key, String jsonName) { ArrayList<HashMap<String, Object>> list; JSONArray jsonObject; try { jsonObject = new JSONObject(webContent).getJSONArray(jsonName); list = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < jsonObject.length(); i++) { JSONObject jsonObject2 = (JSONObject) jsonObject.opt(i); HashMap<String, Object> map = new HashMap<String, Object>(); for (int j = 0; j < key.length; j++) { map.put(key[j], jsonObject2.getString(key[j])); System.out.println(key[j] + "===" + jsonObject2.getString(key[j])); } list.add(map); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); list = null; } return list; } */ } public class HttpThread extends Thread{ private Context context; private ProgressDialog proDialog; private String url; private String []key; private String []value; private String []jsonKey; private String jsonName; private String []array; ArrayList<HashMap<String, Object>> list; public HttpThread(Context context,ProgressDialog proDialog){ this.context=context; this.proDialog=proDialog; } @Override public void run(){ Message msg = handler.obtainMessage(); HttpPostRequest post=new HttpPostRequest(); int res=post.requestHttp(url, key, value); String webContent=post.getWebContext(); msg.what=res; if(res==1){ //解析json Json json=new Json(); if(jsonName!=null) //解析数组型的json //list=json.getJSONArray(webContent, jsonKey, jsonName); //else //解析单个json值 array=json.getJSON(webContent, jsonKey); } handler.sendMessage(msg); } private Handler handler = new Handler() { // TODO Auto-generated constructor stub @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int what=msg.what; Http_Status_Tips status=new Http_Status_Tips(); //返回成功数据时 if(what==1){ //处理数组型json if(list!=null){ int size=list.size(); String result=""; for(int i=0;i<size;i++){ int s=jsonKey.length; //迭代jsonKey数组值 for(int j=0;j<s;j++){ result+=jsonKey[j]+":"+list.get(i).get(jsonKey[j])+"\n"; } result+="\n"; } Toast.makeText(context, result, Toast.LENGTH_LONG).show(); } //处理单个字符json if(array!=null){ int arraySize=array.length; String rs=""; for(int k=0;k<arraySize;k++){ rs+=jsonKey[k]+":"+array[k]+"\n"; } Toast.makeText(context, rs, Toast.LENGTH_LONG).show(); if(array[0].equals("2")) Toast.makeText(context, array[0], Toast.LENGTH_LONG).show(); } } //根据服务器端返回数据,自定义提示 else if(what==2){ status.setTips("自定义提示2"); }//根据服务器端返回数据,自定义提示 else if(what==3){ status.setTips("自定义提示3"); } status.ShowHttpStatusTips(what, context,proDialog); } }; //activity界面传递的参数 public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String[] getKey() { return key; } public void setKey(String[] key) { this.key = key; } public String[] getValue() { return value; } public void setValue(String[] value) { this.value = value; } public String[] getJsonKey() { return jsonKey; } public void setJsonKey(String[] jsonKey) { this.jsonKey = jsonKey; } public String getJsonName() { return jsonName; } public void setJsonName(String jsonName) { this.jsonName = jsonName; } } public class HttpPostRequest { private String webContext; //返回请求内容 public String getWebContext() { return webContext; } public void setWebContext(String webContext) { this.webContext = webContext; } //该函数返回服务器访问的各种状态,并通过webContext传递获取的文本值 /** * 参数说明 * url 访问的网络地址 * key 传递参数的名称 * value 传递参数的值 * key 与value数组长度对应,即一对键值对,这样可以不限制参数传递的个数 * */ public int requestHttp(String url,String []key,String []value) { // TODO Auto-generated method stub int status = 0; DefaultHttpClient mHttpClient = new DefaultHttpClient(); HttpPost mPost = new HttpPost(url); List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>(); int size=key.length; for(int i=0;i<size;i++){ pairs.add(new BasicNameValuePair(key[i], value[i])); } try { mPost.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8)); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { mHttpClient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, 60000); // Socket超时设置60s mHttpClient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 60000);// 连接超时60s HttpResponse response = mHttpClient.execute(mPost); int res = response.getStatusLine().getStatusCode(); if (res == 200) { HttpEntity entity = response.getEntity(); if (entity != null) { String info = EntityUtils.toString(entity); setWebContext(info); status=1; } } else if (res == 404) { status = 404; } else if (res == 500) { status = 500; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); status = 900; } catch (ConnectTimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); status = 901; } catch (InterruptedIOException e) { // TODO Auto-generated catch block e.printStackTrace(); status = 902; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); status = 903; } return status; } } public class Http_Status_Tips { //服务器端返回的状态提示 public static final String HTTP_0="其他错误"; public static final String HTTP_1=""; public static final String HTTP_404="404错误,请求链接无效"; public static final String HTTP_500="网络500错误,服务器端程序出错"; public static final String HTTP_900="网络传输协议出错"; public static final String HTTP_901="连接超时"; public static final String HTTP_902="网络中断"; public static final String HTTP_903="网络数据流传输出错"; public static final String HTTP_UNKONW="未知的错误"; //自定义的提示 private String tips; public void ShowHttpStatusTips(int status,Context context,ProgressDialog proDialog){ switch(status){ case 0: Toast.makeText(context, getTips(), Toast.LENGTH_LONG).show(); break; case 1: //Toast.makeText(context, getTips(), Toast.LENGTH_LONG).show(); break; case 2: Toast.makeText(context, getTips(), Toast.LENGTH_LONG).show(); break; case 3: Toast.makeText(context, getTips(), Toast.LENGTH_LONG).show(); break; case 404: Toast.makeText(context, HTTP_404, Toast.LENGTH_LONG).show(); break; case 500: Toast.makeText(context, HTTP_500,Toast.LENGTH_LONG).show(); break; case 900: Toast.makeText(context, HTTP_900, Toast.LENGTH_LONG).show(); break; case 901: Toast.makeText(context, HTTP_901, Toast.LENGTH_LONG).show(); break; case 902: Toast.makeText(context, HTTP_902, Toast.LENGTH_LONG).show(); break; case 903: Toast.makeText(context, HTTP_903, Toast.LENGTH_LONG).show(); break; default: Toast.makeText(context, HTTP_UNKONW, Toast.LENGTH_LONG).show(); break; } if(proDialog!=null) proDialog.dismiss(); } public String getTips() { return tips; } public void setTips(String tips) { this.tips = tips; } } }
使用Springmvc开发微信公众号数据传输问题
返回给微信服务器的XML格式的字符串,发现在公网Linux服务器中,tomcat的catalina.out文件打印的该字符串少了<ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> 这几行标签,手机微信提示该订阅号无法提供服务,请稍后再试。 该问题找了好久都找不出原因。是springmvc的数据传输有问题吗? 我贴一下springmvc.xml配置,求帮忙解答!!~ <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --> <!-- 加载controller的时候,不加载service,因为此时事物并未生效,若此时加载了service,那么事物无法对service进行拦截 --> <context:component-scan base-package="org.jeecgframework.web.*,weixin.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <!-- ApplicationContext --> <bean class="org.jeecgframework.core.util.ApplicationContextUtil"></bean> <!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射, 配置一个基于注解的定制的WebBindingInitializer,解决日期转换问题,方法级别的处理器映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="cacheSeconds" value="0" /> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 --> </list> </property> <property name="webBindingInitializer"> <bean class="org.jeecgframework.core.interceptors.MyWebBinding" /> </property> </bean> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="3"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="contentType" value="text/html" /> <property name="prefix" value="/webpage/" /> <property name="suffix" value=".jsp" /> </bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8"> <property name="maxUploadSize"> <value>104857600</value> </property> <property name="maxInMemorySize"> <value>4096</value> </property> </bean> <!-- Bean解析器,级别高于默认解析器,寻找bean对象进行二次处理 --> <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"> </bean> <!-- Excel 处理 根据用户输入进行对象处理 --> <bean id="jeecgExcelView" class="org.jeecgframework.poi.excel.view.JeecgSingleExcelView" /> <!-- 方言 --> <bean id="dialect" class="org.jeecgframework.core.common.hibernate.dialect.DialectFactoryBean"> <property name="dbType" value="${jdbc.dbType}" /> </bean> <!-- 异常处理类 --> <bean id="exceptionHandler" class="org.jeecgframework.core.common.exception.MyExceptionHandler" /> <!-- 系统错误转发配置[并记录错误日志] --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView" value="500"></property> <!-- 默认为500,系统错误(error.jsp) --> <property name="defaultStatusCode" value="404"></property> <property name="statusCodes"><!-- 配置多个statusCode --> <props> <prop key="error">500</prop> <!-- error.jsp --> <prop key="error1">404</prop> <!-- error1.jsp --> </props> </property> <property name="exceptionMappings"> <props> <!-- 这里你可以根据需要定义N多个错误异常转发 --> <prop key="java.sql.SQLException">dbError</prop> <!-- 数据库错误(dbError.jsp) --> <prop key="org.springframework.web.bind.ServletRequestBindingException">bizError</prop> <!-- 参数绑定错误(如:必须参数没传递)(bizError.jsp) --> <prop key="java.lang.IllegalArgumentException">bizError</prop> <!-- 参数错误(bizError.jsp) --> <prop key="org.springframework.validation.BindException">bizError</prop> <!-- 参数类型有误(bizError.jsp) --> <prop key="java.lang.Exception">unknowError</prop> <!-- 其他错误为'未定义错误'(unknowError.jsp) --> </props> </property> </bean> <!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="org.jeecgframework.core.interceptors.EncodingInterceptor" /> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="org.jeecgframework.core.interceptors.AuthInterceptor"> <property name="excludeUrls"> <list> <value>loginController.do?goPwdInit</value> <value>loginController.do?pwdInit</value> <value>loginController.do?login</value> <value>loginController.do?checkuser</value> <value>repairController.do?repair</value> <value>repairController.do?deleteAndRepair</value> <value>cmsMenuController.do?index</value> <value>cmsArticleController.do?cmsArticleListShow</value> <value>cmsArticleController.do?datagridwx</value> <value>cmsArticleController.do?cmsArticleShow</value> <value>cmsController.do?goPage</value> <value>cmsController.do?getMenuList</value> <value>wechatController.do?wechat</value> <value>zpController.do?iscontinue</value> <value>zpController.do?saveZpPrize</value> <value>zpController.do?getZpPize</value> <value>zpController.do?saverecord</value> <value>zpController.do?ggl_new</value> <value>zpController.do?ggl</value> <value>zpController.do?zp</value> <value>zpController.do?goZhuanpan</value> <value>weixinCmsStyleController.do?upload</value> <value>newsItemController.do?newscontent</value> <!-- 保存用户 --> <value>userController.do?saveUser</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors>
properties文件中的参数{0}如何设置
我用struts2 做了个拦截器 struts.xml片段如下 [code="java"] <!-- 配置fileUpload的拦截器 --> <interceptor-ref name="fileUpload"> <!-- 允许上传的文件大小 --> <param name="maximumSize">1024</param> </interceptor-ref> [/code] 我在 messageResource_zh_CN.properties 文件中重定义了maximumSize的拦截返回信息。 [code="java"] struts.messages.error.file.too.large=文件太大 [/code] 这样,当上传的文件大于1K后,在页面上就会出现 "文件太大" 这一信息。 但是, 我想告诉客户可以上传的文件的最大值是多少 我现在有一种简单的方法:将 struts.messages.error.file.too.large=文件太大 变成 struts.messages.error.file.too.large=文件大小不能超过1K 但在其他页面中,有时文件大小的限制是100K,而struts.messages.error.file.too.large只有一个。所以不能写死为1K。 那么,根据我目前的知识水平,我想到了: struts.messages.error.file.too.large=文件大小不能超过{0} {0}是参数。但我弄了半天也不知道该如何传递给{0}一个具体的字符串! 哪位高人能帮帮我,谢谢! [b]问题补充:[/b] To: Anddy 但是,struts2 中的 fileupload拦截器的类 FileUploadInterceptor 在 org.apache.struts2.interceptor里。 我在自己的目录下(例如:src\my\com\test)创建properties文件的话,没有用。 FileUploadInterceptor 好像只能调取src下的messageResource_zh_CN.properties中的内容。 [b]问题补充:[/b] To: Anddy 我试过了,答案是否定的。我觉得我没有理解错你的意思。 要不你也试下?
关于java转义字符提交保存到数据库的问题。
最近做了一个简单的自动计算工资的功能。 其中用到国内的开源的框架:IKExpression处理其中的计算工资的公式解析问题。 在IKExpression中规定: 公式中的字符串之间的比较解析,需要给字符串添加转义符。 如下公式: [code="java"] String exp = "(角色 == \"小麦计量\")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == \"中转计量\")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == \"内勤\")?(绩效分数*0.01*岗位基数):(0)))"; [/code] 如下参数: [code="java"] variables.add(Variable.createVariable("角色", "中转计量")); variables.add(Variable.createVariable("计量工资", new Double(100.0))); variables.add(Variable.createVariable("基本工资", new Double(100.0))); variables.add(Variable.createVariable("绩效分数", new Double(90.0))); variables.add(Variable.createVariable("岗位基数", new Double(5000))); [/code] 在TestCase中测试OK,没有问题。 执行前打印公式: [code="java"] expression : (角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0))) [/code] 转义符自动转换了。既然解决了问题,咱就开始前台设计了。 把上面的公式,带转义符的设置到前台。然后保存进数据库。在根据业务从数据库中读取出来。 这时候问题来了。转义字符一直存在。公式无法解析。提示有非法的字符:\ 测试很多次无果。强烈以为数据在保存进oracle的时候,编码被数据库给改变,导致java自身识别不了,无法自动解析这\"转义符号。 最后过次测试。把前台的公式编辑器里保存提交时候的公式写成如下: [code="java"] (角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0))) [/code] 然后,什么问题都没有了。 接着,我的疑问来了。 前台提交字符串: 角色=="测试" 我们都知道String test = ""; 这是java中的字符定义方式。 那再action中传递来的字符: 角色=="测试" 在获取的时候 难道不是 : "角色=="测试"" 这样的? 如果是这样的话,那字符不就被截断成:"角色==","测试" 这样2个字符? 这里的本来应该有的\" 哪里去了,自动处理还是? 反正不用转义符这样的变量:角色=="测试" 应该是无法申明或者赋值的吧。
android客户端与服务端交互数据问题
下面是我的LoginActivity package textview.exam; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import java.util.HashMap; import java.util.Map; public class LoginActivity extends Activity { Button okbutton; EditText id; EditText pass; String uname; HttpClient httpClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); final ActionBar actionBar = getActionBar(); actionBar.hide(); httpClient=new DefaultHttpClient(); okbutton=(Button)findViewById(R.id.ok); okbutton.setOnClickListener(loginokListener); id = (EditText)findViewById(R.id.login_id); pass = (EditText)findViewById(R.id.login_password); Button loginback=(Button)findViewById(R.id.backlogin); loginback.setOnClickListener(backloginListener); } View.OnClickListener backloginListener=new View.OnClickListener() { @Override public void onClick(View v) { Intent in = getIntent(); in.putExtra( "result","欢迎登录家友" ); LoginActivity.this.setResult(1, in); LoginActivity.this.finish(); } }; View.OnClickListener loginokListener=new View.OnClickListener() { @Override public void onClick(View v) { // 执行输入校验 if (validate()) // ① { // 如果登录成功 if (loginPro()) // ② { Log.i("LoginServlet","1561161"); Intent in = getIntent(); in.putExtra( "result", uname ); LoginActivity.this.setResult(0, in); LoginActivity.this.finish(); } else { Toast.makeText(LoginActivity.this, "用户名或密码错误!", Toast.LENGTH_LONG).show(); } } } }; private boolean loginPro() { // 获取用户输入的用户名、密码 String uid = id.getText().toString(); String upass = pass.getText().toString(); try { uname=loginyanzheng(uid, upass); Log.i("服务器的问题"+uname,""); // 如果uname不为空 if (uname!=null) { return true; } } catch (Exception e) { Toast.makeText(this,"服务器响应异常,请稍后重试!", Toast.LENGTH_LONG).show(); e.printStackTrace(); } return false; } // 对用户输入的用户名、密码进行校验 private boolean validate() { String uid = id.getText().toString().trim(); if (uid.equals("")) { Toast.makeText(this,"账号不许为空!", Toast.LENGTH_LONG).show(); return false; } String upass = pass.getText().toString().trim(); if (upass.equals("")) { Toast.makeText(this,"请输入密码!", Toast.LENGTH_LONG).show(); return false; } return true; } // 定义发送请求的方法 private String loginyanzheng(String id, String pass) throws Exception { // 使用Map封装请求参数 Map<String, String> map = new HashMap<>(); map.put("id", id); map.put("pass", pass); Log.i("按时吃饭三coin啊搜in粗偶i","1"); // 定义发送请求的URL String url = HttpUtil.BASE_URL+"LoginServlet"; Log.i("爱上擦擦实现擦拭小","2"); // 发送请求 return HttpUtil.postRequest(url, map); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { Intent in = getIntent(); in.putExtra( "result", "欢迎登录家友"); LoginActivity.this.setResult(1, in); LoginActivity.this.finish(); } return false; } //返回动画 protected void onPause() { super.onPause(); overridePendingTransition(R.anim.in_from_down, R.anim.out_to_up); } } 下面是我HttpUitl package textview.exam; import android.util.Log; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class HttpUtil { // 创建HttpClient对象 public static HttpClient httpClient = new DefaultHttpClient(); public static final String BASE_URL = "http://192.168.1.88:8888/auction/android/"; /** * * @param url 发送请求的URL * @return 服务器响应字符串 * @throws Exception */ public static String getRequest(final String url) throws Exception { FutureTask<String> task = new FutureTask<String>( new Callable<String>() { @Override public String call() throws Exception { // 创建HttpGet对象。 HttpGet get = new HttpGet(url); // 发送GET请求 HttpResponse httpResponse = httpClient.execute(get); // 如果服务器成功地返回响应 if (httpResponse.getStatusLine() .getStatusCode() == 200) { // 获取服务器响应字符串 String result = EntityUtils .toString(httpResponse.getEntity()); return result; } return null; } }); new Thread(task).start(); return task.get(); } /** * @param url 发送请求的URL * @param请求参数 * @return 服务器响应字符串 * @throws Exception */ public static String postRequest(final String url , final Map<String ,String> rawParams)throws Exception { FutureTask<String> task = new FutureTask<String>( new Callable<String>() { @Override public String call() throws Exception { // 创建HttpPost对象。 HttpPost post = new HttpPost(url); // 如果传递参数个数比较多的话可以对传递的参数进行封装 List<NameValuePair> params = new ArrayList<>(); for(String key : rawParams.keySet()) { //封装请求参数 params.add(new BasicNameValuePair(key , rawParams.get(key))); } // 设置请求参数 post.setEntity(new UrlEncodedFormEntity( params, "gbk")); // 发送POST请求 HttpResponse httpResponse = httpClient.execute(post); Log.i("所发生的初三大四","按时打算"); // 如果服务器成功地返回响应 if (httpResponse.getStatusLine() .getStatusCode() == 200) { // 获取服务器响应字符串 String result = EntityUtils .toString(httpResponse.getEntity()); return result; } Log.i("暗示法撒旦吃撒多长","按时打算"); return null; } }); new Thread(task).start(); return task.get(); } } 下面是我服务端Servlet代码 package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.factory.DAOFactory; import vo.Users; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); request.setCharacterEncoding("utf-8"); Users users = new Users(); //客户端的账号以及密码 users.setUserid(request.getParameter("id")); users.setUpwd(request.getParameter("pass")); try { if(DAOFactory.getUserDAOInstance().findLogin(users)){ request.getSession().setAttribute("name", users.getUname()); //request.getRequestDispatcher("index.jsp").forward(request, response); //向客户端发送字符串 response.getWriter().println("aisd"); System.out.println("登录成功"); } else{ response.getWriter().print("对不起,用户名、密码不符合!"); System.out.println("对不起,用户名、密码不符合!"); } } catch (Exception e) { e.printStackTrace(); } } }
综合人事管理系统登录模块出现debug error
一个星期都没有解决,我都哭了,一个小项目就止步这了,请各位大神帮帮我吧..... ![图片说明](https://img-ask.csdn.net/upload/201610/08/1475891359_978636.png) ![怎么样都取消不了,帮帮忙啊](https://img-ask.csdn.net/upload/201610/08/1475891407_89270.png) //我也只能附加个大概,我百度云有完整代码http://pan.baidu.com/s/1jIg6DJg void CLoginDlg::OnOK() //这是登录模块 { // TODO: Add extra validation here CDialog::OnOK(); UpdateData(TRUE);//把对话框中的值传递到变量中 //检查数据有效性 if(m_username=="") { MessageBox("请输入用户名:"); return; } if(m_pwd=="") { MessageBox("请输入密码:"); return; } //定义CUsers对象,用于从数据库Users中读取数据 CUsers user; user.getdata(m_username);//从数据库读取到c++的类中 //如果读取的数据与用户输入数据不同则返回 if(user.getpwd()!=m_pwd) //getpwd从类中返回列中的值 { MessageBox("用户输入不正确!"); return; } CDialog::OnOK(); } CUsers::CUsers()//这是把users表封装成类 { username=""; pwd=""; user_type=0; } CString CUsers::getusername() //从类中返回username { return username; } CString CUsers::getpwd() { return pwd; } int CUsers::getuser_type() { return user_type; } void CUsers::set_username(CString cusername) { username=cusername; } void CUsers::set_pwd(int cpwd) { pwd=cpwd; } void CUsers::set_user_tupe(int cusertype) { user_type=cusertype; } void CUsers::getdata(CString cusername) //从数据库读取到c++【不能用cusername,因为是从数据库读】 { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); _bstr_t vSQL; vSQL="select *from users where username='cusername'";//字符串的sql语句 //执行select语句 _RecordsetPtr m_precordset; m_precordset=m_adoconn.GetRecordSet(vSQL); //返回结果集到m_precordset //返回各列的值 if(m_precordset->adoEOF==1) CUsers(); else { //atoi()把int改为CString username=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("username"); //getcollect()从结果集中读取相应列的值,返回值为_variant_t型 pwd=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("pwd"); user_type=atoi((LPCTSTR)(_bstr_t)m_precordset->GetCollect("user_type")); } //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_insert() { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="insert into users values(username,pwd,user_tupe))"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_update_pwd(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="updata users set pwd=pwd where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_delete(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="delete from users where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } BOOL CFwzlDlg::OnInitDialog() //这是在主对话框初始化时候调用登录模块 { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here _variant_t vIndex; vIndex=long(0); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0); //_variant_t类型在 COMDEF.H中 vIndex=long(1); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80); vIndex=long(2); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(40); vIndex=long(3); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(4); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(90); CLoginDlg dlg; extern CUsers curUser; //c++声明必须在前面 if(dlg.DoModal()!=IDOK) //domadal()函数返回对话框的传递的消息 OnOK(); else //读取用户信息到 全局类curUser对象 curUser.getdata(dlg.m_username); return TRUE; // return TRUE unless you set the focus to a control } void ADOConn::OnInitDBConnect() //以下是连接数据库的函数 { //初始化ole/com库环境,为访问ado接口做准备 ::CoInitialize(NULL); //I的大写,和l的小写尽然一样!!!!!!!!!!!!!!!!!!!!!!!! try { //创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); //设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect="Provider=SQLOLEDB;Server=LIQI;Database=fwzl;uid=sa;pwd=qi7250831;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } //捕捉异常 catch(_com_error e) { //显示错误信息 AfxMessageBox(e.Description()); } } _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { //连接数据库,如果connection对象为空,则重新连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); //创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); //用来获取 某种结构、接口及其指针、引用、变量 所关联的GUID,类似于某些语言中获取类型 typeof 这样的操作。 //取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//源,activestring,游标类型,锁定类型,option(source参数的类型) } //捕捉异常 catch(_com_error e) { //显示出错信息 AfxMessageBox(e.Description()); } //返回结果集 return m_pRecordset; } BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try { //是否已经连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { AfxMessageBox(e.Description()); return false; } }//程序调用Connetion对象的Execute方法执行SQL语句,不返回结果集,如果执行成功,则返回true void ADOConn::ExitConnect() { //关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset->Close(); m_pConnection->Close(); //释放环境 ::CoUninitialize(); //关闭ole/com数据库,释放资源 }
C语言写入数据到二进制文件失败
# 相关代码如下 # 我在add()调用lessondatewrite()写进去了 #但是lessondateltater()调用lessondatewrite()没写进去 # 调试结果![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169947_50238.png) #运行结果 英语行的 40 应该变成39 ![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169992_687847.png) ``` typedef struct //定义一个Lesson类型的结构体 { char name[50]; char techer[50]; char location[50]; char time[50]; int number; }LESSON; /*课程结构体参数 课程名 char 50字节 授课老师 char 50字节 位置 char 50字节 开课时间 char 50字节 座位数 int 4字节 结构体大小总计 204字节*/ LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针 { fflush(fl);//刷新缓存区 使将要输入的数据写入硬盘 一次性输入大量数据时使用 避免输入失败 fwrite(&date,sizeof(LESSON),1,fl); } void add()//添加一个课程数据 { FILE *lessondate; LESSON lesson={0};// 声明一个LESSON类型的变量为lesson if((lessondate=fopen("lessondate","rb+"))==NULL)//若文件不存在,则建立文件 { lessondate=fopen("lessondate","wb+"); //rb+打开二进制文本文件,允许读写,若不存在返回空 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx),座位数(各数据以空格隔开,回车结束)\n"); scanf("%s %s %s %s %d",&lesson.name,&lesson.techer,&lesson.location,&lesson.time,&lesson.number); //scanf在接收字符串时 不会接收空白符(空格与回车) 逗号或其他都能接收 //%s不能使用char 而是char[] fseek(lessondate,0L,SEEK_END); lessondatewrite(lessondate,lesson); fclose(lessondate); system("cls"); admin(); } void lessondatelater(int choose) { FILE *lessondate; LESSON lesson={0}; int i; lessondate=fopen("lessondate","rb+"); for(i=0;i<choose;i++) { lesson=lessondateread(lessondate);//给读取函数传递一个文件指针 假定有是三个结构体A B C 循环结束后光标在C前面B后面 } fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lesson=lessondateread(lessondate);//读取这个结构体数据 读取B的数据 此时光标前进到C前面 lesson.number--;//修改结构体数据 fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lessondatewrite(lessondate,lesson);//写入修改后结构体数据 覆盖B } ```
跨jsp页面传递table指定行数据
[size=xx-small][/size]现在有一张表格table,如图一所示,其中有一个操作列,添加了一个链接“预审”,我想通过点击这个链接进入另外一个jsp页面,同时把按钮左在行的几格单元格数据传递到这个页面,如图二所示的名称、状态、日期等。我这个表格是用dwr的addrows方法动态生成的。 [color=red]html代码[/color] [code="java"] <body onload = "init()"> <table> <tr> <table border = "0" width = '200' height = '20' > <thead> <tr class = "tabTitle"> <th><a href="#" onclick="tabPageControl(0)">未审核项目</a></th> <th><a href="#" onclick="tabPageControl(1)">已审核项目</a></th> </tr> </thead> </table> </tr> <tr> <td> <div id="tabContents"> <table id="tabPagesContainer" style="BORDER-RIGHT: gainsboro 1px; BORDER-TOP: gainsboro 1px; BORDER-LEFT: gainsboro 1px; COLOR: black; BORDER-BOTTOM: gainsboro 1px; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: white" cellSpacing=0 cellPadding=4 rules=cols border=1> <thead> <tr style="FONT-WEIGHT: bold; COLOR: white; BACKGROUND-COLOR: #2b6fbd"> <th scope=col width="15%"> 项目名称 </th> <th scope=col width="10%"> 提交人 </th> <th scope=col width="12%"> 项目类别 </th> <th scope=col width="12%"> 项目状态 </th> <th scope=col width="12%"> 提交时间 </th> <th scope=col width="12%"> 附件 </th> <th scope=col width="12%"> 审核记录 </th> <th scope=col width="15%"> 操作 </th> </tr> </thead> <tbody id="peoplebody" class="tabPageSelected"> </tbody> <tbody id="peoplebody2" class="tabPageUnSelected"> </tbody> </table> </div> </td> </tr> </body> [/code] [color=red]javasc代码[/color] [code="java"] <script type="text/javascript"> function showList(tableIndex) { var sql0 = "select distinct XMMC,TBR,XMLB,XMZT,SQSJ from BASQB as B left join JWYSB as J on (B.XM_ID=J.XM_ID) where (XMZT='备案预审'or XMZT='变更预审') and J.SHZT='未审核'"; var sql1 = "select distinct XMMC,TBR,XMLB,XMZT,SQSJ from BASQB as B left join JWYSB as J on (B.XM_ID=J.XM_ID) where (XMZT='备案预审'or XMZT='变更预审') and J.SHZT='已审核'"; var sql =""; if(tableIndex==0) sql=sql0; else sql=sql1; var msg = tableIndex; var tableId =""; hzglDao.findXmshInfo(sql, function(stu){ //dwr调用后台java代码 callbackFunc(stu,msg,tableId); }); var callbackFunc = function(stu,msg,tableId){ if(msg==0){tableId = "peoplebody"} else if(msg==1){tableId = "peoplebody2"} for(var i=0;i<stu.length;i++){ var cellfuncs = [ function(item){return item.xmmc;}, function(item){return item.tbr;}, function(item){return item.xmlb;}, function(item){return item.xmzt;}, function(item){return item.sqsj;}, function(item){ var html = "<a href='#' onClick='_view();return false'>查看 </a> "; return html; }, function(item){ var html = "<a href='#' onClick='_view();return false'>查看 </a> "; return html; }, function(item){ var html = "<a href='#' onClick='_view1();return false'>预审 </a>"; return html; } ]; //在每一次点击按钮前先删除现在表格中的数据, DWRUtil.removeAllRows(tableId); //调用addRows方法,填充表格. DWRUtil.addRows(tableId,stu,cellfuncs); }//for }//callbackFunc }//showList function tabPageControl(n) { for (var i = 0; i < tabPagesContainer.tBodies.length; i++) { tabPagesContainer.tBodies[i].className = "tabPageUnSelected"; } tabPagesContainer.tBodies[n].className = "tabPageSelected"; if(n==0) showList(0); else if(n==1) showList(1); else if(n==2) showList(2); } function _view1() { window.location.href ='xmysInfoView.jsp'; } function _view2() { window.location.href ='xmshInfoView.jsp'; } function init() { showList(0); } </script> [/code] [b]问题补充:[/b] [code="java"] function(item){ var xmmc = item.xmmc; var html = "<a href='#' onClick='_view1("+xmmc+");return false'>预审 </a>"; return html; }[/code] 我把这段代码改了一下,这样点击某一行的时候获取该行的项目名称的内容,现在点第一行的时候IE报错提示房产项目4未定义,点击第二行IE提示教育项目7未定义。我想现在的问题可能是给“_view1()”传参数时字符串格式有问题,不知怎么改?
这个程序的实现原理问题,请您回答的越详细越好!万分感谢
(2)配置文件说明 applicationContext.xml文件的内容如下: view plaincopy to clipboardprint? <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <import resource="classpath*:META-INF/cxf/cxf.xml" /> <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /> <import resource="classpath:services.xml" /> </beans> services.xml文件的内容如下: view plaincopy to clipboardprint? <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:endpoint id="webServiceHelloWorld" address="/HelloWorld" implementor="com.cxf.test.interfaces.HelloWorldImpl"/> </beans> web.xml文件的内容如下: view plaincopy to clipboardprint? <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>cxfservice</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> 3)发布的HelloWord服务说明 要发布的HelloWorld服务的接口定义文件com.cxf.test.interfaces.HelloWorld: package com.cxf.test.interfaces; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @WebService public interface HelloWorld { /* * 一个简单的方法,返回一个字符串 * * @param hello * * @return */ String say(String hello); /** * 稍微复杂一些的方法,传递一个对象给服务端处理 * * @param user * @return */ String sayUserName(@WebParam(name = "user") UserDTO user); /** * 最复杂的方法,返回一个List封装的对象集合 * * @return */ public @WebResult(partName = "o") ListObject findUsers(); } 要发布的HelloWorld服务的接口实现类com.cxf.test.interfaces.HelloWorldImpl: view plaincopy to clipboardprint? package com.cxf.test.interfaces; import java.util.ArrayList; import javax.jws.WebService; /** * @author zhangzk * */ /** * WebService实现类. * * 使用@WebService指向Interface定义类即可. */ @WebService(endpointInterface = "com.cxf.test.interfaces.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayUserName(UserDTO user) { return "hello " + user.getName(); } public String say(String hello) { return "hello " + hello; } public ListObject findUsers() { ArrayList<Object> list = new ArrayList<Object>(); list.add(instancUser(1, "lib")); list.add(instancUser(2, "mld")); list.add(instancUser(3, "lq")); list.add(instancUser(4, "gj")); ListObject o = new ListObject(); o.setList(list); return o; } private UserDTO instancUser(Integer id, String name) { UserDTO user = new UserDTO(); user.setId(id); user.setName(name); return user; } } findUsers()接口返回的参数对象定义文件com.cxf.test.interfaces.ListObject: view plaincopy to clipboardprint? package com.cxf.test.interfaces; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "listObject", propOrder ={ "list" }) public class ListObject { @XmlElement(nillable = true) protected List<Object> list; /** * Gets the value of the list property. * * <p> * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to the returned list will be * present inside the JAXB object. This is why there is not a <CODE>set</CODE> method for the list property. * * <p> * For example, to add a new item, do as follows: * * <pre> * getList().add(newItem); * </pre> * * * <p> * Objects of the following type(s) are allowed in the list {@link Object } * * */ public List<Object> getList() { if (list == null) { list = new ArrayList<Object>(); } return this.list; } public void setList(ArrayList<Object> list) { this.list = list; } } UserDTO instancUser(Integer id, String name)接口返回的对象定义文件com.cxf.test.interfaces.UserDTO: view plaincopy to clipboardprint? package com.cxf.test.interfaces; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlType; /** * Web Service传输User信息的DTO. * * 分离entity类与web service接口间的耦合,隔绝entity类的修改对接口的影响. 使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定. * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "User") public class UserDTO { protected Integer id; protected String name; public Integer getId() { return id; } public void setId(Integer value) { id = value; } public String getName() { return name; } public void setName(String value) { name = value; } } http://127.0.0.1:8080/cfx_spring_webservice/services/HelloWorld?wsdl 得出的结果为 <?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions name="HelloWorldImplService" targetNamespace="http://interfaces.test.cxf.com/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://interfaces.test.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <wsdl:types> - <xs:schema elementFormDefault="unqualified" targetNamespace="http://interfaces.test.cxf.com/" version="1.0" xmlns:tns="http://interfaces.test.cxf.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="findUsers" type="tns:findUsers" /> <xs:element name="findUsersResponse" type="tns:findUsersResponse" /> <xs:element name="say" type="tns:say" /> <xs:element name="sayResponse" type="tns:sayResponse" /> <xs:element name="sayUserName" type="tns:sayUserName" /> <xs:element name="sayUserNameResponse" type="tns:sayUserNameResponse" /> - <xs:complexType name="findUsers"> <xs:sequence /> </xs:complexType> - <xs:complexType name="findUsersResponse"> - <xs:sequence> <xs:element minOccurs="0" name="return" type="tns:listObject" /> </xs:sequence> </xs:complexType> - <xs:complexType name="listObject"> - <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="list" nillable="true" type="xs:anyType" /> </xs:sequence> </xs:complexType> - <xs:complexType name="say"> + <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> </xs:sequence> </xs:complexType> - <xs:complexType name="sayResponse"> - <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string" /> </xs:sequence> </xs:complexType> - <xs:complexType name="sayUserName"> - <xs:sequence> <xs:element minOccurs="0" name="user" type="tns:User" /> </xs:sequence> </xs:complexType> - <xs:complexType name="User"> - <xs:sequence> <xs:element minOccurs="0" name="id" type="xs:int" /> <xs:element minOccurs="0" name="name" type="xs:string" /> </xs:sequence> </xs:complexType> - <xs:complexType name="sayUserNameResponse"> - <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> - <wsdl:message name="sayUserName"> <wsdl:part element="tns:sayUserName" name="parameters" /> </wsdl:message> - <wsdl:message name="say"> <wsdl:part element="tns:say" name="parameters" /> </wsdl:message> - <wsdl:message name="findUsersResponse"> <wsdl:part element="tns:findUsersResponse" name="parameters" /> </wsdl:message> - <wsdl:message name="findUsers"> <wsdl:part element="tns:findUsers" name="parameters" /> </wsdl:message> - <wsdl:message name="sayUserNameResponse"> <wsdl:part element="tns:sayUserNameResponse" name="parameters" /> </wsdl:message> - <wsdl:message name="sayResponse"> <wsdl:part element="tns:sayResponse" name="parameters" /> </wsdl:message> - <wsdl:portType name="HelloWorld"> - <wsdl:operation name="findUsers"> <wsdl:input message="tns:findUsers" name="findUsers" /> <wsdl:output message="tns:findUsersResponse" name="findUsersResponse" /> </wsdl:operation> - <wsdl:operation name="say"> <wsdl:input message="tns:say" name="say" /> <wsdl:output message="tns:sayResponse" name="sayResponse" /> </wsdl:operation> - <wsdl:operation name="sayUserName"> <wsdl:input message="tns:sayUserName" name="sayUserName" /> <wsdl:output message="tns:sayUserNameResponse" name="sayUserNameResponse" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns:HelloWorld"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - <wsdl:operation name="findUsers"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="findUsers"> <soap:body use="literal" /> </wsdl:input> - <wsdl:output name="findUsersResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="say"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="say"> <soap:body use="literal" /> </wsdl:input> - <wsdl:output name="sayResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="sayUserName"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="sayUserName"> <soap:body use="literal" /> </wsdl:input> - <wsdl:output name="sayUserNameResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="HelloWorldImplService"> - <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort"> <soap:address location="http://127.0.0.1:8080/cfx_spring_webservice/services/HelloWorld" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 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孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了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...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问

相似问题

6
书上说,strcpy函数。弥补了字符串不能直接赋值的问题。
4
关于html字符串拼接的问题
2
Unity C#通过动态链接库调用C++传递中文字符串乱码问题。
99
只要回答,都给C币,请问怎么实现javascript对字符串和数字相互转换?
9
Vue前台传的字符串数组后台接收不到
16
java,现在有一个字符串数组希望转成long数组,有什么好方法?
3
怎么样对一个遍历一个不规则字符串数组,找到每列中最长字符串的大小
9
java中字符串问题!!
2
jacascrup怎么对不同类型的字符串进行相加操作,字符串数组的相加怎么加?
4
怎么javascrpt语言实现将一个字符串转换为多个字符串构成的数组并且判断每个字符串的数组?
1
javascript多维数据数组的转换是怎么进行循环和判断的,怎么直接判断转换以后的字符串?
1
思路解答 面试题 字符串替换函数
3
js字符串数组循环传入span标签
1
c# 在命令行中输入任意10个字符串,根据字符串类型将输入的数据放入到不同数组中,最后将数组进行排序
1
编写函数del(char str[])将字符串str中的除头部前导*和后字符数删除后的字符串,
3
C#如何把带小数点的字符串转化为字节数组,并且把每一位分割为单字节发送?
1
如何将字符串中所有单词摘出来到一个新的二维数组中
2
从txt读入字符串然后转换为字符数组(debug小问题)
2
go为什么不能获取字符串某个字符地址?
1
C语言字符串数组问题:将文件中的多行文本存储到数组中