2014-09-04 2 views
0

Так что я просто пытался создать простую программу с более сложным кодом. Мне было предложено написать программу, которая контролирует, является ли это положительным или отрицательным числом (я знаю, это легко).Использование try and catch для ввода

Что я пытался сделать, это поймать, что было введено, так что если его не float, он скажет вместо запятой вместо запятой ввести число или вместо String.

package example1; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

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

    float num; 

    Scanner sisse1 = new Scanner(System.in); 
    try 
    { 
     System.out.println("Sisesta number:"); 
     System.out.println("Kaks komakohta on lubatud"); 
     num = sisse1.nextFloat(); 
    } 

    catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
    { 
     System.out.println("Kontrolli kas kasutasid koma!"); 

    } 

    if (num < 0) //kui arv väiksem 
    { 
     System.out.println("Number " +num +" on negatiivne."); 
     System.out.println("Seega on arv väiksem nullist"); 

    } 
    else //Kui arv on suurem või võrdne 
    { 
     System.out.println("Number " +num +" on positiivne."); 
     System.out.println("Positiivsed arvud on suuremad"); 
     System.out.println("või võrdsed nulliga."); 

    } 
    System.out.println(); 
    System.out.println("Programm lõpetada!"); 
    } 
    } 

Извините, что это на эстонском языке, но я надеюсь, что вы поняли мою точку зрения.

+3

У вас вопрос не содержит вопросов. – talex

+0

Да, извините, вопрос в том, как заставить его работать? Прямо сейчас он вызывает некоторые ошибки. Я зафиксировал его так, что если введенный float не является поплавком (например, строка), он просто дает ошибку и завершает работу программы. Я хочу, чтобы он не дал ошибку, поэтому у пользователя будет еще один шанс войти в поплавок. Я думал об использовании, возможно, это работает? –

+0

Позвольте мне угадать. Вы хотите проанализировать ошибку и предложение печати о том, как ее исправить, прежде чем перечитывать значение? – talex

ответ

0

Что вы должны сделать, это создать цикл и попросить пользователя ввести числа тех пор, пока число не является правильным: Так этот код:

try 
{ 
    System.out.println("Sisesta number:"); 
    System.out.println("Kaks komakohta on lubatud"); 
    num = sisse1.nextFloat(); 
} 
catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
{ 
    System.out.println("Kontrolli kas kasutasid koma!"); 

} 

Должен быть в цикле - например:

boolean incorrectNumberFormat; 
do 
{ 
    incorrectNumberFormat = false; 
    try 
    { 
     System.out.println("Sisesta number:"); 
     System.out.println("Kaks komakohta on lubatud"); 
     num = sisse1.nextFloat(); 
    } 

    catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
    { 
     System.out.println("Kontrolli kas kasutasid koma!"); 
     sisse1.nextLine(); 
     incorrectNumberFormat = true; //repeat the loop; 
    } 
} while(incorrectNumberFormat); 

Кстати - запятая не будет генерировать исключение (для меня 3,3 не), но 3%3 должно дать вам исключение. Цикл может быть создан различными способами, это просто быстрый пример.

1

float num; - float num = 0.0f; и он должен работать правильно

+0

Он работает так, но все же дает ошибку, я хочу, чтобы он передал ошибку и дал пользователю еще один шанс ввести float –

+0

Сделайте это в цикле while – user3906612

0

Я изменил его

Float num = null; 

(обратите внимание, что мы теперь используют Float объект, а не float примитивно, поэтому он может быть null), а затем использовать while условие:

while (num == null) { 
    try { 
    //... 
    num = sisse1.nextFloat(); 
    } catch (InputMismatchException e) { 
    //give error 
    } 
} 

Это не помещает ничего в num, пока линия num = ... не удалась, поэтому он останется null всякий раз, когда он терпит неудачу. Это лучше, чем просто установить его на 0.0f, потому что в противном случае это вызовет проблемы, если пользователь войдет в нуль.

0

Инициализировать локальную вариабельность перед использованием;
В этом случае компилятор считает, что блок try может выполняться или нет, так что num.nextFloat() может выполнить или нет, поэтому компилятор выдает ошибку: переменная num может не быть инициализирована. , чтобы изменить float num; для float num = 0.0f;

Смежные вопросы