簡體   English   中英

如何在 Java8 中為編碼競賽獲取輸入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM