[英]How to take inputs in Java8 for Coding Competitions?
我一直在练习竞争性编码,令我大吃一惊的是,尽管我的代码在本地 IDE (如 Eclipse、BlueJ 或 Z9CFB5BE943B2BA6C28DE840864D325)中运行良好,但一些代码却出现了运行时错误。 我使用带有 StringTokenizer 的 Scanner class 或 BufferedReader class 从单行获取多个输入。 但是,运行时错误占上风。 实际上,在竞争编码中,我认为我的代码输入的是 null,而不是一个值。 这就是 Integer.parseInt(br.readLine()) 抛出 Format 异常的原因。
我想知道如何在 java8 中输入:单行多输入和单行一输入。
下面我分享一个在我的本地 IDE 上运行良好但在 Google Kick-start IDE 中引发运行时错误的代码:
/*recordbreaking problem of kickstart group D*/
import java.util.*;
import java.io.*;
class RecordBreaking
{
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str = "";
try
{
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
}
public static void main(String args[])
{
FastReader s=new FastReader();
int t=s.nextInt();
int tans[] = new int[t];
int n,c,sum=0;
int v[] = new int[10000];
for(int i=0;i<t;i++)
{
c=0;
n=s.nextInt();
for(int j=0;j<n;j++)
{
v[i]=s.nextInt();
}
for(int m=0;m<n;m++)
{
for(int q=0;q<m;q++)
sum=sum+v[q];
if((m==(n-1)||m==0)||(v[m+1]<v[m])&&(sum<v[m]))
c++;
sum=0;
}
System.out.println(c);
}
}
}
问题Isyana 给出了她当地主题公园连续 N 天的游客数量。 第 i 天的访客数为 Vi。 如果满足以下两个条件,则一天是破纪录的: 当天的访客人数严格大于前几天的访客人数。 要么是最后一天,要么当天的访客人数严格大于第二天的访客人数。 请注意,第一天可能是破纪录的一天!
请帮助 Isyana 找出打破记录的天数。
输入 输入的第一行给出了测试用例的数量,T.T 测试用例紧随其后。 每个测试用例都以包含 integer N 的行开头。第二行包含 N 个整数。 第 i 个 integer 是 Vi。
样本输入样本
Input
4
8
1 2 0 7 2 0 2 0
6
4 8 15 16 23 42
9
3 1 4 1 5 9 2 6 5
6
9 9 9 9 9 9
**Output**
Case #1: 2
Case #2: 1
Case #3: 3
Case #4: 0
它抛出运行时错误! 帮助!
Google Kick-Start 中没有关于问题所在的此类消息。
在线IDE:显示如下错误信息:
Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:199)
at java.util.StringTokenizer.<init>(StringTokenizer.java:236)
at RecordBreaking$FastReader.next(RecordBreaking.java:23)
at RecordBreaking$FastReader.nextInt(RecordBreaking.java:35)
at RecordBreaking.main(RecordBreaking.java:65)
您的代码的问题是您的 class 名称。 在 Google KickStart 上,使用 class 名称作为公共 class 解决方案。 我还运行了您的代码并提供了 WA,所以这是我的代码。
import java.util.*;
public class Solution {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int loop=1; loop<=T; loop++){
int N = sc.nextInt();
int arr[] = new int[N+7];
for(int i=0; i<N; i++){
arr[i] = sc.nextInt();
}
int max = -1;
int ans = 0;
for(int i=0; i<N-1; i++){
//if(arr[i]>max) max = arr[i];
if(arr[i]>max ) {
if(arr[i]>arr[i+1])ans++;
max =arr[i];
}
}
if(arr[N-1]>max) ans++;
System.out.println("Case #" + loop+": "+ans);
}
}
}
希望对您有所帮助。! 如果您认为它正确并接受它,请点赞。
我不能说我 100% 肯定这个问题,但我会分享我通常做的事情。 标准扫描仪应该可以工作,在这种情况下可能还有另一个问题,但我不相信可以从这些信息中说出来。
Scanner scanner = new Scanner(System.in);
int t= scanner.nextInt();
for (int i = 0; i < t; i++) {
int n = scanner.nextInt();
int[] numbers = new int[n];
for (int j = 0; j < n; j++) {
numbers[j] = scanner.nextInt();
}
}
这总是对我有用,但我又不能确定。 抱歉,无法提供更多帮助,但我不确定其他人是否可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.