Нет такого исключения элемента при сканировании нескольких входов

Поскольку существует несколько числовых типов, которые компилятор может использовать для представления значения 0.58: float , double и decimal . Если вы не согласны с тем, что компилятор выбирает один для вас, вам нужно устранить неоднозначность.

В документации для double указано, что если вы не укажете тип самостоятельно, компилятор всегда выбирает double как тип любого действительного числового литерала:

По умолчанию реальный числовой литерал в правой части оператора присваивания рассматривается как двойной. Однако, если вы хотите, чтобы целое число считалось двойным, используйте суффикс d или D.

blockquote>

Добавление суффикса f создает float; суффикс d создает double; суффикс m создает decimal. Все они также работают в верхнем регистре.

Однако этого все еще недостаточно, чтобы объяснить, почему это не скомпилируется:

float timeRemaining = 0.58;

Недостающая половина ответа заключается в том, что преобразование от double 0.58 до float timeRemaining потенциально теряет информацию, поэтому компилятор отказывается применять его неявно. Если вы добавляете явное преобразование, выполняется преобразование; если вы добавите суффикс f, то преобразование не потребуется. В обоих случаях код будет компилироваться.

3
задан Ayush Mishra 17 January 2019 в 13:54
поделиться

3 ответа

Похоже, я немного опоздал, но так как ваш принятый ответ - скорее комментарий, а не решение, я все равно опубликую это.

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

Я проведу вас через это:

public class MyTest {
    public static void main(String[] args) {

        //First of all, we need an instance of an Election-type object, so
        //that we can call its methods and get votes from users.
        Election e = new Election();
        //Now we can easily call the method getVotes(), as defined in Election class.
        //What happens here, is that the program will 'jump' to the getVotes() method
        //and it will execute every line of code in that method. Then it will
        //'return' to where it 'left off' in the main() method. Since getVotes()
        //is of type 'void', it will not return anything. It will just 'jump' back.
        e.getVotes();

        //Now, you can use testResult() method, to see the values of the variables.
        e.testResult();
    }
}

Теперь давайте посмотрим на класс Election и как это работает.

public class Election {
    private final int VOTES_NUM = 1;
    private int v1,v2,v3,v4,v5,d;

    public Election() {
        v1=v2=v3=v4=v5=d=0;
        //print now, just to show that all variables = 0
        testResult();
    }

    //Simple method that prints value of each variable. We use this for testing
    public void testResult(){
        System.out.println("v1 = "+v1);
        System.out.println("v2 = "+v2);
        System.out.println("v3 = "+v3);
        System.out.println("v4 = "+v4);
        System.out.println("v5 = "+v5);
        System.out.println("d = "+d);
    }

    private int getInput(){
       //First of all, we need a Scanner to take user input. 
       //You do that in your own code too. We simply move it in this method instead.
        Scanner input = new Scanner(System.in);

        //You also need variable to hold the user input. 
        //(Always give meaningful names to all entities)
        int userInput;

        System.out.print("Please enter vote number here: ");

        //the next part has to be in a try-catch block, 
        //to avoid exceptions like InputMismatchException, etc..
        try{
            //Get user input
            userInput = input.nextInt();
        }
        //If user enters letter, or symbol, or something else that isn't an integer,
        //then inform them of the mistake they made and recursively call this method,
        //until they get it right!
        catch (InputMismatchException ime){
            System.out.println("Please enter only a single number");
            return getInput();
        }

        //If all goes well, return the user input
        return userInput;
    }

    public void getVotes() {
        //'VOTES_NUM' is a constant that defines the times the 
        //loop will iterate (like Macros in 'C')
        for(int x=0; x<VOTES_NUM; x++)
            int n = getInput();
        //then let the switch statement increment one of the variables
        switch(userInput) {
            case 1: ++v1; break;
            case 2: ++v2; break;
            case 3: ++v3; break;
            case 4: ++v4; break;
            case 5: ++v5; break;
            default: ++d; break;
        }
    }
}
0
ответ дан P. Soutzikevich 17 January 2019 в 13:54
поделиться

Я думаю, что код, который вы опубликовали, отсутствует. Размещенный вами код работает правильно, и я добился исключения только тогда, когда написал input.close () перед obj.getVotes (). Если вы хотите закрыть сканеры, вы должны сделать это после завершения кода. Таким образом, если вы закроете ввод после obj.getVotes (), вы не должны получить никакой ошибки.

0
ответ дан Y.Kakdas 17 January 2019 в 13:54
поделиться

Я попытался запустить твой код в коротком основном классе, и я не получаю никаких исключений. Вот как я запустил ваш метод:

public static  void main(String...args){
    Election election = new Election(10);
    election.getVotes();
    System.out.println(election.v1);
    System.out.println(election.v2);
    System.out.println(election.v3);
    System.out.println(election.v4);
    System.out.println(election.v5);
    System.out.println(election.d);
}

Мой ввод был 1 2 3 4 5 6 7 1 2 2, а вывод консоли был:

2 // v1
3 // v2
1 // v3
1 // v4
1 // v5
2 // d

Я сделал небольшой Перейдите в вашу программу. В цикле for внутри метода getVotes() я изменил условие на i<n (вместо i<1 в опубликованном вами коде)

0
ответ дан FrenchFigaro 17 January 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: