将值从一个方法传递到另一个方法时出现空指针异常错误

Null Pointer Exception error while passing value from one methord to another

提问人:user9342976 提问时间:6/18/2023 更新时间:6/19/2023 访问量:45

问:

我正在尝试将 ArrayDeque q 的最后一个索引值从 Solution 类的 methord distributeTicket() 返回到类 GFG 的 methord main()。

//{ Driver Code Starts
//Initial Template for Java

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

class GFG{
    public static void main(String args[]) throws IOException { 
        BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out=new PrintWriter(System.out);
        int t = Integer.parseInt(in.readLine());
        while (t-- > 0) {
            String s[]=in.readLine().trim().split(" ");
            int n=Integer.parseInt(s[0]);
            int k=Integer.parseInt(s[1]);
            Solution ob=new Solution();
            out.println(ob.distributeTicket(n,k));
        }
        out.close();
    }
}
// } Driver Code Ends

//User function Template for Java
class Solution {
    public static int distributeTicket(int N,int K)
    {
        ArrayDeque<Integer> q = new ArrayDeque<>();
        for(int i=1;i<=N;i++){
            q.add(i);
        }
        
        while(true){
            if(K==1 && q.size()==2)
                return q.peekLast();//.intValue();
            
            if(q.size() > K){
                for(int i=1;i<=K;i++)
                    q.pollFirst();
                
                for(int i=1;i<=K;i++)
                    q.pollLast();
            }
            
            else
                return q.peekLast();//.intValue();
        }
    }
}

在使用自定义输入执行代码时,代码会给出预期的输出。

For Input: 
25 1
Your Output: 
13
Expected Output: 
13

但是在提交代码时,它会抛出异常。

For Input: 
25 1
Your Output:
Exception in thread "main" java.lang.NullPointerException
    at Solution.distributeTicket(File.java:48)
    at GFG.main(File.java:17)

Its Correct output is:
13

请告诉我我做错了什么以及解决方案是什么。

Java 异常 错误处理 集合 nullPointerException

评论

0赞 Marc Le Bihan 6/18/2023
我不明白“自定义输入”和“提交代码”有什么区别? 看起来是你的原因,因为还没有被循环填满。这是我的猜测。我建议你在行上放一个断点:以验证你是否真的在执行它,至少一次。return q.peekLast()NullPointerExceptionqforq.add(i)
0赞 rzwitserloot 6/18/2023
问题无法回答:粘贴的 distributeTicket 方法本身不可能抛出 NPE。解释超出了票证所描述的内容,例如“自动评分器工具没有运行此代码,而是您编写的一些旧代码”或“自动评分器工具直接损坏”。投票决定关闭。
0赞 rzwitserloot 6/18/2023
@MarcLeBehan 粘贴的代码不能导致在其执行的任何时候出现,因此,您的猜测肯定是错误的。鉴于 OP 显然在抱怨自动评分器的输出,他们无法断点它。除非自动评分器支持这一点。没有自动评分器这样做 - 假设它会没有意义。qnull
0赞 Reilas 6/19/2023
当我使用 251 运行代码时,没有 NullPointerException

答:

0赞 Anon 6/19/2023 #1

您在 2 个 fors 之间缺少这一行,您收到的错误消息不是针对 但如果您输入if (q.size() <= K) return q.getFirst();25 124 2

  public static int distributeTicket(int N, int K) {
            ArrayDeque<Integer> q = new ArrayDeque<>();
            for (int i = 1; i <= N; i++) {
                q.add(i);
            }
            while (true) {
                if (K == 1 && q.size() == 2) return q.getLast();
                if (q.size() > K) {
                    for (int i = 1; i <= K; i++) {
                        q.pollFirst();
                    }
                    if (q.size() <= K) return q.getFirst();
                    for (int i = 1; i <= K; i++) {
                        q.pollLast();
                    }
                } else {
                    return q.getLast();
                }
            }
        }