2013-11-27 3 views
0

Моя задача состоит в следующем:Как различать типы данных в подпрограмме?

Запись Подпрограммы найти наименьшее из двух значений с помощью перегруженной функции.

int smallest (int a, int b) 
char smallest (char a, char b) 
float smallest (float a, float b) 
double smallest (double a, double b) 

Я должен использовать Scanner класс для ввода и имеют один и тот же код во всех подпрограммах. Моя проблема указана после кода. Любая помощь приветствуется.

package subassignment; 

import java.util.Scanner; 

public class Subassignment { 

    public static void main(String[] args) { 

     Scanner console = new Scanner (System.in); 

     String a, b; 
     int v1, v2, min; 

     System.out.println("Enter a value: "); 
     a = console.next(); 
     System.out.println("Enter another value: "); 
     b = console.next(); 

     v1 = Integer.parseInt(a); 
     v2 = Integer.parseInt(b);   
     min = larger(v1, v2); 

     System.out.println(min); 

    } 
    public static int larger(int x, int y){ 
     if (x > y){ 
      return y; 
     } 
     else{ 
      return x; 
     } 
    } 
public static char larger(char x, char y){ 
    if (x > y){ 
     return y; 
    } 
    else{ 
     return x; 
    } 
} 
public static float larger(float x, float y){ 
    if (x > y){ 
     return y; 
    } 
    else{ 
     return x; 
    } 
} 
public static double larger(double x, double y){ 
    if (x > y){ 
     return y; 
    } 
    else{ 
    return x; 
    } 
} 
} 

Программа работает только при вводе целочисленных значений. Я думал, что независимо от того, какой тип данных я ввел Integer.parseInt(a), он преобразует его в целочисленное значение. Где я должен идти, чтобы иметь возможность вводить значения для float, double и char. Пусть мой вклад g и затем f, я получаю это сообщение в компиляторе:

Exception in thread "main" java.lang.NumberFormatException: For input string: "g" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:492) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at subassignment.Subassignment.main(Subassignment.java:20) 
Java Result: 1 

* Revision # 2 после ответа

package subassignment; 

import java.util.Scanner; 

public class Subassignment { 

public static void main(String[] args) { 
    Scanner console = new Scanner (System.in); 

     String a, b; 
     int i1, i2, i3, type; 
     char c1, c2, c3; 
     double d1, d2, d3; 
     float f1, f2, f3; 

     System.out.println("What is your data type: "); 
     System.out.println("1 for int: 2 for char: 3 for double: 4 for float "); 
     type = console.nextInt(); 
     System.out.println("Enter a value: "); 
     a = console.next(); 
     System.out.println("Enter another value: "); 
     b = console.next(); 

     switch (type){ 
     case 1:{ 
     i1 = Integer.parseInt(a); 
     i2 = Integer.parseInt(b);   
     i3 = larger(i1, i2); 
     System.out.println(i3); 
     break; 
     } 
     case 2:{ 
     c1 = a.charAt(0); 
     c2 = b.charAt(0); 
     c3 = larger(c1, c2); 
     System.out.println(c3); 
     break; 
     }   
     case 3:{ 
     d1 = Double.parseDouble(a); 
     d2 = Double.parseDouble(b); 
     d3 = larger(d1, d2); 
     System.out.println(d3); 
     break; 
     } 
     case 4:{ 
     f1 = Float.parseFloat(a); 
     f2 = Float.parseFloat(b); 
     f3 = larger(f1, f2); 
     System.out.println(f3); 
     break; 
     } 
     } 
    } 
    public static int larger(int x, int y){ 
    if (x > y){ 
    return y; 
     } 
    else{ 
    return x; 
     } 
    } 
public static char larger(char x, char y){ 
if (x > y){ 
    return y; 
    } 
    else{ 
    return x; 
     } 
    } 
public static float larger(float x, float y){ 
if (x > y){ 
    return y; 
    } 
    else{ 
    return x; 
     } 
    } 
public static double larger(double x, double y){ 
if (x > y){ 
    return y; 
    } 
    else{ 
    return x; 
     } 
    } 
} 
+0

'Integer.parseInt (а)' пытается интерпретировать 'Ā' как' 'Integer' и«г»' не .. –

+0

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

+0

Где ваша перегруженная функция соответствует этому? Вы конвертируете все в Integer .. или, по крайней мере, пытаетесь. Кроме того, вы можете попробовать console.nextInt(), хотя он все равно должен быть действительным числом. –

ответ

0
You can scan one more input value and get the code working as below:- 
    ...... 
......... 
      System.out.println("Enter a Input Type Integer->1 :: Char->2 :: Float->3::Double->4 "); 
    int inputType = console.next(); 
    System.out.println("Enter a value: "); 
    a = console.next(); 
    System.out.println("Enter another value: "); 
    b = console.next(); 
    int v1,v2,v3; 
    char vc1,vc2,vc3; 
    float vf1,vf2,vf3; 
    double vd1,vd2,vd3; 
    switch(inputType) 
    { 
    case 1: 
    { 
     v1 = Integer.parseInt(a); 
     v2 = Integer.parseInt(b); 
     v3=larger(v1,v2); 
    } 
    case 2: 
    { 
     vc1 = a.charAt(0); 
     vc2 = b.charAt(0); 
     vc3=larger(vc1,vc2); 
    } 
    case 3: 
    { 
     vf1 = Float.parseFloat(a); 
     vf2= Float.parseFloat(b); 
     vf3=larger(vf1,vf2); 
    } 
    case 4: 
    { 
     vd1 = Double.parseDouble(a); 
     vd2 = Double.parseDouble(a); 
     vd3=larger(vd1,vd2); 
    } 
    } 
...... 
....... 
+0

Хорошо, я использовал инструкцию switch, и я получил ее на работу. Большое спасибо Татхагату. Моя единственная вещь, что я должен был использовать break после случаев, чтобы они не продолжали проходить через цикл. Есть ли способ сделать это без инструкций break, так как мой профессор ничего не примет с заявлениями о нарушении. * Код был пересмотрен выше под предыдущим кодом. – user3038498

+0

Я думаю, что regex будет лучшим способом проверки. Пожалуйста, обратите внимание на мой комментарий ниже – Kishore

0

Integer.parseInt (String а) будет работать только для строки для преобразования int и, следовательно, не работает для float, double или char input !!!

+0

Так что мне пришлось бы писать отдельные строки в основной части для каждого другого типа данных? Такие, как if else (если a является int, иначе если a является double и т. Д.)? – user3038498

+0

вы можете сканировать еще один параметр в качестве типа ввода и исправить эту проблему, как показано ниже: - – Kishore

+0

Я не думаю, что мне позволено запрашивать у пользователя, какой тип данных. Я полагал, что компьютер должен различать входные данные пользователей. – user3038498

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