被百度,网易,腾讯技术笔试在线编程题输入输出坑了的我提醒大家注意这些!!!(不看这些就算leetcode,剑指offer刷了再多也没有,呜呜呜呜!!!)

被技术笔试在线编程题输入输出坑了的我,警醒大家注意这些!!!!!!(被百度,网易,腾讯笔试输入输出坑了的我提醒大家注意这些)

你是否还在为在线编程题输入输出而烦恼?

你是否还在为本地编译器通过而在线编程题总是无法通过而烦恼?

你是否还在为明明刷了很多算法题笔试成绩还是不理想而烦恼?

来这里就对啦!!!!!!!!!

我真的是被坑了若干次,感觉失去了好多机会啊,呜呜呜呜!!!!!

 

本人小白,目前已经刷了剑指offer的所有题目67道题,然后leetcode上也已经刷了240道题,虽然还比不上某些大佬,但觉得自己算法应该也还行了吧,笔试那不是轻松加愉快啊!!!!!可是,事实让我很失望。

百度笔试挂了,网易笔试挂了,腾讯笔试挂了,阿里笔试挂了(其实阿里不是因为输入输出啦,真的是题目有点难,还是自己的能力不足啊,啊啊啊啊啊),真的是很难受,总是出现下面的问题:

不通过

您的代码已保存
请检查是否存在数组越界等非法访问情况
case通过率为0.00%

数组越界,数组越界,这个问题当初弄得我真的是,心态崩了,调一个简单的题调不出来,后面的题由于心态崩了,也做不出来,最后导致笔试挂了。

出现数组越界等非法访问这个问题很可能就是你的输入输出写错了,不信的话,你可以把你的逻辑代码都注释掉,如果还是出现这个问题的话,就一定是输入输出写错了,而你又发现不了(如果注释掉就没有了,那可能还真是里面数组越界了,哈哈哈,那可能就具体问题具体分析了,当然这也是一种调试代码的方式,注释代码来定位出现问题的地方)

废话了这么多,下面来讲一下输入输出的写法吧,先来一段示例代码。

// 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        //第一句就是从控制台来获取内容,这一句都会有,大概知道意思就可以了
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
            String N=in.nextLine();
        }
    }
}

获取里面的数据,有如下若干个方法:

(1)读一个整数
 int n = sc.nextInt(); 
(2)读一个字符串
String s = sc.next(); 
(3)读一个浮点数
double t = sc.nextDouble(); 
(4)读一整行
 String s = sc.nextLine(); 
(5)判断是否有下一个输入
sc.hasNext()
sc.hasNextInt()
sc.hasNextDouble()
sc.hasNextLine() 
(6)输出
System.out.print(); 
System.out.println(); 
System.out.format();
System.out.printf();

方法的话其实也就是上面那么几个,看起来真的很简单,但是如果不做一下真题还真不知道里面的一些小坑。

 

我遇到的第一个坑,nextInt()与nextLine()互换使用的坑

这里我们来一道题来试一下:https://www.nowcoder.com/practice/fc72d3493d7e4be883e931d507352a4a?tpId=98&tqId=32827&tPage=1&rp=1&ru=/ta/2019test&qru=/ta/2019test/question-ranking

下面是我第一版写得代码,不难,读者可以试着看一看问题出在哪里,自己找一找,可能印象会更深

// 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
            int N=in.nextInt();
            String string=in.nextLine();
            //0N,1E,2S,3W
            int count=0;
            char[] ch=string.toCharArray();
            for(int i=0;i<ch.length;i++)
            {
                if(ch[i]=='L')
                {
                    count--;
                    if(count==-1)
                    {
                        count=3;
                    }
                }if(ch[i]=='R')
                {
                    count++;
                    if(count==4)
                    {
                        count=0;
                    }
                }
            }
            if(count==0)
            {
                System.out.println("N");
            }else if(count==1)
            {
                System.out.println("E");
            }else if(count==2)
            {
                System.out.println("S");
            }else
            {
                System.out.println("W");
            }
        }
    }
}

揭晓答案:

问题出在int N=in.nextInt();
            String string=in.nextLine();

这两句上,总是出现数组索引越界异常,问题就是第一句获取的是int,那么下一句再获取的nextLine其实获取的是这一行后面的内容,而不是下一行的内容,那么我们来测试一下:

// 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a=in.nextInt();
        String string=in.nextLine();
        System.out.println(string);
    }
}

输出

我仅仅输入一个2它就停止了,我还没输入其他内容呢,说明nextline()获取的就是它后面的那个内容啦,也就是空的内容。

这个问题是我被坑的最惨的一个问题了!!!!

解决方案:

最简单的就是空写一个nextline,或者前面的nextInt,直接用nextLine(),然后再字符串转int

 

我遇到的第二个坑,题目要求输入的范围其实是Long,但是我却输入的int导致数组越界异常,最开始的时候真的找了好久都没找到啊,读者可能会问到,这个问题很简单啊,怎么会出错,其实这个地方出错的原因是题目的表达上,题目表达的数据范围是10的18次方,开始刷题的时候没有注意,天真的以为2的32次方就是10的18次方,笔试的时候也没有计算器,因为平时记住的都是2的32次方,然后就怎么调也调不出来,其实2的32次方是10的9次方以下左右的可以用int,超过这些,就想一想是否要用更大的数据类型了。

 

我遇到的第三个坑,其实还是字符串和int的问题,题目输入是这样的

5

010101

011010

101101

第一行是一个int类型的数,用nextInt方法毋庸置疑,我在弄下面几行的时候,误以为它是数,中间有空格,然后就一直用nextInt方法了,导致出错,其实下面都是一个一个字符串,可以用nextLine方法,然后再toCharArray

 

这三个就是我从最开始笔试,到现在遇到的坑,开始的时候还不知道哪里错了,总是提示

数据越界,而且通过总是0

真的很烦

希望这篇文章可以帮到你,你还遇到过什么在线编程笔试的坑?欢迎留言!

 

关注微信公众号,获取更多java软件开发学习资源,覆盖java基础,android,网络编程,并发编程,mysql,linux,算法,以及C++和python书籍资源。

扫描下方二维码,或者搜索公众号你还有头发吗

 

 

 

 

 

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值