Код корректен в IDE, но выдает ошибку в CodeChef

#java

#java

Вопрос:

я пытаюсь решить вопрос codechef, я могу получить вывод в IDE, а также с пользовательским вводом, когда я пытаюсь запустить с этими входными данными, это выдает мне ошибку

ссылка на вопрос:
https://www.codechef.com/problems/HS08TEST

Код:

     /* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.DecimalFormat;
/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner input = new Scanner(System.in); 
        int numberOne = input.nextInt();
        float numberTwo = input.nextFloat();
        float reduction = 0;
        float result = 0;
        DecimalFormat df2 = new DecimalFormat(".00");
        if(numberOne > 0 amp;amp; numberOne <= 2000 amp; numberTwo >= 0 amp;amp; numberTwo <= 2000){
        if(numberOne % 5 == 0){
            reduction = (float)numberOne (0.50f);
            if(reduction <= numberTwo){
                result = numberTwo-reduction;

                System.out.println(df2.format(result));
            }
            if(reduction > numberTwo){
                System.out.println(df2.format(numberTwo));
            }
        }
        else{
            System.out.println(df2.format(numberTwo));
        }
        }

    }

}
  

Ошибка:

Исключение в потоке «main» java.util.NoSuchElementException в java.util.Scanner.throwFor(Scanner.java:862) в java.util.Scanner.next (Scanner.java: 1485) в java.util.Scanner.nextInt(Scanner.java:2117) в java.util.Scanner.nextInt (Scanner.java: 2076) в Codechef.main (Main.java: 14)

Комментарии:

1. Это вызвано тем, что nextInt и / или nextFloat не удалось выполнить требования, основанные на вводе. Возможно, вам придется использовать nextLine вместо этого и протестировать преобразование String s в int и double вручную

2. извините, но nextLine также не работает

Ответ №1:

«Ошибка» вызвана тем, что входные данные не были проанализированы как требуемый тип (т. Е. Scanner невозможно либо проанализировать входные данные как int или float )

Решением «A» было бы взять входные данные и проанализировать их вручную. Вы могли бы использовать nextLine и запустить другой Scanner поверх него, или разделить на общий разделитель, или вы могли бы просто использовать next , например…

 import java.text.DecimalFormat;
import java.util.Scanner;

class Codechef {

    public static void main(String[] args) throws java.lang.Exception {
        Scanner input = new Scanner(System.in);
        String element = input.next(); // Next value up to the next space or new line...
        int numberOne = Integer.parseInt(element);
        element = input.next(); // Next value up to the next space or new line...
        float numberTwo = Float.parseFloat(element);
        float reduction = 0;
        float result = 0;
        DecimalFormat df2 = new DecimalFormat(".00");
        if (numberOne > 0 amp;amp; numberOne <= 2000 amp; numberTwo >= 0 amp;amp; numberTwo <= 2000) {
            if (numberOne % 5 == 0) {
                reduction = (float) numberOne   (0.50f);
                if (reduction <= numberTwo) {
                    result = numberTwo - reduction;

                    System.out.println(df2.format(result));
                }
                if (reduction > numberTwo) {
                    System.out.println(df2.format(numberTwo));
                }
            } else {
                System.out.println(df2.format(numberTwo));
            }
        }

    }

}
  

Это предполагает, что ввод предоставляется, как правило, в одной строке, но этот метод позволит вам работать с двумя отдельными входами. Но, не зная точно, каковы входные данные, трудно обеспечить более точное решение

Ответ №2:

Вы не используете пробел между входными значениями.

Просто прочитайте первую строку, используя nextLine, а затем разделите и проанализируйте числа соответствующим образом

Комментарии:

1. когда я пытаюсь прочитать первую строку, используя nextLine, это выдает мне ошибку :::: потому что nextLine используется для чтения строки .. я думаю

2. ДА. Протестируйте еще раз в своей IDE, используя одну строку ввода, как показано на codechef, вместо фактического ввода двух значений

3. сталкиваюсь с той же проблемой

4. Возможно, codechef использует аргументы основного метода, а не стандартный ввод

5. раньше я принимал аргумент из командной строки как …. args[0] … но это недопустимо

Ответ №3:

У меня сработала простая вещь …. я только окружил код try и catch….

окончательный рабочий код…

 /* package codechef; // don't place package name! */

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

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        try{
        int n, sum = 0;
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        int a[] = new int[n];
        for(int i = 0; i < n; i  )
        {
            a[i] = s.nextInt();
        }

        int largest=0;
        int element=0;


        for(int i = 0; i < n; i  ){
            for(int j=0;j<n;j  ){
                element=a[i]%a[j];
                if(largest<element){
                    largest=element;
                }
            }
        }
        System.out.println(largest);
    }
            catch(Exception e){

    }
    }

}