关于新人自学编程的误区 [谢谢老师一把把我点醒]

真的看完≠学完≠练完

一、写在前边

出于某些原因,刚入大学不久的我很想赚钱,相信很多大学生也和我一样吧
所以我就很想早点实习,早点毕业,这也是我内心浮躁的开始。
小辰在疫情期间,在家里闲着没事,在网上分看的看java相关的视频,自以为学的很快学的很靠后,以为不用跟着老师,不用多练习,光通过看就能学的透彻。
直到那天晚上小辰浮躁到极点,找老师想要明确自学方向快速学习争取早日实习

二、我和老师的聊天记录

在这里插入图片描述
在这里插入图片描述
真的我现在才觉得自己的愚昧
当然我的老师也很好,还是给了我一个很简单的demo让我测试一下自己真的是学完了还是看完了在这里插入图片描述
当我真的开始做这个demo的时候才发现自己是多么的无知

三、关于老师给我的demo以及我写的屎一样的代码

这是我第一次写的代码(真的是毫无章法可言,仅仅是勉强实现了,一点java面向对象的思想都没有,我还觉得自己很牛逼我觉得我是真的井底之蛙)

import java.io.StringReader;
import java.util.*;

public class Zhajinhua {
    public static void main(String[] args) {
        //一、准备阶段
        //牌
        List<String> colors = List.of("♠", "♥", "♣", "♦");
        List<String> num = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        HashMap<Integer, String> map = new HashMap<>();
        int index = 0;
        for (String color : colors) {
            for (String number : num) {
                map.put(index, "-"+color +"-"+ number);
                index++;
            }
        }
        /*map.put(52,"大王");
        map.put(53,"小王");*/
        //2、获取牌的索引
       /* ArrayList<Integer> list=new ArrayList<>();
        for (int i = 0; i < 52; i++) {
            list.add(i);
        }
        Collections.shuffle(list);*/

        //二、设置参与人数,参与人的姓名,序号,初始金额
        Hashtable<Integer, String> playernamenum = new Hashtable();
        Hashtable<Integer, Integer> playermoney = new Hashtable();
        Scanner sc = new Scanner(System.in);
        int playercount = sc.nextInt();
        for (int i = 1; i < playercount + 1; i++) {
            System.out.println("请输入第" + i + "号玩家的姓名");
            String name = sc.next();
            System.out.println("该玩家所拥有的初始金额");
            Integer money = sc.nextInt();
            playernamenum.put(i, name);
            playermoney.put(i, money);
        }

        //三、开始玩
        //1、发牌
        HashMap<Integer, String> wanjiapai = new HashMap<>();
        HashSet<Integer> fapaiIndex = new HashSet<>();
        Hashtable<Integer, Integer> fapaiindex = new Hashtable<>();

        Random r = new Random();
        while (fapaiIndex.size() < playercount * 3) {
            int result = r.nextInt(52);
            fapaiIndex.add(result);
        }

        int count = 0;
        //System.out.println(fapaiIndex.size());
        for (Integer integer : fapaiIndex) {
            fapaiindex.put(count, integer);
            count++;
        }
        /*System.out.println("================");
        System.out.println(fapaiIndex.size());
        System.out.println("================");*/
        /*for (int i = 0; i < playercount; i++) {
            for (int i1 = 0; i1 < fapaiIndex.size(); i1++) {
                wanjiapai.put(i, map.get(fapaiindex.get(i1)));
            }
        }*/
        //统计场上赌注
        int money=0;
        System.out.println("游戏开始请每位玩家开始下注");
        for (int i = 1; i < playercount + 1; i++) {
            System.out.println("请第" + i + "位玩家:" + playernamenum.get(i) + "开始下注");
            int firstmoney = sc.nextInt();
            if (firstmoney > playermoney.get(i)) {
                System.out.println("下注失败,余额不足,请重新下注");//不严谨后改
            } else {
                money=money+firstmoney;
                Integer money2 = playermoney.get(i) - firstmoney;
                playermoney.remove(i, playermoney.get(i));
                playermoney.put(i, money2);
            }
        }
        int number = playercount;
        while (number > 2) {
            //System.out.println("请玩家选择看牌or不看牌,加注or不加注");
            System.out.println(number);
            for (int i = 1; i < playercount+1; i++) {
                if (playernamenum.containsKey(i)==false) {
                    i++;
                    if(i>playercount){
                        break;
                    }
                }
                if(number==2){
                    break;
                }
                System.out.println("请第" + i + "位玩家:" + playernamenum.get(i) + "选择1看牌or2弃牌");
               //看牌
                if (sc.nextInt() == 1) {
                    int t = 0;
                     t=3*i-1;
                    /*if(i==i){
                         t = i-1;
                    }else if(i==2){
                        t=3;

                    }else if(i==3){
                        t=6;
                    }else if(i==4){
                        t=9;
                    }else if(i==5){
                        t=12;
                    }*/

                    for (int i1 = 0; i1 < 3; i1++) {
                        System.out.println(map.get(fapaiindex.get(t)));
                        t--;
                    }
                    //加主or弃牌
                    System.out.println("请玩家选择1弃牌or2加注");
                    if (sc.nextInt() == 1) {
                        number--;
                        playernamenum.remove(i);//删除此号玩家
                    } else if (sc.nextInt() == 2) {
                        System.out.println("请玩家开始加注");
                        int secondmoney = sc.nextInt();
                        if (secondmoney > playermoney.get(i)) {
                            System.out.println("加注失败,余额不足,请重新下注");//不严谨后改
                        } else {
                            money=money+secondmoney;
                            Integer money3 = playermoney.get(i) - secondmoney;
                            playermoney.remove(i, playermoney.get(i));
                            playermoney.put(i, money3);
                        }
                    }
                }else if (sc.nextInt() == 2) {
                    number--;
                    playernamenum.remove(i);//删除此号玩家
                    /*System.out.println("请玩家加注");
                    int secondmoney = sc.nextInt();
                    if (secondmoney > playermoney.get(i)) {
                        System.out.println("加注失败,余额不足,请重新下注");//不严谨后改
                    } else {
                        Integer money3 = playermoney.get(i) - secondmoney;
                        playermoney.remove(i, playermoney.get(i));
                        playermoney.put(i, money3);
                    }*/
                }




            }
        }
        System.out.println(number);
        System.out.println("开始比牌");

        String[] arr=new String[6];
        Set<Integer> leftplayer = playernamenum.keySet();
        System.out.println(leftplayer.size());
        int i=0;
        List<String> player=new ArrayList<>();
        List<Integer> playernumber=new ArrayList<>();
        for (Integer integer : leftplayer) {
            System.out.println(playernamenum.get(integer)+"的牌为:");
            player.add(playernamenum.get(integer));
            playernumber.add(integer);
            int t=3*integer-1;
            for (int i1 = 0; i1 < 3; i1++) {
                System.out.print(map.get(fapaiindex.get(t)));
                arr[i]=map.get(fapaiindex.get(t));
                t--;
                i++;
            }
        }
        String n;
        String n2;
        n=arr[0]+arr[1]+arr[2];
        n2=arr[3]+arr[4]+arr[5];


        String[] split = n.split("-");
        String[] split2 = n2.split("-");


        System.out.println("=======================");
        /*System.out.println(split[0]);
        System.out.println(split[1]);
        System.out.println(split[2]);
        System.out.println(split[3]);
        System.out.println(split[4]);
        System.out.println(split[5]);
        System.out.println(split[6]);
*/
        int judge = judge(split);
        int judge2 = judge(split2);

        System.out.println(judge);
        System.out.println(judge2);
        if(judge>judge2){
            System.out.println(playernamenum.get(playernumber.get(0))+"获胜");
            //打印每位玩家此时的金币
            Integer money3 = playermoney.get(playernumber.get(0)) + money;
            playermoney.remove(playernumber.get(0), playermoney.get(playernumber.get(0)));
            playermoney.put(playernumber.get(0), money3);
            Set<Integer> keys = playernamenum.keySet();
            for (Integer key : keys) {
                System.out.println("玩家:"+playernamenum.get(key)+"的金币为"+playermoney.get(key));
            }

        }else if(judge<judge2){
            System.out.println(playernamenum.get(playernumber.get(1))+"获胜");
            //打印每位玩家此时的金币
            Integer money3 = playermoney.get(playernumber.get(1)) + money;
            playermoney.remove(playernumber.get(1), playermoney.get(playernumber.get(1)));
            playermoney.put(playernumber.get(1), money3);
            Set<Integer> keys = playernamenum.keySet();
            for (Integer key : keys) {
                System.out.println("玩家:"+playernamenum.get(key)+"的金币为"+playermoney.get(key));
            }
        }else if(judge==judge2){
            System.out.println("平局,卓上赌注平分");
            //打印每位玩家此时的金币
            money=money/2;
            Integer money3 = playermoney.get(playernumber.get(0)) + money;
            playermoney.remove(playernumber.get(0), playermoney.get(playernumber.get(0)));
            playermoney.put(playernumber.get(0), money3);

            Integer money4 = playermoney.get(playernumber.get(1)) + money;
            playermoney.remove(playernumber.get(1), playermoney.get(playernumber.get(1)));
            playermoney.put(playernumber.get(1), money4);

            Set<Integer> keys = playernamenum.keySet();
            for (Integer key : keys) {
                System.out.println("玩家:"+playernamenum.get(key)+"的金币为"+playermoney.get(key));
            }
        }

    }
    //判断胜负得分
    private static int judge(String[] split) {
        int score=0;
        //同花
        if(split[1]==split[3]&&split[5]==split[3]){
            score=score+100;
        }
        //顺子
        ArrayList<Integer> arr=new ArrayList<>();
        for (int i = 2; i < 7;i=i+2){
            switch (split[i]){
                case "3":arr.add(3);
                case "4":arr.add(4);
                case "5":arr.add(5);
                case "6":arr.add(6);
                case "7":arr.add(7);
                case "8":arr.add(8);
                case "9":arr.add(9);
                case "J":arr.add(10);
                case "Q":arr.add(11);
                case "K":arr.add(12);
                case "A":arr.add(13);
                case "2":arr.add(14);

            }
        }
        int max=0;
        for (Integer integer : arr) {
            if(max<integer){
                max=integer;
            }
        }
        if(max-((arr.get(0)+arr.get(1)+arr.get(2))/3)==1){
            score=score+100;
        }

        //普通牌
        for (int i = 2; i < 7;i=i+2){
            switch (split[i]){
                case "3":score=score+3;
                case "4":score=score+4;
                case "5":score=score+5;
                case "6":score=score+6;
                case "7":score=score+7;
                case "8":score=score+8;
                case "9":score=score+9;
                case "J":score=score+10;
                case "Q":score=score+11;
                case "K":score=score+12;
                case "A":score=score+13;
                case "2":score=score+14;
            }
        }

        return score;
    }
}

四、写在最后(这是我无意中看到的一篇文章,希望能给那个还在迷茫的你我一点帮助)【如若涉及侵权请及时联系我删除】

学到什么程度能就业?

+根据目前的行业行情,企业招聘人才的标准都是能独立开发项目,参与到公司主要项目的研发中,所以现在公司都要求有2年工作经验以上的。

没有工作经验是否还能就业?

+回答:能。所谓经验就是我们从遇到的难题中解决后总结的经验,也就是解决问题的能力,这在学习中是可以慢慢积累的。
+举例:一个公司招聘4个人,要求有3年工作经验。有100个人去面试,公司非常清楚目前想要招聘一个拥有三年工作经验的人有多么的困难,所以面试官非常清楚,你们基本都是刚学出来的人,但是他也知道。这100个人当中肯定有4个是非常优秀的,能满足他们公司的要求,能完成工作给他们的任务,这就足够了。工作经验只是一个门槛,不然什么人都来面试了,面试者需要衡量自己的水平。工作经验都是虚的,完成不了任务,十年工作经验也是白搭。

是否自学成功?

+不否定有自学成功的,但是根据目前市场招聘人才的标准来看,想要无师自通达到独立开发项目的程度,是非常艰难。
+你需要解决以下问题:
1.适合你自己的课程安排,知道每天需要学什么,做什么,下一步应该干什么
2.如何培养自己解决问题的能力
3.用对学习方法,学习变得有效率
4.解决看得懂视频,写不出来代码的问题
5.解决学了后面,忘了前面的问题

是否应该去培训机构?

+根据目前招聘人才的标准,想要通过四个月短期培训达到企业开发项目的程度,难度非常大,所以没有任何基础的,不是科班出身的,学历低的,学习能力差的,都不推荐去线下四个月培训,因为每个人的起点不同,不可能都能用同样的四个月速成的方式完成同样高强度的训练。所以建议那些真想做这行的人,选择线上辅导学习,你适不适合学这个,学一个月就知道。

公司免费培训是真的吗?

+首先,任何公司不会无条件的去带任何新人,所以有很多不懂行的小伙伴会天真的认为,先进公司学习,有人带,学会了之后在跳槽,这种想法是非常危险的。一般这样的情况,都是以“招转”的形式让你去培训,或者签订什么贷款协议或者是工作之后从工资里面扣,这都是非常常见的套路,但是外行人可能不知道。记住一句话:你自己认为是占便宜的事情,那一定是个陷阱。

实习岗位好找吗?

+原则上,我们这行就没有什么实习岗位,就算有也只是像BAT这样的大型公司会有,不过他们只是想储备人才,他们要的都是高学历的,重点本科以上的。所以一般公司都不会招聘实习生,这本来就不符合常理,软件公司,互联网公司主要以开发项目为主,所以必然会找成手直接上项目,没有招聘实习生的道理。所以你在网上看的不要工作经验,不要学历的招聘实习生的,99%都是以“招转”形式让你去培训的不正规培训机构。

转行的人应该怎么学习?

+这里说的是决心转行的人,既然决心转行学了,就用最好的方式学,别想自己通过无师自通来逆天。但凡这样的决心都不够,都只是想试试,但是我们这行要求很高,毕竟是高薪工作,不是说谁想随便试试就能成的。如果是这样,谁都可以做这份工作了。跟小孩过家家一样,记住我们这行的专业程度是非常高的,不要轻视它。所以那些决心学的,建议选择线上辅导,有专业的老师全程指导你,加上你个人的努力。

在校的学生怎么学?

+大一大二的,推荐你看视频+看书学习,因为你的时间够,如果能坚持一直学习技术,毕业工作必定超过15000以上,这完全看你付出多大努力。
+大三大四的,推荐线上辅导学习,你学这个必定为了即将毕业工作做准备,培养自己的学习能力是你每天应该做的事情,学的越久,项目做的越多,你毕业之后越值钱,在校学生切记不要选择速成线下培训,你本身就在上学,有时间,所以不要花冤枉钱。#是否自学成功?

+不否定有自学成功的,但是根据目前市场招聘人才的标准来看,想要无师自通达到独立开发项目的程度,是非常艰难。
+你需要解决以下问题:
1.适合你自己的课程安排,知道每天需要学什么,做什么,下一步应该干什么
2.如何培养自己解决问题的能力
3.用对学习方法,学习变得有效率
4.解决看得懂视频,写不出来代码的问题
5.解决学了后面,忘了前面的问题

是否应该去培训机构?

+根据目前招聘人才的标准,想要通过四个月短期培训达到企业开发项目的程度,难度非常大,所以没有任何基础的,不是科班出身的,学历低的,学习能力差的,都不推荐去线下四个月培训,因为每个人的起点不同,不可能都能用同样的四个月速成的方式完成同样高强度的训练。所以建议那些真想做这行的人,选择线上辅导学习,你适不适合学这个,学一个月就知道。

公司免费培训是真的吗?

+首先,任何公司不会无条件的去带任何新人,所以有很多不懂行的小伙伴会天真的认为,先进公司学习,有人带,学会了之后在跳槽,这种想法是非常危险的。一般这样的情况,都是以“招转”的形式让你去培训,或者签订什么贷款协议或者是工作之后从工资里面扣,这都是非常常见的套路,但是外行人可能不知道。记住一句话:你自己认为是占便宜的事情,那一定是个陷阱。

实习岗位好找吗?

+原则上,我们这行就没有什么实习岗位,就算有也只是像BAT这样的大型公司会有,不过他们只是想储备人才,他们要的都是高学历的,重点本科以上的。所以一般公司都不会招聘实习生,这本来就不符合常理,软件公司,互联网公司主要以开发项目为主,所以必然会找成手直接上项目,没有招聘实习生的道理。所以你在网上看的不要工作经验,不要学历的招聘实习生的,99%都是以“招转”形式让你去培训的不正规培训机构。

转行的人应该怎么学习?

+这里说的是决心转行的人,既然决心转行学了,就用最好的方式学,别想自己通过无师自通来逆天。但凡这样的决心都不够,都只是想试试,但是我们这行要求很高,毕竟是高薪工作,不是说谁想随便试试就能成的。如果是这样,谁都可以做这份工作了。跟小孩过家家一样,记住我们这行的专业程度是非常高的,不要轻视它。所以那些决心学的,建议选择线上辅导,有专业的老师全程指导你,加上你个人的努力。

在校的学生怎么学?

+大一大二的,推荐你看视频+看书学习,因为你的时间够,如果能坚持一直学习技术,毕业工作必定超过15000以上,这完全看你付出多大努力。
+大三大四的,推荐线上辅导学习,你学这个必定为了即将毕业工作做准备,培养自己的学习能力是你每天应该做的事情,学的越久,项目做的越多,你毕业之后越值钱,在校学生切记不要选择速成线下培训,你本身就在上学,有时间,所以不要花冤枉钱。

PS:

最后我想感谢老师的耐心和指点,也希望那个还在学习的你能够更加沉稳
如果你也在学习的话我们可以加个好友(说不定以后还能在一起工作喃)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值