C#中如何调用构造函数时候,把构造函数的实参用键盘输入?

string b=Console.ReadLine();

student a = new student(a, "nan", 18);

这样是错误的,为什么呢,以及如何实践构造函数的实参用键盘输入呢?

c#

1个回答

student a = new student(b, "nan", 18);
你写成了a

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
构造函数能够从键盘初始化么?
#include <iostream> using namespace std; class shape //虚基类 {public: double x; double y; shape() {double a,b; cin>>a>>b; x=a; y=b;} //构造函数 virtual void area()=0; virtual void print()=0; }; class triangle:public shape //三角形 { double a; public: void area() //三角形面积 { a=0.5*x*y; } void print() //三角形输出函数 { cout<<"TriangleArea="<<a<<endl; } }; class rectangle:public shape //矩形 { double a; public:void area() { a=x*y; } void print() { cout<<"RectangleArea="<<a<<endl; } }; class circle:public shape //圆 { double a; public: void area() { a=3.14*x*x; } void print() { cout<<"CiroleArea="<<a<<endl; } }; int main() { shape *p; triangle a; rectangle b; circle c; p=&a; p->area(); p->print(); p=&b; p->area();p->print(); p=&c; p->area();p->print(); return 0; } 利用C++的多态性,设计一快递运费计算软件。 货物由北京可通过快递公司运往天津、上海、太原、广州、昆明、新疆六个城市,分别用1、2、3、4、5、6作为它们编号。运送货物的重量分为1、2、3公斤。快递公司有四家:E通宝、顺风、EMS和圆通,编号为1、2、3、4。不同城市、不同重量、不同的快递公司所费用由表1给出。当输入快递公司编号、城市编号和货物重量时,屏幕输出货物运送快递公司名称、到达的城市及费用。编程要求如下: 1.定义一基类为快递公司,类中定义“城市编号”、货物个数、重量等成员,成员函数有基本成员输出函数及两个纯虚函数:求运输费用函数和输出信息函数。 2.分别定义各快递公司的派生类,在类中参照表中提供的数据,根据自己的实际,编写各自的运输费用函数和输出信息函数。 3.用实例测试。在主函数中定义一基类的指针数组,使这些指针分别指向不同的快递公司。 问题如上,不知道为啥运行出来输入x和y之后无反应,是不是构造函数初始化的方法不对??
C++急求复数类已自行解决
## 求前辈写上思路和注释,我还要看的。 一、编写复数类CMyComplex。实现各种常用构造函数,实现整数、实数向复数的转化函数,实现整数、实数和复数以及复数之间的加、减、乘、除各种运算,并编写输出的成员函数。在主函数中测试。 设计一个MyComplex(复数)类 1、基本信息:实部、虚部; 其中:基本信息为private属性,成员函数为public属性; 2、MyComplex类有多个构造函数:缺省构造函数、带参数的构造函数、带默认参数的构造函数 3、基本功能: 1)若干set和get函数,用来设置和获取复数; 2)可以从键盘输入复数; 3)定义成员函数,分别计算两个复数的和、差、积、商并化简; 4)其他成员函数,完成你想加进去的功能 [实验提示] 1、注意带参数的构造函数和带默认参数的构造函数的声明与定义; 2、从键盘输入基本信息,调用带参数的构造函数生成分数对象; 3、当输入数据为不合理数据时,提示用户输入错误; [测试数据] 自己选定几个复数在主函数中进行功能测试,尽量覆盖每种可能的情况。
c++对象数组 构造函数
题目是一个打印工资单(payrate*hours),数组里有七个对象,需要每个对象的输入时间(hour)乘payRate,最后返回到payTotal里,可是不知道怎么把键盘输入的存入对象数组里,而且总是报错,而且后面函数里的变量好像也有点问题,没用到数组,不知道怎么改啊,急求解答!!!!!非常感谢!! 这是main函数的cpp ``` #include <iostream> #include <iomanip> #include "Payroll.h" using namespace std; int main() { const int NUM_EMP = 7; double value; int num; Payroll employee[NUM_EMP]; cout << "Enter the payRate for the employee: "; cin >> num; for(int i=0;i<NUM_EMP;i++) { cout << "Employee" << i+1 << " : " << "Enter the numbers of hours: "; cin >> employee[i]; } Payroll item(); cout << setprecision(2) << fixed; for(int k=0;k<NUM_EMP;k++) { cout << "The amount of gross pay for employee" << k+1 << ": " << employee[k].getTotalPay << endl; } return 0; } ``` 下面是Payroll.cpp ``` #include "Payroll.h" // Needed for the Rectangle class #include <iostream> // Needed for cout #include <cstdlib> // Needed for the exit function using namespace std; Payroll::Payroll() { hours = 0.0; payRate = 0.0; } void Payroll::setHours(double hou) { if(hou <= 60.00) hours = hou; else { cout << "Please Enter the valid numbers: "; exit(EXIT_FAILURE); } } void Payroll::setPayRate(double pay) { payRate = pay; } ``` 最后是payroll.h ``` #ifndef PAYROLL_H #define PAYROLL_H class Payroll { private: double hours; double payRate; public: Payroll(); void setHours(double); void setPayRate(double); double getHours() const { return hours; } double getPayRate() const { return payRate; } double getTotalPay() const { return hours * payRate; } }; #endif ```
为什么键盘输入字符串和文件导入字符串都有错?错误应该怎么改?
``` #include <iostream.h> #include <windows.h> #include <string> #include<fstream> using namespace std; class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(char &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(char &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(char &item);//把数据压进栈 bool pop();//出栈 bool pop(char &item);//把数据弹出栈,返回 bool top(char &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(char &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(char &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(char &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::pop(char &item)//出栈,把栈顶数据弹返回去 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 item=usednodep->data;//把数据保留下来,返回去 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(char &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /* 定义一个功能类SymbolMatching */ class SymbolMatching { private: Stack *stack; public: SymbolMatching();//构造函数 ~SymbolMatching();//析构函数 bool manualinputdatabase(char *database);//人工输入数据信息 bool fileguidedatabase(char *filename);//文件导入数据信息 }; SymbolMatching::SymbolMatching()//构造函数 { stack=new Stack; } SymbolMatching::~SymbolMatching()//析构函数 { delete stack; } bool SymbolMatching::manualinputdatabase(char *database)//人工输入数据信息 { int i=0; char match,symbol; bool is_match=true; while(database[i]!='\0'&&is_match) { symbol=database[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(database[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } bool SymbolMatching::fileguidedatabase(char *filename)//文件导入数据信息 { int i=0; char match,symbol; bool is_match=true; while(filename[i]!='\0'&&is_match) { symbol=filename[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(filename[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } /* 定义一个实现链栈功能的菜单处理类interfacebase */ class interfacebase { private: SymbolMatching SymbolMatchingonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* interfacebase类的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"链式堆栈实现括号匹配判断的功能菜单"<<endl; cout<<"=================================="<<endl; cout<<"1.人工输入数据信息"<<endl; cout<<"2.文件导入数据信息"<<endl; cout<<"0.退出"<<endl; cout<<"=================================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { string str; char temp; cout<<"输入字符串,按回车键结束输入:"<<endl; while((temp=cin.get())!='\n') { str +=temp; } const int LEN =str.length(); char* database = new char[LEN];//根据输入字符串的长度,创建字符数组 for(int i = 0;i<LEN;i++) //将字符串保存到字符数组中 { database[i]=str[i]; } SymbolMatchingonface.manualinputdatabase(database); delete database; } break; case 2: { ifstream in("data.txt"); char data,j,*filename=new char[100]; int num=0; while(!in.eof()) { in>>data; filename[num]=data; cout<<filename[num]; num++; } cout<<endl; SymbolMatchingonface.fileguidedatabase(filename); delete filename; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacebasenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacebasenow.clearscreen();//清屏 while(1)//永真循环 { interfacebasenow.showmenu();//显示菜单 menuchoice=interfacebasenow.userchoice();//获取用户的选择 interfacebasenow.processmenu(menuchoice);//处理用户的选择 system("pause"); interfacebasenow.clearscreen();//清屏 } }//主函数结束 ```
C++代码运行中出现无法解析的外部命令?
代码的作用是定义一个点类Point,派生出圆类和圆柱体类Circle和Cylinder 功能是输出圆的周长(通过定义的Cirfer()函数)、面积(定义有Area()函数)和圆柱体的表面积和体积 ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570977934_645492.jpg) ``` //Shape.h #ifndef SHAPE_H #define SHAPE_H #include<iostream> #define PI 3.1415926 using namespace std; class Point { public: Point(double X, double Y); //构造函数 void Set(double X, double Y); //设置点值 double Getx()const; //获取横坐标 double Gety()const; //获取纵坐标 virtual void Output(ostream &out) const; //输出函数 virtual void Input(istream &in); //输入函数 protected: double x, y; }; class Circle :public Point { public: Circle(const Point &p, double R); void Set(double X, double Y, double R); void Set(const Point &p, double R); double Getr()const; double Area(); //计算圆的面积 double Cirfer(); //计算圆的周长 void Output(ostream &out)const; void Input(istream &in); protected: double r; }; class Cylinder :public Circle { public: Cylinder(const Circle& c, double H); void Set(const Circle& c, double H); double Geth()const; double Area(); //计算圆柱体的表面积 double Volume(); //计算圆柱体体积 void Output(ostream& out)const; void Input(istream& in); protected: double h; }; ostream& operator<<(ostream& out, const Point& p); //输出运算符重载 istream& operator>>(istream& in, const Point& p); //输入运算符重载 #endif //Shape.cpp #include<iostream> #include"Shape.h" using namespace std; ostream & operator<<(ostream &out, const Point &p) //输出运算符重载 { p.Output(out); return out; } istream & operator>>(istream &in, Point &p) //输入运算符重载 { p.Input(in); return in; } //Point类成员函数 Point::Point(double X, double Y) :x(X), y(Y) {} void Point::Set(double X, double Y) { x = X, y = Y; } double Point::Getx()const { return x; } double Point::Gety()const { return y; } void Point::Output(ostream &out)const { out << '(' << x << "," << y << ')'; } void Point::Input(istream& in) { char str[80]; in.getline(str, 80, '('); in.getline(str, 80, ','); x = atof(str); //atof()是字符从ASCII转为float型数据 in.getline(str, 80, ')'); y = atof(str); } //Circle类成员函数 Circle::Circle(const Point& p, double R) : Point(p), r(R) {} void Circle::Set(double X, double Y, double R) { x = X, y = Y, r = R; } void Circle::Set(const Point& p, double R) { Point::Set(p.Getx(), p.Gety()); r = R; } double Circle::Getr()const { return r; } double Circle::Area() //圆面积 { return PI * r * r; } double Circle::Cirfer() //圆周长 { return 2 * PI * r; } void Circle::Output(ostream& out)const { out << '[' << '(' << x << "," << y << ')' << "," << r << ']'; } void Circle::Input(istream& in) { char str[80]; in.getline(str, 80, '['); Point::Input(in); in.getline(str, 80, ','); in.getline(str, 80, ']'); r = atof(str); } //Cylinder类成员函数 Cylinder::Cylinder(const Circle& c, double H) :Circle(c), h(H) {} void Cylinder::Set(const Circle& c, double H) { Circle::Set(Getx(),Gety(),Getr()); h = H; } double Cylinder::Geth()const { return h; } double Cylinder::Area() //圆柱体表面积 { return PI*r*r* 2+2*PI*r*h; } double Cylinder::Volume() //圆柱体体积 { return PI*r*r* h; } void Cylinder::Output(ostream& out)const { out << '{'; Circle::Output(out); out << "," << h << '}'; } void Cylinder::Input(istream& in) { char str[80]; in.getline(str, 80, '{'); Circle::Input(in); in.getline(str, 80, ','); in.getline(str, 80, '}'); h = atof(str); } //test.cpp #include<iostream> #include"Shape.h" int main() { Point p(5, 8); //初始化各个类的数据成员 Circle c(p, 10); Cylinder y(c, 8); cout << c << "\tArea:" << c.Area() << "\t\tCircumference" << c.Cirfer() << '\n' << y << "\tArea:" << y.Area() << "\tVolume:" << y.Volume() << endl; cout << "\n请注意键盘输入格式。"; cout << "\n包括圆括号、方括号、花括号、逗号,"; cout << "其中可以插入或不插入空格、<Tab>、换行。" << endl; cout << "请输入一个点 (x, y) : "; cin >> p; cout << "结果:" << p << endl; cout << "请输入一个圆 [(x, y), r] : "; cin >> c; cout << "结果:" << c << endl; cout << "请输入一个圆柱 {[(x, y), r], h} : "; cin >> y; cout << "结果:" << y << endl; return 0; } ```
大神帮忙 谢谢
/** *############################################################################## * * [ 项目名 ] : 阳光酒店管理系统 * [ 公司名 ] : 清华IT * [ 模块名 ] : 系统登陆窗口 * [ 文件名 ] : Login.java * [ 相关文件 ] : * [ 文件实现功能] : 系统登陆窗口 * [ 作者 ] : 顾俊 * [ 版本 ] : 1.1 * ---------------------------------------------------------------------------- * [ 备注 ] : * ---------------------------------------------------------------------------- * [ 修改记录 ] : * * [ 日 期 ] [版本] [修改人] [修改内容] * 2006/04/02 1.0 顾俊 创建 * 2006/04/06 1.1 顾俊 增加注释 * 2006/04/19 1.2 顾俊 自动记录登录日志 * ##-------------------------------------------------------------------------- * 版权所有(c) 2006-2007, SunshineSOFT Corporation * --------------------------------------------------------------------------## * * [ 函数说明 ] : * * [## public Login() {} ]: * 功能: 构造函数 组建登录窗口 * * [## private void buildCenter() {} ]: * 功能: 组建用户名密码面板,仅类内使用 * * [## private void quit() {} ]: * 功能: 关闭系统函数,仅类内使用 * * [## private void dengLu() {} ]: * 功能: 密码验证通过,进入主操作界面,仅类内使用 * * [ 遗留问题 ] : * *############################################################################## */ package com.sunshine.login; import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import com.sunshine.sunsdk.sql.*; import com.sunshine.sunsdk.swing.*; import com.sunshine.sunsdk.system.*; import com.sunshine.mainframe.*; public class Login extends JFrame implements ActionListener, KeyListener, ItemListener, FocusListener { JLabel top, bott; JComboBox cb; JPasswordField pf; JButton bt1, bt2; JPanel panelMain, panelInfo; String clue = " 提 示 : "; int flag = 0; //登记次数记数器 /**=======================================================================** * [## public Login() {} ]: 构造函数 * 参数 :无 * 返回值 :无 * 修饰符 :public * 功能 :组建登录窗口 **=======================================================================** */ public Login() { super("系 统 登 录"); top = new JLabel (new ImageIcon("pic/login_top.gif")); bott = new JLabel(); panelMain = new JPanel(new BorderLayout(10, 10)); bott.setBorder(new LineBorder (new Color(184, 173, 151))); buildCenter(); panelMain.add("North", top); panelMain.add("South", bott); panelMain.add(panelInfo); //加事件监听 bt1.addActionListener(this); bt2.addActionListener(this); bt1.addFocusListener (this); bt2.addFocusListener (this); bt1.addKeyListener (this); bt2.addKeyListener (this); cb.addItemListener (this); cb.addFocusListener(this); pf.addFocusListener(this); cb.addKeyListener (this); pf.addKeyListener (this); //加窗口监听 new WindowAdapter适配器类 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { quit(); }//End windowClosing }); this.setContentPane(panelMain); //设置窗口面板 this.setSize(350, 235); this.setResizable (false); //设置窗口不可放大缩小 this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); sunswing.setWindowCenter(this); this.setVisible(true); pf.requestFocus(true); //设置焦点给密码框 } /**=======================================================================** * [## private void buildCenter() {} ]: 制作用户名密码面板 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :组建用户名密码面板,仅类内使用 **=======================================================================** */ private void buildCenter() { JLabel lb1, lb2; JPanel pa1, pa2, pa3; lb1 = new JLabel("用 户 名 :"); lb2 = new JLabel("登录密码 :"); cb = new JComboBox(); pf = new TJPasswordField (15); bt1 = new TJButton ("pic/key.gif", "登 录", "登录系统"); bt2 = new TJButton ("pic/exit.gif", "退 出", "关闭系统"); sunsql.initJComboBox (cb, "select userid from pwd where delmark=0"); //定义面板为无部局 panelInfo = new JPanel(null); //加入组件 panelInfo.add(lb1); panelInfo.add(lb2); panelInfo.add(cb); panelInfo.add(pf); panelInfo.add(bt1); panelInfo.add(bt2); lb1.setBounds(50,14,60,20); lb2.setBounds(50,48,60,20); bt1.setBounds(68,77,86,28); bt2.setBounds(186,77,86,28); cb.setBounds (115,12,168,23); pf.setBounds (115,46,170,23); //设定边框线 panelInfo.setBorder(BorderFactory.createTitledBorder("")); } /**=======================================================================** * [## private void quit() {} ]: 系统退出 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :关闭系统函数,仅类内使用 **=======================================================================** */ private void quit() { int flag = 0; String msg = "您 现 在 要 关 闭 系 统 吗 ?"; flag = JOptionPane.showConfirmDialog(null, msg, "提示", JOptionPane.YES_NO_OPTION); if(flag == JOptionPane.YES_OPTION) { this.setVisible(false); System.exit(0); }//End if(flag == JOptionPane.YES_OPTION) return; } /**=======================================================================** * [## private void dengLu() {} ]: 系统登录 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :密码验证通过,进入主操作界面,仅类内使用 **=======================================================================** */ private void dengLu() { String user = cb.getSelectedItem() + ""; String pwd = String.valueOf(pf.getPassword()); String code = "select pwd,puis from pwd where delmark=0 and userid='" + user + "'"; ResultSet rs = sunsql.executeQuery (code); try { if(rs.next()) { //用户名存在 if(pwd.equals(rs.getString(1))) { bott.setText(clue + "登录成功,正在进入系统 ..."); String puis = rs.getString(2); //获得操作员权限 boolean flag = Journal.writeJournalInfo(user, "登录本系统", Journal.TYPE_LG); if(flag) { //记录日志 new com.sunshine.mainframe.HotelFrame(user, puis); //进入主程序窗口(用户名, 权限) this.setVisible(false); }else { String msg = "写日志错误,请与系统管理员联系 ..."; JOptionPane.showMessageDialog(null, msg, "错误", JOptionPane.ERROR_MESSAGE); System.exit(0); } } else { bott.setText(clue + "用户 [ " + user + " ] 的密码不正确,请重新输入 ..."); flag++; if(flag == 3) { //三次密码验证 JOptionPane.showMessageDialog(null, "您不是本系统的管理员,系统关闭 ...", "警告", JOptionPane.ERROR_MESSAGE); System.exit(0); }//End if(flag == 3) return; }//End if(pwd.equals(rs.getString(1))) } else { bott.setText(clue + "用户ID [ " + user + " ] 不存在 ..."); }//End if(rs.next()) } catch (Exception ex) { ex.printStackTrace(); }//End try } /**=======================================================================** * ActionListener 监听 **=======================================================================** */ public void actionPerformed (ActionEvent ae) { //动作监听 if(ae.getSource() == bt1) { //登录按键 dengLu(); } else { quit(); }//End if(ae.getSource() == bt1) } /**=======================================================================** * ItemListener 监听 **=======================================================================** */ public void itemStateChanged (ItemEvent ie) { pf.requestFocus(true); } /**=======================================================================** * KeyListener 监听 **=======================================================================** */ public void keyPressed (KeyEvent ke) { //键盘按下监听 int key = ke.getKeyCode(); if(key == KeyEvent.VK_ENTER) { if(ke.getSource() == cb) pf.requestFocus(true); //将焦点从用户名给密码 if(pf.getPassword().length > 0) dengLu(); //按Enter键登录系统 } else if(key == KeyEvent.VK_ESCAPE) { //按ESC键退出系统 quit(); }//End if } public void keyReleased (KeyEvent ke) { //键盘释放监听 } public void keyTyped (KeyEvent ke) { //按键型监听 } /**=======================================================================** * FocusListener 监听 **=======================================================================** */ public void focusGained (FocusEvent fe) { //焦点监听 if(fe.getSource() == cb) //窗口最下方的功能提示 bott.setText(clue + "请选择操作员名称 ..."); else if(fe.getSource() == pf) bott.setText(clue + "请输入登录密码 ..."); else if(fe.getSource() == bt1) bott.setText(clue + "登录系统 ..."); else if(fe.getSource() == bt2) bott.setText(clue + "退出系统 ..."); } public void focusLost (FocusEvent fe) { //失去焦点监听 } /**=======================================================================** * [## public static void main(String sd[]) {} ]: 主函数 * 参数 :String sd[] * 返回值 :无 * 修饰符 :public static * 功能 :程序入口 **=======================================================================** */ public static void main(String sd[]) { sunswing.setWindowStyle(sunini.getIniKey("Sys_style").charAt(0)); new FStartWindow ("pic/Login.gif", new Frame(), 1200); new Login(); } } 错误提示: Load CONFIG.INI is false!! The [ Sys_style ] Key is not exist!! Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at com.sunshine.login.Login.main(Login.java:313)
求大神帮忙 谢谢
/** *############################################################################## * * [ 项目名 ] : 阳光酒店管理系统 * [ 公司名 ] : 清华IT * [ 模块名 ] : 系统登陆窗口 * [ 文件名 ] : Login.java * [ 相关文件 ] : * [ 文件实现功能] : 系统登陆窗口 * [ 作者 ] : 顾俊 * [ 版本 ] : 1.1 * ---------------------------------------------------------------------------- * [ 备注 ] : * ---------------------------------------------------------------------------- * [ 修改记录 ] : * * [ 日 期 ] [版本] [修改人] [修改内容] * 2006/04/02 1.0 顾俊 创建 * 2006/04/06 1.1 顾俊 增加注释 * 2006/04/19 1.2 顾俊 自动记录登录日志 * ##-------------------------------------------------------------------------- * 版权所有(c) 2006-2007, SunshineSOFT Corporation * --------------------------------------------------------------------------## * * [ 函数说明 ] : * * [## public Login() {} ]: * 功能: 构造函数 组建登录窗口 * * [## private void buildCenter() {} ]: * 功能: 组建用户名密码面板,仅类内使用 * * [## private void quit() {} ]: * 功能: 关闭系统函数,仅类内使用 * * [## private void dengLu() {} ]: * 功能: 密码验证通过,进入主操作界面,仅类内使用 * * [ 遗留问题 ] : * *############################################################################## */ package com.sunshine.login; import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import com.sunshine.sunsdk.sql.*; import com.sunshine.sunsdk.swing.*; import com.sunshine.sunsdk.system.*; import com.sunshine.mainframe.*; public class Login extends JFrame implements ActionListener, KeyListener, ItemListener, FocusListener { JLabel top, bott; JComboBox cb; JPasswordField pf; JButton bt1, bt2; JPanel panelMain, panelInfo; String clue = " 提 示 : "; int flag = 0; //登记次数记数器 /**=======================================================================** * [## public Login() {} ]: 构造函数 * 参数 :无 * 返回值 :无 * 修饰符 :public * 功能 :组建登录窗口 **=======================================================================** */ public Login() { super("系 统 登 录"); top = new JLabel (new ImageIcon("pic/login_top.gif")); bott = new JLabel(); panelMain = new JPanel(new BorderLayout(10, 10)); bott.setBorder(new LineBorder (new Color(184, 173, 151))); buildCenter(); panelMain.add("North", top); panelMain.add("South", bott); panelMain.add(panelInfo); //加事件监听 bt1.addActionListener(this); bt2.addActionListener(this); bt1.addFocusListener (this); bt2.addFocusListener (this); bt1.addKeyListener (this); bt2.addKeyListener (this); cb.addItemListener (this); cb.addFocusListener(this); pf.addFocusListener(this); cb.addKeyListener (this); pf.addKeyListener (this); //加窗口监听 new WindowAdapter适配器类 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { quit(); }//End windowClosing }); this.setContentPane(panelMain); //设置窗口面板 this.setSize(350, 235); this.setResizable (false); //设置窗口不可放大缩小 this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); sunswing.setWindowCenter(this); this.setVisible(true); pf.requestFocus(true); //设置焦点给密码框 } /**=======================================================================** * [## private void buildCenter() {} ]: 制作用户名密码面板 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :组建用户名密码面板,仅类内使用 **=======================================================================** */ private void buildCenter() { JLabel lb1, lb2; JPanel pa1, pa2, pa3; lb1 = new JLabel("用 户 名 :"); lb2 = new JLabel("登录密码 :"); cb = new JComboBox(); pf = new TJPasswordField (15); bt1 = new TJButton ("pic/key.gif", "登 录", "登录系统"); bt2 = new TJButton ("pic/exit.gif", "退 出", "关闭系统"); sunsql.initJComboBox (cb, "select userid from pwd where delmark=0"); //定义面板为无部局 panelInfo = new JPanel(null); //加入组件 panelInfo.add(lb1); panelInfo.add(lb2); panelInfo.add(cb); panelInfo.add(pf); panelInfo.add(bt1); panelInfo.add(bt2); lb1.setBounds(50,14,60,20); lb2.setBounds(50,48,60,20); bt1.setBounds(68,77,86,28); bt2.setBounds(186,77,86,28); cb.setBounds (115,12,168,23); pf.setBounds (115,46,170,23); //设定边框线 panelInfo.setBorder(BorderFactory.createTitledBorder("")); } /**=======================================================================** * [## private void quit() {} ]: 系统退出 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :关闭系统函数,仅类内使用 **=======================================================================** */ private void quit() { int flag = 0; String msg = "您 现 在 要 关 闭 系 统 吗 ?"; flag = JOptionPane.showConfirmDialog(null, msg, "提示", JOptionPane.YES_NO_OPTION); if(flag == JOptionPane.YES_OPTION) { this.setVisible(false); System.exit(0); }//End if(flag == JOptionPane.YES_OPTION) return; } /**=======================================================================** * [## private void dengLu() {} ]: 系统登录 * 参数 :无 * 返回值 :无 * 修饰符 :private * 功能 :密码验证通过,进入主操作界面,仅类内使用 **=======================================================================** */ private void dengLu() { String user = cb.getSelectedItem() + ""; String pwd = String.valueOf(pf.getPassword()); String code = "select pwd,puis from pwd where delmark=0 and userid='" + user + "'"; ResultSet rs = sunsql.executeQuery (code); try { if(rs.next()) { //用户名存在 if(pwd.equals(rs.getString(1))) { bott.setText(clue + "登录成功,正在进入系统 ..."); String puis = rs.getString(2); //获得操作员权限 boolean flag = Journal.writeJournalInfo(user, "登录本系统", Journal.TYPE_LG); if(flag) { //记录日志 new com.sunshine.mainframe.HotelFrame(user, puis); //进入主程序窗口(用户名, 权限) this.setVisible(false); }else { String msg = "写日志错误,请与系统管理员联系 ..."; JOptionPane.showMessageDialog(null, msg, "错误", JOptionPane.ERROR_MESSAGE); System.exit(0); } } else { bott.setText(clue + "用户 [ " + user + " ] 的密码不正确,请重新输入 ..."); flag++; if(flag == 3) { //三次密码验证 JOptionPane.showMessageDialog(null, "您不是本系统的管理员,系统关闭 ...", "警告", JOptionPane.ERROR_MESSAGE); System.exit(0); }//End if(flag == 3) return; }//End if(pwd.equals(rs.getString(1))) } else { bott.setText(clue + "用户ID [ " + user + " ] 不存在 ..."); }//End if(rs.next()) } catch (Exception ex) { ex.printStackTrace(); }//End try } /**=======================================================================** * ActionListener 监听 **=======================================================================** */ public void actionPerformed (ActionEvent ae) { //动作监听 if(ae.getSource() == bt1) { //登录按键 dengLu(); } else { quit(); }//End if(ae.getSource() == bt1) } /**=======================================================================** * ItemListener 监听 **=======================================================================** */ public void itemStateChanged (ItemEvent ie) { pf.requestFocus(true); } /**=======================================================================** * KeyListener 监听 **=======================================================================** */ public void keyPressed (KeyEvent ke) { //键盘按下监听 int key = ke.getKeyCode(); if(key == KeyEvent.VK_ENTER) { if(ke.getSource() == cb) pf.requestFocus(true); //将焦点从用户名给密码 if(pf.getPassword().length > 0) dengLu(); //按Enter键登录系统 } else if(key == KeyEvent.VK_ESCAPE) { //按ESC键退出系统 quit(); }//End if } public void keyReleased (KeyEvent ke) { //键盘释放监听 } public void keyTyped (KeyEvent ke) { //按键型监听 } /**=======================================================================** * FocusListener 监听 **=======================================================================** */ public void focusGained (FocusEvent fe) { //焦点监听 if(fe.getSource() == cb) //窗口最下方的功能提示 bott.setText(clue + "请选择操作员名称 ..."); else if(fe.getSource() == pf) bott.setText(clue + "请输入登录密码 ..."); else if(fe.getSource() == bt1) bott.setText(clue + "登录系统 ..."); else if(fe.getSource() == bt2) bott.setText(clue + "退出系统 ..."); } public void focusLost (FocusEvent fe) { //失去焦点监听 } /**=======================================================================** * [## public static void main(String sd[]) {} ]: 主函数 * 参数 :String sd[] * 返回值 :无 * 修饰符 :public static * 功能 :程序入口 **=======================================================================** */ public static void main(String sd[]) { sunswing.setWindowStyle(sunini.getIniKey("Sys_style").charAt(0)); new FStartWindow ("pic/Login.gif", new Frame(), 1200); new Login(); } } 下面是错误提示 The [ Sys_style ] Key is not exist!! Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at com.sunshine.login.Login.main(Login.java:313)
静态链表为什么实现不了数据反转,哪里错了,具体的代码如何实现?
``` //vc6.0实现的C++版 //功能:静态链表实现线性表的基本功能 #include <iostream.h>//读入必须包含的头文件 #include <windows.h>//清屏和颜色设置需要 #include <iomanip.h> enum returninfo{success,fail,overflow,underflow,range_error};//定义返回信息清单 #define NULLP -1//静态链表的空地址模拟 const int MAXSIZE=10;//静态链表的总空间大小 class node { public: int data;//数据域 int next;//指针域 }; /* 定义一个线性表类staticlinklist */ class staticlinklist { private: node dataarray[MAXSIZE];//定义静态链表的数组 int freep,headp;//freep管理空闲空间,headp管理实际线性表空间 int count;//计数器 统计结点个数即线性表的长度 public: staticlinklist();//构造函数 ~staticlinklist();//析构函数 int getnewnode(void);//申请一个新的可用空间 returninfo create(int number);//静态链表的初始化 bool empty(void) const;//判断是否空链 int size(void) const;//求静态链表的长度 void deletenode(int position);//把某个空间地址归还给空闲空间 returninfo traverse(void);//遍历静态链表所有元素 returninfo retrieve(int position,int &item) const;//读取一个结点 returninfo replace(int position,const int &item);//修改一个结点 returninfo insert(int position,const int &item);//插入一个结点 returninfo remove(int position);//删除一个结点 returninfo invertlist(void);//静态链表所有数据反转 void showinfo(void);//显示静态链表相关信息 }; staticlinklist::staticlinklist()//构造函数 { //静态链表初始化,约定开始时地址域为从小到大顺序挂链,最后一个为NULLP(即-1) int i; for(i=0;i<MAXSIZE;i++) dataarray[i].next=i+1; dataarray[MAXSIZE-1].next=-1; freep=0;//设置空闲区的指针 count=0;//计数器清零,表明开始时没有实际数据 headp=NULLP; } staticlinklist::~staticlinklist()//析构函数 { } staticlinklist::getnewnode(void) { int tempaddress;//定义一个临时地址指针 tempaddress=freep;//保存目前可用空间的第一个地址 freep=dataarray[freep].next;//可用空间头指针后移 return tempaddress; } returninfo staticlinklist::create(int number)//静态链表的初始化 { int tempaddress,tempp; cout<<"请依次输入数据(用空格隔开):"; for(int i=1;i<=number;i++) { tempaddress=getnewnode(); cin>>dataarray[tempaddress].data; dataarray[tempaddress].next=NULLP; count++; if(i==1)//挂第一个结点 { headp=tempaddress; tempp=headp; } else//挂其他结点 { dataarray[tempp].next=tempaddress; tempp=tempaddress; } } return success; } bool staticlinklist::empty(void) const//判断是否空链 { if(headp==NULLP) return true; else return false; } int staticlinklist::size(void) const//求静态链表的长度 { return count; } void staticlinklist::deletenode(int position) { dataarray[position].next=freep; freep=position; } returninfo staticlinklist::traverse(void)//遍历静态链表中的所有元素 { int searchp;//启用搜索指针 if(empty()) return underflow;//空表的处理 searchp=headp; cout<<"静态链表中的全部数据为:Headp->";//提示显示数据开始 while(searchp!=NULLP)//循环显示所有数据 { cout<<"["<<dataarray[searchp].data; if(dataarray[searchp].next==NULLP) cout<<"|^]"; else cout<<"|-]->"; searchp=dataarray[searchp].next; } cout<<endl;//最后有一个回车的控制 return success;//本次操作成功 } returninfo staticlinklist::retrieve(int position,int &item) const//读取一个结点 { if(empty())//处理意外,空表 return underflow; if(position<=0||position>=count+1) //处理意外,范围不正确 return range_error; int searchp=headp;//定义搜索指针,初始化 for(int i=1;i<position&&searchp!=NULLP;i++)//提示:注意小于号 searchp=dataarray[searchp].next;//顺序访问方式,用循环,算法复杂度是O(n) item=dataarray[searchp].data;//返回读取的数据 return success;//本次操作成功 } returninfo staticlinklist::replace(int position,const int &item)//修改一个结点 { if(empty())//处理意外,空表 return underflow; if(position<=0||position>=count+1) //处理意外,范围不正确 return range_error; int searchp=headp;//定义搜索指针,初始化 for(int i=1;i<position&&searchp!=NULLP;i++)//提示:注意小于号 searchp=dataarray[searchp].next;//顺序访问方式,用循环,算法复杂度是O(n) dataarray[searchp].data=item;//实际修改数据的语句 return success;//本次操作成功 } returninfo staticlinklist::insert(int position,const int &item)//插入一个结点 { if(position<=0||position>=count+2) //处理意外,范围不正确 return range_error; int newnodep,searchp=headp,followp=NULLP; newnodep=getnewnode();//此处需要申请新的一个可用空间,地址赋给newnodep if(newnodep==NULLP) return overflow; dataarray[newnodep].data=item;//给数据赋值 if(position==1) { dataarray[newnodep].next=headp; headp=newnodep; count++; return success; } for(int i=1;i<position&&searchp!=NULLP;i++)//以下为查找插入位置 { followp=searchp; searchp=dataarray[searchp].next; } //以下开始修改链表,完成插入数据 dataarray[newnodep].next=dataarray[followp].next;//注意此处的次序相关性 dataarray[followp].next=newnodep; count++;//计数器加1 return success; } returninfo staticlinklist::remove(int position)//删除一个结点 { if(empty())//处理意外,空表 return underflow; if(position<=0||position>=count+1) //处理意外,范围不正确 return range_error; int searchp=headp,followp=NULLP;//这里两个指针的初始值设计一前一后 if(position==1) { searchp=headp; headp=dataarray[headp].next; deletenode(searchp);//释放该结点空间 count--;//计数器减1 return success; } for(int i=1;i<position&&searchp!=NULLP;i++) { followp=searchp; searchp=dataarray[searchp].next; } dataarray[followp].next=dataarray[searchp].next;//删除结点的实际语句 deletenode(searchp);//释放该结点 count--;//计数器减1 return success; } returninfo staticlinklist::invertlist(void)//静态链表所有数据反转 { int nowp,midp,lastp;//启用多个辅助指针 if(empty()) return underflow; nowp=dataarray[headp].next; midp=NULLP; while(nowp!=NULLP) { lastp=midp; midp=nowp; nowp=dataarray[nowp].next; dataarray[midp].next=lastp; } dataarray[headp].next=midp; return success; } void staticlinklist::showinfo(void)//显示静态链表相关信息 { int searchp; cout<<"目前静态链表总空间:"<<setw(3)<<MAXSIZE<<"地址为(0--"<<MAXSIZE-1<<")"<<endl; cout<<"其中自由空间大小为:"<<setw(3)<<MAXSIZE-count<<"编号为:"; searchp=freep; while(searchp!=NULLP) { cout<<" "<<searchp; searchp=dataarray[searchp].next; } cout<<endl; cout<<"线性表的已用空间为:"<<setw(3)<<count<<"编号为:"; searchp=headp; while(searchp!=NULLP) { cout<<" "<<searchp; searchp=dataarray[searchp].next; } cout<<endl; } /* 定义一个实现静态链表功能的菜单处理类interfacebase */ class interfacebase { private: staticlinklist listonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 returninfo processmenu(int menuchoice);//菜单函数 }; void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"静态链表基本功能菜单"<<endl; cout<<"=================="<<endl; cout<<"1.输入数据(键盘输入)"<<endl; cout<<"2.显示数据(遍历全部数据)"<<endl; cout<<"3.修改数据(要提供位置和新值)"<<endl; cout<<"4.插入数据(要提供位置和新值)"<<endl; cout<<"5.删除数据(要提供位置)"<<endl; cout<<"6.读取数据(要提供位置)"<<endl; cout<<"7.求表长度"<<endl; cout<<"8.数据反转(全部数据逆序存储)"<<endl; cout<<"9.静态链表相关信息"<<endl; cout<<"0.退出程序"<<endl; cout<<"=================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } returninfo interfacebase::processmenu(int menuchoice) { int position,item,returnvalue; switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: cout<<"请问你要输入数据的个数,注意要在"<<MAXSIZE<<"个以内:"; cin>>item; if(item>MAXSIZE) cout<<"对不起,输入数据超限,操作已取消!请按任意键继续..."<<endl; else { returnvalue=listonface.create(item); if(returnvalue==success) cout<<"建立静态链表操作成功!请按任意键继续..."<<endl; } break; case 2: returnvalue=listonface.traverse(); if(returnvalue==underflow) cout<<"静态链表目前为空,没有数据可以显示!请按任意键继续..."<<endl; else cout<<"静态链表遍历操作成功!请按任意键继续..."<<endl; break; case 3: cout<<"请输入要修改数据的位置:"; cin>>position; cout<<"请输入要修改的新数据:"; cin>>item; returnvalue=listonface.replace(position,item); if(returnvalue==underflow) cout<<"对不起,静态链表已空!请按任意键继续..."<<endl; else if(returnvalue==range_error) cout<<"对不起,修改的位置超出了范围!请按任意键继续..."<<endl; else cout<<"修改操作成功!请按任意键继续..."<<endl; break; case 4: cout<<"请输入要插入数据的位置:"; cin>>position; cout<<"请输入要插入的新数据:"; cin>>item; returnvalue=listonface.insert(position,item);//注意这个位置的参数 if(returnvalue==overflow) cout<<"对不起,静态链表溢出,无法插入新数据!请按任意键继续..."<<endl; else if(returnvalue==range_error) cout<<"对不起,插入的位置超出了范围!请按任意键继续..."<<endl; else cout<<"插入操作成功!请按任意键继续..."<<endl; break; case 5: cout<<"请输入要删除数据的位置:"; cin>>position; returnvalue=listonface.remove(position);//注意这个位置的参数 if(returnvalue==underflow) cout<<"对不起,静态链表已空!请按任意键继续......"<<endl; else if(returnvalue==range_error) cout<<"对不起,删除的位置超出了范围!请按任意键继续..."<<endl; else cout<<"删除操作成功!请按任意键继续..."<<endl; break; case 6: cout<<"请输入要读取数据的位置:"; cin>>position; returnvalue=listonface.retrieve(position,item); if(returnvalue==underflow) cout<<"对不起,静态链表已空!请按任意键继续......"<<endl; else if(returnvalue==range_error) cout<<"对不起,读取的位置超出了范围!请按任意键继续..."<<endl; else cout<<"读取的数据为:"<<item<<endl<<"读取操作成功!请按任意键继续..."<<endl; break; case 7: cout<<"静态链表目前的长度为:"<<listonface.size()<<endl; cout<<"求静态链表长度操作成功!请按任意键继续..."<<endl; break; case 8: returnvalue=listonface.invertlist(); if(returnvalue==underflow) cout<<"对不起,链表已空!请按任意键继续......"<<endl; else cout<<"链表所有元素反转操作成功!请按任意键继续..."<<endl; break; case 9: listonface.showinfo(); break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } return success; } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; staticlinklist linklistnow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
请问这道题用C++怎么做,求助,这道题怎么做,谢谢
一圆型游泳池,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。 注意:本题为填空编程题,只能在/******start******/和/******end******/之间填写代码。 测试用例: 输入: 6 output: Fencing Cost is 1979.2 Concrete Cost is 2827.43 输入 0 please input radius again:-1 please input radius again:6 output: Fencing Cost is 1979.2 Concrete Cost is 2827.43 #include <iostream> using namespace std; const float PI = (float)3.14159; //给出p的值 const float FencePrice = 35.; //栅栏的单价 const float ConcretePrice = 20.; //过道水泥单价 class Circle //声明类Circle 及其数据和方法 { public: //外部接口 Circle(float r); //构造函数 float Circumference(); //计算圆周长 float Area() const; //计算圆面积 float GetRadius() const; private: //私有数据成员 float radius; }; // 类的实现 /******start******/ /******end******/ float Circle::Circumference() // 计算圆的周长 { return 2 * PI * radius; } float Circle::Area() const// 计算圆的面积 { return PI * radius * radius; } float Circle::GetRadius()const { /******start******/ /******end******/ } //主函数实现 void main () { float radius; float FenceCost, ConcreteCost; cout << "Enter the radius of the pool: "; // 提示用户输入半径 cin >> radius; Circle Pool(radius); // 声明Circle 对象 radius=Pool.GetRadius(); Circle PoolRim(radius + 3); // 计算栅栏造价并输出 cout<<"output:\n"; FenceCost = PoolRim.Circumference() * FencePrice; cout << "Fencing Cost is " << FenceCost << endl; // 计算过道造价并输出 ConcreteCost = (PoolRim.Area() - Pool.Area())*ConcretePrice; cout << "Concrete Cost is " << ConcreteCost << endl; }
单链表实现的多项式加减法计算,输入的负号变成了正号,并且幂为负时显示错误,这个程序应该怎么改?
``` //vc6.0实现的C++版![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861033_43306.png)![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861045_50819.png) //功能:多项式的加减法操作 #include <iostream.h>//读入必须包含的头文件 #include <windows.h>//清屏和颜色设置需要 #include <string.h> #include <fstream.h> #include <iomanip.h> #include <math.h>//处理方幂运算 enum returninfo{success,wrong,fail,overflow,underflow,empty_error};//定义返回信息清单 const int Maxsize=26;//系统允许多项式的最大值 const int Number=40;//设置输入多项式时字符串长度最大限,也可以根据需求任意设置 int order;//设置多项式显示方式0代表降幂显示,1代表升幂显示 class node//定义一个node类,处理多项式中的<项>:如3x^(-2)、4x^3、6x或者常数5等等 { public: node(int initcoeff,int initindex,node *initnext=NULL);//系数、指数、后继结点 node(node *initnext=NULL);//后继结点函数重载:用于头结点 ~node(); int coeff;//系数 int index;//指数 node *next; }; node::node(int initcoeff,int initindex,node *initnext) { coeff=initcoeff; index=initindex; next=initnext; } node::node(node *initnext) { next=initnext; } node::~node() { } /* 定义一个线性表类linklist */ class linklist { public: linklist();//构造函数 ~linklist();//析构函数 void clearlist(void);//清除多项式 bool empty(void) const;//判断是否空链 node *headp;//多项式头结点 }; linklist::linklist()//构造函数 { headp = new node;//申请新结点,作为头结点 headp->next=NULL;//头结点的地址域预设为空地址 } linklist::~linklist()//析构函数 { clearlist();//删除所有数据,释放所有结点 delete headp;//把头结点也释放掉 } void linklist::clearlist(void)//清除多项式 { node *searchp=headp->next,*followp=headp;//初始化两个指针 while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } headp->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 } bool linklist::empty(void) const//判断是否空链 { if(headp->next==NULL) return true; else return false; } /* 实现多项式加减法的类sequelist */ class sequelist//管理多项式 { public: sequelist(); ~sequelist(); returninfo inputdata(void);//从键盘输入多项式 returninfo deletdata(void);//清空多项式信息 returninfo calculate(void);//赋值计算 void addnode(int site,int icoeff,int iindex);//增加项 void display(char name);//显示某个多项式 void displayname(void);//显示系统中现存多项式的名称 void traveral(void);//遍历所有多项式 void deletepart(char idata);//清除单个多项式信息 void deletcomp(void);//清除全部多项式信息 bool findlist(char idata);//查找多项式(提供多项式名称) bool scanname(char idata);//判断多项式的名称是否合法 bool read();//读文件操作 bool write();//写文件操作 protected: linklist list[Maxsize]; }; sequelist::sequelist() { } sequelist::~sequelist() { } returninfo sequelist::deletdata(void)//清空多项式信息 { int choice,site; char ch,name; cout<<"1.清空系统全部多项式信息"<<endl; cout<<"2.清除某个指定多项式信息"<<endl; cout<<"3.退出清除信息"<<endl; cout<<"请选择:"; cin>>choice; if(choice==1||choice==2) { if(choice==1) { traveral(); cout<<endl<<"请问:您确定要清空全部多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletcomp(); else return fail; } else { cout<<"请输入你要清空的多项式的名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确定要清除该多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletepart(name); else return fail; } return success; } else return fail; } returninfo sequelist::calculate(void)//赋值计算 { int site,x,flag=0; double result=0,value; char name,ch; node *searchp; cout<<"请输入需要赋值计算的多项式名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确认要进行赋值计算吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') { cout<<"请给出变量x的值(如果方幂过大x不宜取大值):x="; cin>>x; cout<<endl<<name<<"("<<x<<")="; searchp=list[site].headp->next; while(searchp!=NULL) { value=searchp->coeff*pow(x,searchp->index); result+=value; cout<<" "; if(value>=0) { if(flag!=0) cout<<"+"; } cout<<value; flag++; searchp=searchp->next; } cout<<endl<<" ="<<result<<endl<<endl; } else return fail; return success; } void sequelist::display(char name)//显示某个多项式 { cout<<name<<"(x)="; int site; site=int(name-'A'); node *searchp=list[site].headp->next; if(searchp->coeff==0) cout<<"0"; else if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } else { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } searchp=searchp->next; while(searchp!=NULL) { cout<<" "; if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff; } else if(searchp->index==1) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x"; } else if(searchp->index<0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^("<<searchp->index<<")"; } else { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^"<<searchp->index; } } else if(searchp->coeff==1) { if(searchp->index==0) cout<<"+1"; else if(searchp->index==1) cout<<"+x"; else if(searchp->index<0) cout<<"+x^("<<searchp->index<<")"; else cout<<"+x^"<<searchp->index; } else { if(searchp->index==0) cout<<"-1"; else if(searchp->index==1) cout<<"-x"; else if(searchp->index<0) cout<<"-x^("<<searchp->index<<")"; else cout<<"-x^"<<searchp->index; } searchp=searchp->next; } cout<<endl; } void sequelist::deletcomp(void)//清除全部多项式信息 { int i; char name; for(i=0;i<Maxsize;i++) { name=char(i+'A'); deletepart(name); } } void sequelist::deletepart(char idata)//清除单个多项式信息 { int site; site=int(idata-'A'); node *searchp=list[site].headp->next,*followp; while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } list[site].headp->next=NULL; } returninfo sequelist::inputdata(void)//从键盘输入多项式(重点,难点,关键) { char iname,idata[Number]; node *searchp,*followp; int flag=0;//标志项系数正负(flag==1表示负,flag==0表示正)A=3x^(-2)+4x^3-6x^(-3)+5 cout<<"请输入你要新建多项式的名称(提示:一个大写字母):"; cin>>iname; if(scanname(iname))//名称通过检验 { int site,icoeff=0,iindex=0,i=0,j=0,k=0; char data[20][20];//将输入的数据分项处理分成20块长度为20的项 site=int(iname-'A'); cout<<"请连续输入多项式不要有空格:"<<endl<<iname<<"(x)="; cin>>idata; //首先将第一项分开来处理 data[k][i]=idata[i]; while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') data[k][++j]=idata[i]; data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//将项数加1, //从第二项开始往后的各项处理 for(;idata[i]!='\0';) { j=0;//j还原为0 data[k][0]=idata[i];//记录每一项的符号位 while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') { data[k][++j]=idata[i]; if(idata[++i]=='(')//指数为负的处理 { data[k][++j]=idata[i]; data[k][++j]=idata[++i];//将负号写入 i++; } i--; } data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//继续写下一项 }//注意:此时的k后面会有用!!! //得到的data[20][20]为多项式的20个项 for(i=0;i<k;)//将每一项分为node格式,并将其挂链对应的多项式上面 { icoeff=0; iindex=0; j=0; if(data[i][0]=='-')//如果为负 { flag=1; j++; } else if(data[i][0]=='+')//如果为正 { flag=0; j++; } else flag=0;//这个是针对多项式的第一项为正的情况考虑的 //项系数的确定 while(data[i][j]>='0'&&data[i][j]<='9') { icoeff=icoeff*10+int(data[i][j]-'0'); j++; } if(icoeff==0) icoeff=1; if(icoeff==1) icoeff=0-icoeff;//如果系数为负,则加上负号 switch(data[i][j])//将data[i][j]分路: { case 'x'://此项为含x的项 if(data[i][++j]=='\n')//指数为1的情况 iindex=1; else { if(data[i][j]=='^')//后面紧接着是指数的情况(正和负) { if(data[i][++j]=='(')//指数为负的情况 { j++;//跳过负号 while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); iindex=0-iindex; } else//指数为正的情况 { j--; while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } } //将项插入多项式中 addnode(site,icoeff,iindex); break; case '\n'://此项为常数项 iindex=0; addnode(site,icoeff,iindex); break; default://此项涉及到前面的多项式,如4A,5B,A*B等等 int site1,site2; site1=int(data[i][j]-'A'); if(site==site1||list[site1].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return wrong; } node *searchp1=list[site1].headp->next; if(data[i][++j]=='\n')//如4A,5B { while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff,searchp1->index); searchp1=searchp1->next; } } else if(data[i][j]=='*')//如3A*B等等 { site2=int(data[i][++j]-'A'); if(site==site2||data[i][++j]!='\n') { deletepart(iname);//清空现场再返回错误信息 return wrong; } if(list[site2].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return empty_error; } node *searchp2=list[site2].headp->next; while(searchp2!=NULL) { searchp1=list[site1].headp->next; while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff*(searchp2->coeff),(searchp1->index)+(searchp2->index)); searchp1=searchp1->next; } searchp2=searchp2->next; } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } break; } i++; } //到现在为止,多项式已经创建成功,下面进行系数项为0的清除工作 followp=list[site].headp; searchp=list[site].headp->next; while(searchp!=NULL) { if(searchp->coeff==0)//系数项为0的清除 { followp->next=searchp->next; delete searchp; searchp=followp; } followp=searchp; searchp=searchp->next; } if(list[site].headp->next==NULL)//多项式为0的情况 { searchp=new node(0,0);//附加一个0项 list[site].headp->next=searchp; searchp->next=NULL; } cout<<endl<<"新建多项式信息整理后如下:"<<endl; display(iname);//多项式显示 return success; } return fail; } void sequelist::displayname(void)//显示系统中现存多项式的名称 { int j=0; cout<<"系统当前存在多项式的名称有:"<<endl; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { cout<<setw(4)<<char(i+'A'); j++; if((j+1)%8==0)//每行显示7个多项式名称 cout<<endl; } } cout<<endl<<"◇◇共"<<j<<"个多项式信息!"<<endl<<endl; } void sequelist::addnode(int site,int icoeff,int iindex)//增加项 { node *newnode,*searchp,*followp; if(list[site].empty())//如果为空 { newnode= new node(icoeff,iindex); list[site].headp->next=newnode; newnode->next=NULL; } else { followp=list[site].headp; searchp=list[site].headp->next; if(order==1)//降序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } else//升序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } if(searchp!=NULL&&searchp->index==iindex) { searchp->coeff+=icoeff;//同类项合并 } else//非同类项则按序插入 { newnode=new node(icoeff,iindex); newnode->next=searchp; followp->next=newnode; } } } void sequelist::traveral(void)//遍历所有多项式 { int j=0; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { display(char(i+'A')); j++; } } cout<<"系统中现有多项式个数为:"<<j<<endl; } bool sequelist::findlist(char idata)//查找多项式(提供多项式名称) { int site; site=int(idata-'A'); if(list[site].empty()) return false; else { display(idata); return true; } } bool sequelist::scanname(char idata)//判断多项式的名称是否合法 { if(idata>='A'&&idata<='Z') { int site; site=int(idata-'A'); if(!list[site].empty()) { cout<<"对不起,多项式"<<idata<<"已经存在!"<<endl; display(idata); return false; } else { cout<<"恭喜!多项式名称通过检验!请继续..."<<endl; return true; } } cout<<"对不起,您输入的多项式名称格式不正确!"<<endl; return false; } /* 定义一个实现多项式功能的菜单处理类interfacebase */ class interfacebase { private: sequelist listonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 returninfo processmenu(int menuchoice);//菜单函数 }; void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"单链表实现多项式的功能菜单"<<endl; cout<<"=========================="<<endl; cout<<"1.输入多项式(从键盘输入)"<<endl; cout<<"2.显示多项式(遍历所有多项式)"<<endl; cout<<"3.清空多项式信息"<<endl; cout<<"4.赋值计算"<<endl; cout<<"5.显示某个多项式"<<endl; cout<<"6.显示系统中现存多项式的名称"<<endl; cout<<"7.查找多项式(提供多项式名称)"<<endl; cout<<"0.退出程序"<<endl; cout<<"=========================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } returninfo interfacebase::processmenu(int menuchoice) { int position,item,returnvalue; char name; switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: returnvalue=listonface.inputdata(); if(returnvalue==fail) cout<<"对不起,您输入的多项式名称格式不正确!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式错误(或者为空),已删除!请按任意键继续..."<<endl; else if(returnvalue==empty_error) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"输入多项式操作成功!请按任意键继续..."<<endl; break; case 2: listonface.traveral(); cout<<"多项式遍历操作成功!请按任意键继续..."<<endl; break; case 3: returnvalue=listonface.deletdata(); if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"清除操作成功!请按任意键继续..."<<endl; break; case 4: returnvalue=listonface.calculate(); if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else cout<<"赋值计算操作成功!请按任意键继续..."<<endl; break; case 5: cout<<"请输入要显示的多项式名称:"; cin>>name; listonface.display(name); cout<<"显示某个多项式操作成功!请按任意键继续..."<<endl; break; case 6: listonface.displayname(); cout<<"显示系统中现存多项式的名称操作成功!请按任意键继续..."<<endl; break; case 7: cout<<"请输入要查找的多项式名称:"; cin>>name; listonface.findlist(name); if(true) cout<<"查找多项式操作成功!请按任意键继续..."<<endl; else cout<<"该多项式为空(不存在)!请按任意键继续..."<<endl; break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } return success; } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; sequelist sequelistnow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
大家给看一下,下面的一段代码,有一个问题请教大家
``` #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 10 // 带编码字符的个数,即树中叶结点的最大个数 #define M (2*N-1) // 树中总的结点数目 class HTNode{ // 树中结点的结构 public: char data; int weight; int parent,lchild,rchild; }; class HTCode{ public: char data; // 待编码的字符 int weight; // 字符的权值 char code[N]; int start; // 字符的编码 }; void Init(HTCode hc[], int *n){ // 初始化,读入待编码字符的个数n,从键盘输入n个字符和n个权值 int i; cout<<"输入字符个数:"; cin>>*n; cout<<"输入"<<*n<<"个字符"; for(i=1; i<=*n; ++i) cin>>hc[i].data; cout<<"输入"<<*n<<"个权值"; for(i=1; i<=*n; ++i) cin>>hc[i].weight; } void Select(HTNode ht[], int k, int *s1, int *s2){ // ht[1...k]中选择parent为0,并且weight最小的两个结点,其序号由指针变量s1,s2指示 int i; for(i=1; i<=k && ht[i].parent != 0; i++){} *s1 = i; for(i=1; i<=k; ++i){ if(ht[i].parent==0 && ht[i].weight<ht[*s1].weight) *s1 = i; } for(i=1; i<=k; i++){ if(ht[i].parent==0 && i!=*s1) break; } *s2 = i; for(i=1; i<=k; i++){ if(ht[i].parent==0 && i!=*s1 && ht[i].weight<ht[*s2].weight) *s2 = i; } } void print(HTNode ht[],int k ,int n) { if(k==0) { return; } for (int i=0;i<n;i++) { cout<<" "; } if(ht[k].parent!=-1) { cout<<"|_"; } else { cout<<" "; } cout<<ht[k].data<<endl; int L=ht[k].lchild; int R=ht[k].rchild; print(ht,R,n+2); print(ht,L,n+2); } void HuffmanCoding(HTNode ht[],HTCode hc[],int n){ // 构造Huffman树ht,并求出n个字符的编码 char cd[N]; HTCode d; int i,j,m,c,f,s1,s2,start; for(i=1; i<=2*n-1; i++) { if(i <= n) ht[i].weight = hc[i].weight; else ht[i].parent = 0; ht[i].parent = ht[i].lchild = ht[i].rchild = 0; } for(i=n+1; i<=2*n-1; i++){ Select(ht, i-1, &s1, &s2); ht[s1].parent = i; ht[s2].parent = i; ht[i].lchild = s1; ht[i].rchild = s2; ht[i].weight = ht[s1].weight+ht[s2].weight; } cd[n-1] = '\0'; for(i=1; i<=n; i++){ start = n-1; for(c=i,f=ht[i].parent; f; c=f,f=ht[f].parent){ if(ht[f].lchild == c) cd[--start] = '0'; else cd[--start] = '1'; } strcpy(hc[i].code, &cd[start]); } } void enCoding(HTNode ht[],HTCode hc[],int n) { int q,k; char bs; cout<<"请输入字符代码: "<<endl; cin>>bs; for(q=0;bs!=10;q++) { bs=getchar(); for(int i=1;i<=n;i++) { if (bs==hc[i].data) for(k=hc[i].data;k<=n;k++) cout<<hc[i].code[k]; } } cout<<endl; int t,u; char c[100]; t=2*n-1; cout<<"\n请输入哈夫曼码: "<<endl; cin>>c; for(u=0;c[u]!='\0';u++) { if(c[u]=='0') { t=ht[t].lchild; } else if(c[u]=='1') { t=ht[t].rchild; } if(t<n+1) { cout<<ht[t].data; t=2*n-1; } }cout<<endl; } int main(int i, int n ) { int m,w[N+1]; HTNode ht[M+1]; HTCode hc[N+1]; Init(hc, &n); // 初始化 HuffmanCoding(ht,hc,n); // 构造Huffman树,并形成字符的编码 for(i=1; i<=n; i++) cout<<hc[i].data<<"---"<<hc[i].code<<endl; print(ht, 2*n-1, 0); enCoding(ht,hc,n); cout<<endl; return 0; } ``` void enCoding()函数中输入字符后,cout<<hc[i].code[k];为什么没有输出啊,我把他换成了cout<<"-------------";测试了一下也没有输出”------------“这个,这是怎么回事啊???请大家帮忙
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
MyBatis研习录(01)——MyBatis概述与入门
C语言自学完备手册(33篇) Android多分辨率适配框架 JavaWeb核心技术系列教程 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往——自定义View系列教程(10篇) 走出思维困境,踏上精进之路——Android开发进阶精华录 讲给Android程序员看的前端系列教程(40集免费视频教程+源码) 版权声明 本文原创作者:谷哥的小弟 作者博客
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序
Python:爬取疫情每日数据
前言 有部分同学留言说为什么412,这是因为我代码里全国的cookies需要你自己打开浏览器更新好后替换,而且这个cookies大概只能持续20秒左右! 另外全国卫健委的数据格式一直在变,也有可能会导致爬取失败! 我现在已根据2月14日最新通报稿的格式修正了! 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 为什么已经有大量平台做
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
粒子群算法求解物流配送路线问题(python)
粒子群算法求解物流配送路线问题(python) 1.查找论文文献 找一篇物流配送路径优化+粒子群算法求解的论文 参考文献:基于混沌粒子群算法的物流配送路径优化 2.了解粒子群算法的原理 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/details/81382794 3.确定编码方式和解码策略 3.1编码方式 物流配送路线的
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang.
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
情人节来了,教你个用 Python 表白的技巧
作者:@明哥 公众号:Python编程时光 2020年,这个看起来如此浪漫的年份,你还是一个人吗? 难不成我还能是一条狗? 18年的时候,写过一篇介绍如何使用 Python 来表白的文章。 虽然创意和使用效果都不错,但有一缺点,这是那个exe文件,女神需要打开电脑,才有可能参与进来,进而被你成功"调戏”。 由于是很早期的文章了,应该有很多人没有看过。 没有看过的,你可以点击这里查看:用Pyt...
用Python开发实用程序 – 计算器
作者:隋顺意 一段时间前,自己制作了一个库 “sui-math”。这其实是math的翻版。做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于计算器,很多复杂的计算都离不开它。我们使用过各式各样的计算器,无论是电脑自带的,还是网也上的计算器,却都没有自己动手编写属于自己计算器。今天就让我们走进计算器的世界,用python来编写...
经典算法(19)教你两分钟学会【选择排序】
这篇博客使用图文并茂的方式讲解选择排序算法,并有完整的算法逻辑以及代码实现。
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
用Python打造你的专属情人节贺卡,赶快发给TA浪漫一下吧
明天就是情人节了。这个情人节,注定是一个不能约会的情人节,但不能约会不代表不能浪漫。古人比我们出生早,那些浪漫的诗词早都被他们挖掘一空,比诗词我们肯定没有机会了。好在我们还有Python,不然都不知道该如何表达浪漫。接下来,浪导教你制作一个浪漫的情人节专属贺卡。
Python绘图与可视化
文章目录使用的库Matplotlib程序包绘图命令的扩展及其属性设置 使用的库 Python有很多可视化工具,如:Matplotlib。 Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本、IPython的交互环境下、Web应用程序中使用。如果结合使用一种GUI工具包(如IPython),Matplotlib还具有诸如缩放和平移等交互功能。它不仅支持各...
计算机考研经验总结
计算机考研指导建议背景开始备考时间学校选择复习计划学科复习考研资料和平台心得杂杂答疑 背景     我是广东双非本科计算机类专业,大一高数没学好,英语在大四最后一次考试里过了6级,专业课掌握情况尚好。选择报考暨南大学,因为它的专业课那年只考一门数据结构,而我数据结构学的还不错,不用在专业课上花很多的时间。暨南大学和华师是广东省内仅有的两所211高校,而听说华师学校稍老,环境没有暨大好。 开始备考时...
MySQL表的增删查改(提高篇)
MySQL表的增删查改(基本篇) 接上一篇MySQL表基本的增删查改,下面看一下提高篇: 一、数据库约束 1、约束类型 NOT NULL:不为空约束。创建表时,可以指定某列不为空 UNIQUE :唯一约束。指定某列为唯一的、不重复的 DEFAULT :默认值约束。指定插入数据时,某列为空,设置默认值 PRIMARY KEY : 主键约束。NOT NULL 和 UNIQUE 的结合。确保某列(或两个...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问