【问题标题】:UVa 562 runtime error. What can I do? [closed]UVa 562 运行时错误。我能做些什么? [关闭]
【发布时间】:2017-05-23 11:49:02
【问题描述】:

我正在尝试解决 Uva-562 - 分硬币问题。我的解决方案是给出运行时错误。错误消息:

以下是错误消息:java.util.Scanner.throwFor(Scanner.java:862) 处 java.util.Scanner.next(Scanner.java:1485) 处的线程“主”java.util.NoSuchElementException 中的异常在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Main.main(Main.java:73)

这是我的代码:

package com.example.recursion;

import java.util.Scanner;

public class main {

    public static Scanner scanner;
    public static int[] binary;
    public static int[] set;
    public static int m;
    public static int total;
    public static int dp[][];

    public static void initDp(){

        dp=new int[101][50001];
        for(int i=0;i<101;i++)
            for(int j=0;j<50001;j++)
                dp[i][j]=-1;

    }

    public static void readcase() {

        m = scanner.nextInt();
        int i;
        total = 0;
        set=new int[101];

        for (i = 0; i < m; i++) {

            set[i] = scanner.nextInt();
            total += set[i];
        }
        int solution=solve(0,0);
        print(solution);


    }

    public static void print(int solution){

        System.out.println(solution);
    }

    public static int solve(int i, int sum1){

          int left=0,right=0;
          if(dp[i][sum1] > -1){
              return dp[i][sum1];
          }
          if(i==m){
                   int sum2;
                   sum2=total-sum1;
                   return Math.abs(sum1-sum2);
          }

          left=solve(i+1,sum1);
          right=solve(i+1, sum1+set[i]);


          if(left<right)
                   return dp[i][sum1]=left;
          else
                   return dp[i][sum1]=right;

      }

    public static void main(String args[]) {

        scanner = new Scanner(System.in);
        int n, i;
        n = scanner.nextInt();

        for (i = 0; i < n; i++) {

            initDp(); 
            readcase();
        }

    }

}

【问题讨论】:

  • 错误信息是?
  • 这里是错误消息:java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner) 的线程“main”java.util.NoSuchElementException 中的异常.java:1485) 在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Main.main(Main.java:73)

标签: java recursion dynamic-programming


【解决方案1】:

我已经解决了。

问题是该行的 NoSuchElementException: n=scanner.nextInt(); 我已使用以下方法修复它:

if(scanner.hasNextInt()) 
{
   n = scanner.nextInt();
}

该代码已被 uHunt 接受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2013-02-08
    • 1970-01-01
    • 2018-01-22
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多