求解为何int[]数组在赋值后,数组元素还是为空 30C

这是自定义View里面的一个方法

 public void countPerDay(int[] newString){
        countTimes = newString;
        Log.d("TestInCountPerDay", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6]));
        postInvalidate();
    }

在另一个类的onReceive调用这个方法,传入参数

 ResultView resultView = new ResultView();
 resultView.countPerDay(drawCountTimes);

View代码

public class ResultView extends View{

    private float mMinSize;
    private int mWidth;
    private int mHeight;
    private int mHeightUp;
    private int mBackgroundCorner;
    private int mStrokeWidth;
    private int mArcCenterX;
    private int mArcCenterY;

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    Calendar ca = Calendar.getInstance();

    private int[] days = new int[7];
# # private int[] countTimes = new int[7];

    private RectF mArcRect;

    private Paint mBackgroundPaint;
    private Paint mStrokePaint;
    private Paint mTextPaint;
    private Paint mLinePaint;
    private Paint mBarPaint;
    private SweepGradient mSweepGradient;

    private int[] mSteps;

    private String screenOffTimes = "";
    private String unlockTimes = "";

    public ResultView(Context context) {
        super(context, null);
    }

    public ResultView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ResultView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        init();
    }

    //接受从Async传来的数据,把值附给给countTime
    public void countTimes(String string,String string2){
        this.screenOffTimes = string;
        this.unlockTimes = string2;
        postInvalidate();
    }

##     public void countPerDay(int[] newString){
##         countTimes = newString;
##         Log.d("TestInCountPerDay", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6]));
##         postInvalidate();
##     }


    public void init(){
        mBackgroundPaint = new Paint();
        mBackgroundPaint.setAntiAlias(true);
        mBackgroundPaint.setColor(Color.RED);
        mStrokePaint = new Paint();
        mStrokePaint.setAntiAlias(true);
        mStrokePaint.setStyle(Paint.Style.STROKE);
        mStrokePaint.setDither(true);                    // set the dither to true
        mStrokePaint.setStrokeJoin(Paint.Join.ROUND);    // set the join to round you want
        mStrokePaint.setStrokeCap(Paint.Cap.ROUND);      // set the paint cap to round too
        mStrokePaint.setPathEffect(new CornerPathEffect(10));   // set the path effect when they join.

        mTextPaint = new Paint();
        mTextPaint.setAntiAlias(true);

        mLinePaint = new Paint();
        mLinePaint.setAntiAlias(true);
        mLinePaint.setColor(0xFF77838F);
        mLinePaint.setStyle(Paint.Style.STROKE);
        mLinePaint.setPathEffect(new DashPathEffect(new float[]{10, 3}, 0));

        mBarPaint = new Paint();
        mBarPaint.setAntiAlias(true);
        mBarPaint.setColor(0xFF63CFEC);
        mBarPaint.setStrokeCap(Paint.Cap.ROUND);

        mArcRect = new RectF();

        //柱状图的数值如下
        mSteps = new int[]{9000,12000,8900, 9200,7000,0,6000};

        ca.setTime(new Date());
        for (int i = 0;i<7;i++){
            ca.add(Calendar.DATE, -1);
            days[6-i]= Integer.parseInt(new SimpleDateFormat("dd").format(ca.getTime()));
        }


    }

    private void initSize(){
        mWidth = (int) (570*mMinSize);
        mHeight = (int) (650*mMinSize);
        mHeightUp = (int) (550*mMinSize);
        mBackgroundCorner = (int) (13*mMinSize);

        mStrokeWidth = (int) (20*mMinSize);

        mArcCenterX = mWidth/2;
        int arcRadius = (int) ((308 / 2) * mMinSize);
        mArcCenterY = (int) (200 * mMinSize);
        mArcRect.left = mArcCenterX - arcRadius;
        mArcRect.top = mArcCenterY - arcRadius;
        mArcRect.right = mArcCenterX + arcRadius;
        mArcRect.bottom = mArcCenterY + arcRadius;
        int[] colors = {0xFF9A9BF8,0xFF9AA2F7, 0xFF65CCD1,0xFF63D0CD,0xFF68CBD0,0xFF999AF6,0xFF9A9BF8};
        float[] positions = {0,1f/6,2f/6,3f/6,4f/6,5f/6,1};
        mSweepGradient = new SweepGradient(mArcCenterX, mArcCenterX, colors , positions);
    }

    @Override
    protected void onDraw(Canvas canvas) {

##         Log.d("TestInOnDraw", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6]));

        // 1.draw background
        mBackgroundPaint.setColor(0xFF4C5A67);
        drawUpRoundRect(0, 0, mWidth, mHeightUp, mBackgroundCorner, mBackgroundPaint, canvas);
        mBackgroundPaint.setColor(0xFF496980);
        drawBelowRoundRect(0, mHeightUp, mWidth, mHeight, mBackgroundCorner, mBackgroundPaint, canvas);

        // 2.draw arc
        mStrokePaint.setStrokeWidth(mStrokeWidth);
        mStrokePaint.setShader(mSweepGradient);
        canvas.drawArc(mArcRect, -240, 300, false, mStrokePaint);
        //Intent intent = new Intent();

        //int a = Integer.parseInt(intent.getStringExtra("countTime"));
        // 3.draw text
        float xPos, yPos;
        mTextPaint.setTextAlign(Paint.Align.CENTER);
        mTextPaint.setColor(Color.WHITE);
        mTextPaint.setTextSize(80 * mMinSize);
        yPos = mArcCenterY-((mTextPaint.descent() + mTextPaint.ascent()) / 2);
        //drawText直接显示数值
        canvas.drawText(screenOffTimes, mArcCenterX, yPos, mTextPaint);
        mTextPaint.setColor(0xFF828E98);
        mTextPaint.setTextSize(20 * mMinSize);
        yPos = 140*mMinSize -((mTextPaint.descent() + mTextPaint.ascent()) / 2);
        canvas.drawText("截至"+sdf.format(new Date())+"已点亮屏幕", mArcCenterX, yPos, mTextPaint);
        yPos = 260*mMinSize -((mTextPaint.descent() + mTextPaint.ascent()) / 2);
        canvas.drawText("其中解锁"+unlockTimes+"次", mArcCenterX, yPos, mTextPaint);
        mTextPaint.setColor(Color.WHITE);
        xPos = mArcCenterX - 40*mMinSize;
        yPos = 380 * mMinSize;
        canvas.drawText("第", xPos, yPos, mTextPaint);
        xPos = mArcCenterX + 40*mMinSize;
        canvas.drawText("名", xPos, yPos, mTextPaint);
        mTextPaint.setTextSize(30 * mMinSize);
        canvas.drawText("44", mArcCenterX, yPos, mTextPaint);


        mTextPaint.setTextSize(18*mMinSize);
        mTextPaint.setColor(0xFF77838F);
        mTextPaint.setTextAlign(Paint.Align.LEFT);
        xPos = 30*mMinSize;
        yPos = 420*mMinSize;
        canvas.drawText("最近7天",xPos, yPos, mTextPaint);

        mTextPaint.setTextAlign(Paint.Align.RIGHT);
        xPos = 540 * mMinSize;
        yPos = 420*mMinSize;
        canvas.drawText("平均125次/天", xPos, yPos, mTextPaint);

        // 4. draw dash line
        xPos = 30 * mMinSize;
        yPos = 440 * mMinSize;
        mLinePaint.setStrokeWidth(2*mMinSize);
        canvas.drawLine(xPos, yPos, mWidth - xPos, yPos,mLinePaint);

        // 5. draw bars and date
        mBarPaint.setStrokeWidth(mStrokeWidth);
        float halfBarGap = 510 * mMinSize / 14;
        float maxLength = 440 * mMinSize;
        yPos = 480 * mMinSize;
        int maxBar = 0;
        for(int step : mSteps){
            if(step > maxBar){
                maxBar = step;
            }
        }
        float length;
        mTextPaint.setColor(Color.WHITE);
        mTextPaint.setTextSize(18*mMinSize);
        mTextPaint.setTextAlign(Paint.Align.CENTER);
        for(int i = 0; i < mSteps.length; i++){
            xPos = (2*i+1)* halfBarGap + 30 *mMinSize;
            length = (yPos - maxLength) * mSteps[i]*1f/maxBar;
            canvas.drawLine(xPos, yPos, xPos, yPos -length, mBarPaint );
            //画出柱状图下面的日期
            String date = String.format("%02d日", days[i]);
            canvas.drawText(date,xPos, 520*mMinSize, mTextPaint );
        }

        // 6.draw text below
        mTextPaint.setTextAlign(Paint.Align.LEFT);
        mTextPaint.setColor(Color.WHITE);
        mTextPaint.setTextSize(23 * mMinSize);
        canvas.drawText("这是被隐藏的内容", 30 * mMinSize, 610 * mMinSize, mTextPaint);
        mTextPaint.setTextAlign(Paint.Align.RIGHT);
        mTextPaint.setColor(0xFF63CFEC);
        canvas.drawText("查看  >", 540 * mMinSize, 610 * mMinSize, mTextPaint);

    }



    private void drawUpRoundRect(float left, float top, float right, float bottom, float radius, Paint paint, Canvas canvas) {
        Path path = new Path();
        path.moveTo(left, top);
        path.lineTo(right-radius, top);
        path.quadTo(right, top, right, top + radius);
        path.lineTo(right, bottom);
        path.lineTo(left, bottom);
        path.lineTo(left, top + radius);
        path.quadTo(left, top, left + radius, top);
        canvas.drawPath(path, paint);
    }
    private void drawBelowRoundRect(float left, float top, float right, float bottom, float radius, Paint paint, Canvas canvas) {
        Path path = new Path();
        path.moveTo(left, top);
        path.lineTo(right, top);
        path.lineTo(right, bottom-radius);
        path.quadTo(right, bottom,right-radius,bottom);
        path.lineTo(left + radius, bottom);
        path.quadTo(left,bottom,left,bottom-radius);
        path.lineTo(left, top);
        canvas.drawPath(path, paint);
    }



    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int desiredWidth = Integer.MAX_VALUE;
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);

        int width;
        int height;

        //Measure Width
        if (widthMode == MeasureSpec.EXACTLY) {
            //Must be this size
            width = widthSize;
        } else if (widthMode == MeasureSpec.AT_MOST) {
            width = Math.min(desiredWidth, widthSize);
        } else {
            //Be whatever you want
            width = desiredWidth;
        }
        mMinSize = width/570.f;
        int desiredHeight = (int) (mMinSize*650);
        initSize();
        //Measure Height=
        if (heightMode == MeasureSpec.EXACTLY) {
            //Must be this size
            height = heightSize;
        } else if (heightMode == View.MeasureSpec.AT_MOST) {
            //Can't be bigger than...
            height = Math.min(desiredHeight, heightSize);
        } else {
            //Be whatever you want
            height = desiredHeight;
        }

        //MUST CALL THIS
        setMeasuredDimension(width, height);
    }

}

可是传递过来的数据在onDraw里面不生效,只在countPerDay里面生效(就是在countPerDay里面打log,数值都是正常的。但是在onDraw里面打log就全部都为0)

这是为何,本人初学小白,请大神们指教。

3个回答

onDraw的代码呢?

PiGeek
小小玲啊 谢谢你,我学习一下~
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: activity和service的几种交互方式 http://blog.csdn.net/zhang31jian/article/details/7961506
接近 4 年之前 回复
PiGeek
小小玲啊 ResultView resultView = new ResultView()是在BroadcastReceiver里面创建的,我一想可能真不是同一个。可是该怎么改呢
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: 如果是service中ResultView resultView = new ResultView();和你前端显示的不是同一个吧
接近 4 年之前 回复
PiGeek
小小玲啊 不行哦,还是老样子。我是在service里面向BroadcastReceiver发送消息,BroadcastReceiver捕捉到后把相关数据通过countPerDay传递给View
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: 嗯,看到postInvalidate了,你应该是在其他thread中调用该方法的?加上volatile ,同步线程变量 private volatile int[] countTimes = new int[7];
接近 4 年之前 回复
PiGeek
小小玲啊 回复danielinbiti: 有的哦,数值变化之后也会刷新一次view。但是得到的数值也是0
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: 不是,调用countPerDay后,有界面刷新之类,使得onDraw调用到嘛?还是说就是在界面初始化的时候调用了一次onDraw
接近 4 年之前 回复
PiGeek
小小玲啊 回复danielinbiti: 调用resultView.countPerDay(drawCountTimes)是在另外一个onReceive里面调用的,在这里面打印drawCountTimes的数值也是正常的
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: 调用resultView.countPerDay(drawCountTimes);这句后有onDraw内容的打印吗?
接近 4 年之前 回复
PiGeek
小小玲啊 已经贴上了哦,需要指点的地方也加上##号了~
接近 4 年之前 回复
danielinbiti
danielinbiti 回复PiGeek: 你得把具体代码贴出来,照上面这么写,且顺序也没错,那肯定不会出错
接近 4 年之前 回复
PiGeek
小小玲啊 就是传过来的数组数据只在countPerDay这个方法里面是被赋值了的,在其他地方全部为空,不管是onDraw或是其他什么地方
接近 4 年之前 回复

额,代码也太长啦吧,你可以简单说下问题

传递自定义什么嘛vv

PiGeek
小小玲啊 啊?就是通过countPerDay传入int[]数组呗
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求解:算法设计与分析题
求解各位大神,感谢回答。 考虑下面的算法: 输入: n个元素的数组A 输出:按递增顺序排序的数组A 1. void bubblesort(int A[],int n) 2. { 3. int j,i,sorted; 4. i=sorted=0; 5. while(i<n-1 && !sorted) { 6. sorted=1; 7. for(j=n-1;j>i;j--) { 8. if(A[j]<A[j-1]) { 9. temp=A[j]; 10. A[j]=A[j-1]; 11. A[j-1]=temp; 12. sorted=0; 13. } 14. } 15. i=i+1; 16. } 17. } (1) 算法所执行的元素比较次数最少是多少次?什么时候达到最少? (2) 算法所执行的元素比较次数最多是多少次?什么时候达到最多? (3) 算法所执行的元素赋值次数最少是多少次?什么时候达到最少? (4) 算法所执行的元素赋值次数最多是多少次?什么时候达到最多? (5) 用О、和Ω记号表示算法的运行时间。 (6) 可以用Θ记号来表示算法的运行时间吗?请说明。
C++编程新手求解:结构体与数组问题?
``` #include <iostream> using namespace std; struct bits1 //位域结构体 { unsigned char a : 1; //整数范围0~1 unsigned char b : 3; //整数范围0~7 unsigned char c : 4; //整数范围0~15 }; struct bits2 { unsigned short a : 1; //整数范围0~1 unsigned short b : 3; //整数范围0~7 unsigned short c : 4; //整数范围0~15 }; void main( ) { cout << "bits1: " << sizeof (bits1)*8 << endl; cout << "bits2: " << sizeof (bits2)*8 << endl; bits2 bit, *pbit = &bit; //定义结构体指针 bit.a = 1; bit.b = 7; bit.c = 15; cout << bit.a << " " << bit.b << " " << bit.c << endl; pbit->a = 0; pbit->b = 0; pbit->c = 0; //指针访问成员 cout << pbit->a << " " << pbit->b << " " << pbit->c << endl; system("pause"); } ``` 请对上面的程序作出以下修改: (1)写一个输出函数,输出各个data,使其不在main 中输出。函数原型为: void showNodeData( NODE *head ) ; (2)写一个逆序输出函数,以逆序输出各个NODE 的data 值。函数原型为: void reverseShowNodeData( NODE *head ) ;如果需要额外空间,请在本函数中动态分配及释放。 (3)写一个均值函数,计算各个data 的均值并返回。函数原型为:double averageNodeData( NODE *head ) ; (4)写一个查找函数,在各个data 中查找某个值KEY。函数原型为:NODE * searchNodeData( NODE *head, int KEY ) ;如果找到了,返回该NODE 地址并输出data;如果没找到,返回NULL 指针。 (5)写一个插入函数,在第K 个位置插入一个newNODE。函数原型为: bool InsertNode( NODE *head, int K, NODE *newNODE ) ;在main 函数中为newNODE 分配空间并赋值data(data 值自定)。如果插入成功返回true,并输出各个data 以证明插入成功。失败返回false。插入成功、失败的条件是什么? (6)写一个删除函数,删除第K 个位置上的NODE。函数原型为:bool DelNode( NODE *head, int K ) ; 如果删除成功,释放该NODE 内存并返回true,输出各个data 以证明删除成功。如果删除失败,给出提示信息并返回false。 (7)原题new 分配的所有NODE 内存都没有释放,编一个释放函数,原型如下:void DelList( NODE *head ) ; C++新手求各路大神解答,定感恩不尽!
一个很简单的循环 放在某个赋值语句后面 会导致segment fault 求解!
main中有个for循环 如果该循环放在给一大堆ST赋值的后面 会提示segment fault 但是放在前面 却没有问题,想知道是为什么。谢谢大神们! ``` #include <stdio.h> typedef struct { int key; //info; }ElemType; typedef struct { ElemType * elem; int length; }SSTable; int main() { int i; { SSTable ST; ST.elem[1].key = 5; ST.elem[2].key = 13; ST.elem[3].key = 19; ST.elem[4].key = 21; ST.elem[5].key = 37; ST.elem[6].key = 56; ST.elem[7].key = 64; ST.elem[8].key = 75; ST.elem[9].key = 80; ST.elem[10].key = 88; ST.elem[11].key = 92; ST.length=11; } for(i=0;i<9;i++) printf("%d\n", i); /*printf("使用顺序查找\n"); printf("元素56的位置为%d\n",Search_Seq(ST,56)); printf("元素23的位置为%d,不存在\n",Search_Seq(ST,23)); printf("使用折半查找\n"); printf("元素88的位置为%d\n",Search_Bin(ST,88)); printf("元素24的位置为%d,不存在\n",Search_Bin(ST,24));*/ } ```
这个地方,将s赋值有什么意义,为什么不能将s直接初始化为0呢(定积分求解,(*f)指的是函数
这个地方,将s赋值有什么意义,为什么不能将s直接初始化为0呢 ``` float I(float (*f)(float), float a, float b) { float s, h; int n = 100, i; h = (b - a) / n; s = ((*f)(a) + (*f)(b)) / 2.0; for (i = 0; i < n; i++) { s+=(*f)(a + i * h); } return s * h; } ```
为什么调用函数参与运算再给变量赋值,数就不对了
求线性回归方程a和b值,结果明显不对 代码如下 #include <stdio.h> //调用库函数 int main() //主函数 { float aver(float a[],int); //声明求均值函数 float Temp_X[96] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.46667, 11.4667, 31.6, 52.7333, 80.3333, 116.333, 156.6, 199.4, 242.2, 283.4, 329.2, 379.333, 431.333, 482.6, 541, 594.4, 643.533, 692.133, 736.267, 772.667, 810.133, 841.867, 868.2, 892.4, 917.667, 939.8, 954.667, 969, 976.8, 983.4, 987.467, 994.933, 1023.67, 875.2, 873.933, 758.8, 678.2, 515.867, 782.533, 908.8, 779.2, 831.4, 645.533, 734.067, 679.533, 610.267, 565.067, 512.467, 462, 405.2, 354.133, 302, 247.8, 191.533, 140, 94.2667, 57.5333, 25.9333, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //定义初始化数组X float Temp_Y[96] = {0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 0.595, 1.785, 2.57833, 3.927, 5.79233, 7.379, 9.48133, 11.1473, 12.4167, 13.6627, 16.193701, 18.248699, 19.042, 19.042, 19.105301, 16.6383, 17.240999, 14.631, 11.8217, 11.663, 12.155, 15.488, 21.859301, 19.32, 19.042, 19.6133, 21.105, 22.9937, 20.827299, 23.858299, 23.0333, 19.2883, 15.6937, 21.5893, 23.802999, 20.518299, 21.5893, 17.907301, 17.971001, 17.574301, 16.781, 15.5513, 12.3773, 10.2747, 8.60867, 6.86333, 5.39567, 3.88767, 2.856, 2.142, 2.142, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952, 0.952 }; //定义初始化数组Y float a,b,sum1=0,sum2=0; //定义变量,a,b为线性回归方程y=ax+b中a,b的值,sum1,sum2,为求a时分步求解用的变量 int i,j; //i,j为循环时使用的变量 for(i=0;i<96;i++) { sum1+=(Temp_X[i]*Temp_Y[i]); sum2+=(Temp_X[i]*Temp_X[i]); } a=(sum1-96*aver(Temp_X,96)*aver(Temp_Y,96))/(sum2-96*aver(Temp_X,96)*aver(Temp_X,96)); //通过线性回归方程公式求出a值 b=aver(Temp_Y,96)-(a*aver(Temp_X,96)); printf("a=%f,b=%f",a,b); } float aver(float a[],int n) //求均值的函数 { //用for循环求出所有值的和,再除以个数n int i; float sum; for(i=0;i<n;i++) { sum+=a[i]; } return sum/n; //返回结果 }
java求解约瑟夫问题 求高人指点
public static void main(String[] args){ System.out.println("程序说明如下:"); System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序."); //提示输入总人数 System.out.println("请输入做这个游戏的总人数:"); Scanner sca=new Scanner(System.in); int m=sca.nextInt(); //提示输入要出圈的数值 System.out.println("请输入要出圈的数值:"); int n=sca.nextInt(); System.out.println("按出圈的次序输出序号:"); //创建有m个值的数组 int[] a=new int[m]; //初始长度,以后出圈一个,长度就减一 int len=m; //给数组赋值 for(int i=0;i<a.length;i++) a[i]=i+1; //i为元素下表,j代表当前要报的数 int i=0; int j=1; while(len>0){// if(a[i%m]>0){ if(j%n==0){//找到要出圈的人,并把圈中人数减一 System.out.print(a[i%m]+" "); a[i%m]=-1; j=1; i++; len--; }else{ i++; j++; } }else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数 i++; } }// } 其中if(a[i%m]>0)这一项不是恒大于0吗 那后面的else语句的意义是 还有就是这个 a[i%m]=-1; 的作用是什么 不是很明白 求高人指点
switch 未赋值的局部变量 求解 谢谢
int a = 1; string b; switch (a) { case 0: b = "0"; break; case 1: b = "1"; break; } textBox1.Text = b;
使多个数移位输出,应用指针时出错,求解
要达到的目的是输入n = 5, a = {1,2,3,4,5},m = 3时能输出 4 5 1 2 3 可在对指针所指的值赋值时出错,是语法问题吗?代码见下: ``` /*移位m个整数*/ #include <stdio.h> #include <stdlib.h> int* a = 0, *a1 = 0; int* move(int* a,int n,int m); int main() { int n; printf("Please input the size: "); scanf("%d",&n); //为数组动态分配大小 if (!(a = (int* )calloc(n,sizeof(int)))) { printf("Fail to allocate memory!!!\n"); exit(1); } printf("Please input %d numbers: ",n); for (int i = 0; i < n; i++) scanf("%d",a + i); int m; printf("Please input m: "); scanf("%d",&m); a1 = move(a,n,m); //输出新排列 for (int j = 0; j < n; j++) printf("%6d",a1 + j); system("pause"); return 0; } int* move(int* a, int n,int m) { for (int i = m; i < n; i++) { *(a1 + i -m) = *(a + i); // 编译时这里内存报错,但不知为什么错,怎么改 } for (int j = 0; j < m; j++) { *(a1 + n + j) = *(a + j); } return a1; } ```
C++大整数求和算法求解
我们课程设计叫写一个大整数求和的算法,但是在重载加法运算符的时候出现了一个bug,一直不知道错在哪里,怎么改,但是大概知道应该是数据类型不匹配的缘故,可就是不知道到底怎么改,求解!!! 主函数部分: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //功能函数声明 void menu();//主界面函数 int main() { //测试 string a = "992"; string b = "74"; bigInt b1(a);//定义测试数据 bigInt b2(b); bigInt temp;//定义一个临时变量用来存储计算结果 我们课程设计叫写一个大整数求和的算法,但是在重载加法运算符的时候出现了一个bug,一直不知道错在哪里,怎么改,但是大概知道应该是数据类型不匹配的缘故,可就是不知道到底怎么改,求解!!! 主函数部分: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //功能函数声明 void menu();//主界面函数 int main() { //测试 string a = "992"; string b = "74"; bigInt b1(a);//定义测试数据 bigInt b2(b); bigInt temp;//定义一个临时变量用来存储计算结果 temp = b1 + b2; system("pause"); return 0; } bigInt.h: #ifndef BIG_INT_H #define BIG_INT_H #include<string> //大整数的结构 class bigInt { public: friend ostream& operator<<(ostream &output, bigInt &a);//重载输出流运算符 friend bigInt operator+ (bigInt &a, bigInt &b);//重载加法运算 friend bigInt operator- (bigInt &a, bigInt &b);//重载减法运算 friend bigInt operator* (bigInt &a, bigInt &b);//重载乘法运算 friend bigInt operator/ (bigInt &a, bigInt &b);//重载除法运算 bigInt(string a);//构造函数,初始化表示大整数的这个数组 bigInt();//默认构造函数 ~bigInt();//析构函数 bigInt& operator= (bigInt &a);//重载赋值运算 private: int * m_bigInt; //顺序表的数组 int m_length; const int maxCapcity; }; #endif bigInt.cpp: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //成员函数实现 bigInt& bigInt::operator=(bigInt &a) { for (int i = 0; i<a.m_length; i++) m_bigInt[i] = a.m_bigInt[i]; m_length = a.m_length; return *this; } bigInt::bigInt() :maxCapcity(30) //默认构造函数 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 } bigInt::bigInt(string a) :maxCapcity(30) //构造函数建立顺序表 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 //将字符数组转化为整型数组 int j = 0; for (int i = a.length() - 1; i >= 0; i--, j++)//将大整数的低位存储到数组的低位 { m_bigInt[j] = 0 + a[i] - 48; m_length++; } } bigInt::~bigInt() { delete[]m_bigInt; m_bigInt = NULL; m_length = 0; } //友元函数的实现 ostream& operator<<(ostream &output, bigInt &a) { for (int i = a.m_length - 1; i >= 0; i--) output << a.m_bigInt[i]; return output; } bigInt operator+ (bigInt &a, bigInt &b) { int flag = 0;//进位标志 bigInt temp; int m = a.m_length>b.m_length ? (b.m_length) : (a.m_length); int i = 0;//循环变量 for (i = 0; i<m; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + b.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + b.m_bigInt[i] + flag) / 10; } for (; i<a.m_length; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + flag) / 10; } for (; i<b.m_length; i++) { temp.m_bigInt[i] = (b.m_bigInt[i] + flag) % 10; flag = (b.m_bigInt[i] + flag) / 10; } if (flag == 1) { temp.m_bigInt[i] = 1; temp.m_length = a.m_length>b.m_length ? (a.m_length + 1) : (b.m_length + 1); } return temp; } temp = b1 + b2; system("pause"); return 0; } bigInt.h: #ifndef BIG_INT_H #define BIG_INT_H #include<string> //大整数的结构 class bigInt { public: friend ostream& operator<<(ostream &output, bigInt &a);//重载输出流运算符 friend bigInt operator+ (bigInt &a, bigInt &b);//重载加法运算 friend bigInt operator- (bigInt &a, bigInt &b);//重载减法运算 friend bigInt operator* (bigInt &a, bigInt &b);//重载乘法运算 friend bigInt operator/ (bigInt &a, bigInt &b);//重载除法运算 bigInt(string a);//构造函数,初始化表示大整数的这个数组 bigInt();//默认构造函数 ~bigInt();//析构函数 bigInt& operator= (bigInt &a);//重载赋值运算 private: int * m_bigInt; //顺序表的数组 int m_length; const int maxCapcity; }; #endif bigInt.cpp: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //成员函数实现 bigInt& bigInt::operator=(bigInt &a) { for (int i = 0; i<a.m_length; i++) m_bigInt[i] = a.m_bigInt[i]; m_length = a.m_length; return *this; } bigInt::bigInt() :maxCapcity(30) //默认构造函数 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 } bigInt::bigInt(string a) :maxCapcity(30) //构造函数建立顺序表 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 //将字符数组转化为整型数组 int j = 0; for (int i = a.length() - 1; i >= 0; i--, j++)//将大整数的低位存储到数组的低位 { m_bigInt[j] = 0 + a[i] - 48; m_length++; } } bigInt::~bigInt() { delete[]m_bigInt; m_bigInt = NULL; m_length = 0; } //友元函数的实现 ostream& operator<<(ostream &output, bigInt &a) { for (int i = a.m_length - 1; i >= 0; i--) output << a.m_bigInt[i]; return output; } bigInt operator+ (bigInt &a, bigInt &b) { int flag = 0;//进位标志 bigInt temp; int m = a.m_length>b.m_length ? (b.m_length) : (a.m_length); int i = 0;//循环变量 for (i = 0; i<m; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + b.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + b.m_bigInt[i] + flag) / 10; } for (; i<a.m_length; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + flag) / 10; } for (; i<b.m_length; i++) { temp.m_bigInt[i] = (b.m_bigInt[i] + flag) % 10; flag = (b.m_bigInt[i] + flag) / 10; } if (flag == 1) { temp.m_bigInt[i] = 1; temp.m_length = a.m_length>b.m_length ? (a.m_length + 1) : (b.m_length + 1); } return temp; }
C# 多线程,记录每个线程运行时间
本人菜鸟,在校学生。 最近在学习多线程技术,实现了一个求解数组中最小值的方法,但是在测试多线程与单线程的计算速度时,却不知道那个才是多线程的运行时间(尴尬到窒息!) *多线程求数组中最小值思想:将一个数组分为两个等大的子数组,并新建两个子线程分别求解每个子数组中的最小值,保存在一个全局变量中。* 源程序如下: using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Diagnostics; namespace Multithread_PSO { class Program { //定义锁 private static readonly object locker = new object(); static void Main(string[] args) { //元素个数 int EleCounts = 100000; //待处理数组 int[] MyArr = new int[EleCounts]; //前半段数组 int[] TempArr1 = new int[EleCounts / 2]; //后半段数组 int[] TempArr2 = new int[EleCounts / 2]; for (int i = 0; i < EleCounts; i++) { int iSeed = DateTime.Now.Millisecond; Random rd = new Random(iSeed+i); //随机给数组赋值 MyArr[i] = rd.Next(EleCounts); //将数组拆分为两个大小相等的数组 if(i<EleCounts/2) { TempArr1[i] = MyArr[i]; } else { TempArr2[i - EleCounts / 2] = MyArr[i]; } } //主线程 FindMinElement(MyArr); //新建两个线程th1,th2 Thread th1 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th1.Name = "子线程1"; Thread th2 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th2.Name = "子线程2"; Stopwatch sw = new Stopwatch(); sw.Start(); th1.Start(TempArr1); //th1.Join(); th2.Start(TempArr2); //th2.Join(); sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("多线程获得最小值为: {0}, 计时器3共耗时:{1}/ms!\n", MinValue, ts2.TotalMilliseconds); Console.ReadKey(); } public static void thFindMinElement(object DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = (int[])DivMyArr; if (IsFirstRun) { MinValue = MyArr[0]; IsFirstRun = false; } for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("当前线程名称(ID)为:{1} ({0}),最小值为:{2},共耗时:{3}/ms!\n", ThNumber, Thread.CurrentThread.Name, MinValue, ts2.TotalMilliseconds); } public static void FindMinElement(int[] DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = DivMyArr; MinValue = MyArr[0]; for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("主线程ID为:{0},最小值为: {1}, 共耗时:{2}/ms!\n", ThNumber, MinValue, ts2.TotalMilliseconds); } private static int minValue; private static bool IsFirstRun = true; private static int MinValue { get { lock (locker) { return minValue; } } set { minValue = value; } } } } ***问题1:*** 如果不添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881888_346609.png) ***问题2:*** 如果添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881971_593742.png) ***问题3:*** 如果均不是,那该怎么计算多线程的总运行时间呢,还望大神不吝赐教!!!
mdk5明明只定义了一遍int deng,为什么编译后会提示错误重复定义?
main.c 赋值 deng=1; inf.h定义 int deng; inf.c判断 void iff(void){ if(deng==1){} } test.c调用iff 为什么只定义了一遍的deng,会出错误提示重复定义。 Error: L6200E: Symbol deng multiply defined (by inf.o and main.o). Error: L6200E: Symbol deng multiply defined (by test.o and main.o). Not enough information to list image symbols. Not enough information to list the image map. 求解
哪位前辈能帮我看一下这个自加问题?
下面是代码 ``` #include <stdio.h> int main(void) { int a = 22; int i = 0; a = a++; i = ++i; printf("%d %d",a,i); return 0; } ``` 运行结果是22 1 我只想知道为什么a还是22不是应该a先赋值后自加1,然后输出不是应该是23吗?求解
数据结构函数的问题求解
如果这是一个一个结构体。 typedef struct list { struct list *prior ; struct list *next; int num; } list,*dlist; 问题1:比如我写一个创建函数,我通常是void create_list(dlist L,int n); 但是我看有的地方括号里面的第一个形参不是星号,而是&,麻烦跟我讲一下。是不是传递的不是指针,是一个对象名的引用?是不是对顺序链表这么做好一点? 问题2:上次还有人跟我说第一个形参要用二次指针,否则必须return L;才能改动L;但是我没有这么做也是对的,麻烦帮我解释一下 问题3:关于头节点,那个num是不是不用赋值,或者赋值为0或者其他?为什么啊? 问题4:同样是创建函数,我看有的地方写的是void create_list(L,n) dlist L;int n;{ }我查了下说以前的标准支持这么写,我们老师给我们的代码中也有这么写的。昨天一个研究生让我重看一遍C语言。太打击人了。虽然我不这么定义。
关于数据结构栈的赋值
#include <iostream> using namespace std; typedef int SElemType; //ÕâÀï¿ÉÐÞ¸ÄÕ»ÖÐËù´æµÄÔªËØ #define STACK_INIT_SIZE 100 //¶¨Òå³õʼ»¯Õ»Ê±µÄ×î´óÖµ #define STACKINCREMENT 10 //¶¨Òåջÿ´ÎÔö¼ÓµÄ´æ´¢¿Õ¼ä´óС typedef struct{ SElemType *base; //¶¨Òå½á¹¹Ìå:Õ» SElemType *top; int stacksize; }SqStack; bool InitStack(SqStack &s){ //Õ»µÄ³õʼ»¯º¯Êý s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(s.base=NULL) return false; s.top=s.base; s.stacksize=STACK_INIT_SIZE; return true; } bool GetTop(SqStack s,SElemType &e){ if(s.top==s.base) return false; e=*(s.top-1); //topÖ¸Õë×ÜÊÇÖ¸Ïò×îÍâÔªËصÄÉÏ·½ return true; } bool Push(SqStack &s,SElemType e){ //ѹջ£¬¶ÁÈ¡Êý¾Ý½øÈëÕ» if(s.top-s.base>=STACK_INIT_SIZE){ s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(s.base==NULL) return false; s.top=s.base+s.stacksize; //½«topÖ¸ÕëÖÃÓÚÕ»¶¥ s.stacksize+=STACKINCREMENT; } *(s.top)=e; //ÏȶÔtopÖ¸ÕëËùÖ¸ÔªËظ³Öµ£¬ÔÙ½«topÖ¸ÕëÖÃÓÚÕ»¶¥ s.top++; return true; } bool Pop(SqStack &s,SElemType &e){ //µ¯³öÔªËØe ´«µÝÒýÓà if(s.base==s.top) return false; s.top--; //ÏȽ«top×Ô¼õ£¬È»ºó²ÅÄÜÈ¡µ½Õ»¶¥ÔªËØ e=*s.top; return true; } void main(){ SqStack s; int elem=1; InitStack(s); *(s.top)=5; cout<<*s.base<<endl; // Push(s,elem); /* for(int i=1;i<=2;i++){ Pop(s,elem); cout<<elem<<endl; }*/ } 用的是vc++6.0 这样我给栈顶赋值,编译的时候没问题,为什么执行的时候就会停止工作?求解
golang一个全排列赋值的问题?
一个golang的全排列的问题 用[][]int切片接收最后递归出来的数据,结果输出出来的只是最后一次递归出来的数据 ``` package main import ( "fmt" ) func swap(nums []int, i, j int) { temp := nums[i] nums[i] = nums[j] nums[j] = temp } func permute(nums []int) [][]int { length := len(nums) - 1 var res [][]int dfs1(nums, 0, length, &res) fmt.Println(res) return res } func dfs1(nums []int, cur, end int, res *[][]int) { if cur == end { *res = append(*res, nums) return } else { for i := cur; i <= end; i++ { swap(nums, cur, i) dfs1(nums, cur+1, end, res) swap(nums, cur, i) } } } func main() { nums := []int{4, 5, 6} permute(nums) } ``` 结果是 [[4 5 6] [4 5 6] [4 5 6] [4 5 6] [4 5 6] [4 5 6]] 尝试不传递res 的地址,结果递归最后是空。 求解
C# DEV 控件gridview 在给指定单元格赋值时出错,怎么解决
for (int i = 0; i <gridView1.RowCount; i++) { //object sl = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "SL"); //object dj = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "DJ"); //if (sl != System.DBNull.Value && dj != System.DBNull.Value) //{ // int a = Convert.ToInt32(sl); // Decimal b = Convert.ToDecimal(dj); this.gridView1.SetRowCellValue(i, gridView1.Columns["HJ"],4); // } } this.gridView1.SetRowCellValue(i, gridView1.Columns["HJ"],4);我debug了这句代码,发现无线循环执行这个代码,求解 用这个代码时回报对象为实例化this.gridView1.GetDataRow(i)["HJ"] = (a*b).ToString();
C++问题求解,初学者提问,谢谢
#include<iostream> using namespace std; class String { public: String ( const char *c = NULL); ~String (); bool operator!() const; private: char *elems; }; String::String(const char *c) { elems = c; } String ::~String() {} bool String::operator!() const { if(elems == NULL) return true; else return false; } int main(void) { String str; if(!str) cout<<"这是一个空字符串!"<<endl; return 0; } 程序出错了,是char* 不能赋值给 const char * 这种错误怎么改 (最好不把const删掉),谢谢各位
输出参数解一元二次方程
using System; using System.Collections.Generic; using System.Text; namespace 输出参数求解一元二次方程 { class Program { public static void Root(int a, int b, int c, out double root1, out double root2) { double d = b * b - 4 * a * c; double Sqrt = Math.Sqrt(d); if (d > 0) { root1 = (-b + Sqrt) /( 2 * a); root2 = (-b - Sqrt) / (2 * a); } else if (d == 0) { root1 = root2 = -b / (2 * a); } else Console.WriteLine("此方程无根"); } static void Main(string[] args) { int a = 5, b = 6, c = 1; double root1, root2; Root (a, b, c, out root1, out root2); Console.WriteLine("root1 :{0},root2:{1}", root1, root2); } } } 错误提示为控制离开方法之前必须对out参数root1.root2赋值。 我已经赋值了啊,为什么还会提示要对输出参数赋值的错误?
Java的运算符 先后问题
for (int i = 0,m=0; i <10; i++) { m=m++; System.out.println(m); } 为什么输出的m一直等于0, 最主要是想知道 在这个代码中 m=m++;是怎么运行。一般来说 先把m赋值给m 然后 m在自增,这种情况下 输出的应该是1,2,3.。。。。。 但是实际上 输出的却一直是0 各位求解
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
相关热词 c#时间格式化 不带- c#替换字符串中指定位置 c# rdlc 动态报表 c# 获取txt编码格式 c#事件主动调用 c#抽象工厂模式 c# 如何添加类注释 c# static块 c#处理浮点数 c# 生成字母数字随机数
立即提问