Java 如何区分子例程中的数据类型?
我的任务如下: 编写子例程以使用重载函数查找两个值中的最小值Java 如何区分子例程中的数据类型?,java,Java,我的任务如下: 编写子例程以使用重载函数查找两个值中的最小值 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 ja
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
*回答后的第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;
}
}
}
parseInt(字符串a)只适用于字符串到整数的转换,因此不适用于浮点、双精度或字符输入
Integer.parseInt(a)
尝试将a
解释为Integer
,而“g”
不是。在调用较大的方法之前,必须首先检查输入是数字还是字符。重载函数与此匹配在哪里?您正在将所有内容转换为整数。。或者至少试着去做。此外,您也可以尝试console.nextInt(),尽管它仍然需要是一个有效的数字。您的老师真的使用术语subroutine吗?那太糟糕了。所以我必须在主体部分为每种不同的数据类型写单独的行?例如if-else语句(如果a是int,如果a是double,等等)?您可以扫描多个参数作为输入类型,并按如下方式解决此问题:-我认为不允许提示用户选择哪种数据类型。我假设计算机必须区分用户的输入。问题在于字符串到int、float、char和double的转换,以及将int、float、char和double存储到适当的数据类型。您可以使用我提供的下一个解决方案。您可以使用String.matches(String regex)来确定输入值是Int、char、float还是double,如下:-if(a.matches(“[a-Za-z]”){System.out.println(a+”是char”);}else if(a.matches(“[0-9]”){System.out.println(a+”是整数”);}else if(c.contains(“.”){//使用更好的方法匹配double System.out.println(c+“是double”);}否则{//浮点匹配代码}好的,我使用了switch语句,我成功了。非常感谢如来佛。我唯一需要做的是,我必须在案例之后使用break,这样它们就不会继续在循环中运行。有没有一种方法可以在没有break语句的情况下做到这一点,因为我的教授不会接受任何带有break语句的内容。*代码已经在上面进行了修改在前面的代码下面。我认为正则表达式将是更好的验证方法。请参阅下面我的评论
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);
}
}
......
.......