Моя задача состоит в следующем:Как различать типы данных в подпрограмме?
Запись Подпрограммы найти наименьшее из двух значений с помощью перегруженной функции.
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;
}
}
}
'Integer.parseInt (а)' пытается интерпретировать 'Ā' как' 'Integer' и«г»' не .. –
Вы должны сначала проверить погоду ваш вход цифра или символ , перед вызовом более крупного метода. –
Где ваша перегруженная функция соответствует этому? Вы конвертируете все в Integer .. или, по крайней мере, пытаетесь. Кроме того, вы можете попробовать console.nextInt(), хотя он все равно должен быть действительным числом. –