我创建了一个抽象类Employee,它显示并计算每周和每小时员工的详细信息。在主要方法中,我使用了switch case作为菜单,并且只要用户需要,就可以继续使用该程序。但是我在编译代码时遇到错误。:
*javac "AbstractDemo.java" (in directory: /home/user/Desktop)
AbstractDemo.java:52: error: incompatible types
ch=s.next();
^
required: char
found: String
1 error
Compilation failed.*
这是源代码:
import java.util.*;
abstract class Employee{
Employee(float amt,int n){
float sal;
System.out.println("The amount paid to Employee is:"+amt);
sal=amt*n;
System.out.println("Total Salary is:"+sal);
}
}
class WeeklyEmployee extends Employee{
WeeklyEmployee(float a,int n){
super(a,n);
}
}
class HourlyEmployee extends Employee{
HourlyEmployee(float amt,int hrs){
super(amt,hrs);
}
}
public class AbstractDemo {
public static void main (String args[]) {
int a;
char ch;
float amount;
int hours;
int weeks;
Scanner s=new Scanner(System.in);
do{
System.out.println("Enter the choice");
a=s.nextInt();
switch (a) {
case 1 :
System.out.println("Enter the salary of weekly employee(Per Week):");
amount=s.nextFloat();
System.out.println("Enter the total no of week");
weeks=s.nextInt();
Employee W=new WeeklyEmployee(amount,weeks);break;
case 2:
System.out.println("Enter the salary of hourly employee(Per hour):");
amount=s.nextFloat();
System.out.println("Enter the total no of hours");
hours=s.nextInt();
Employee H=new HourlyEmployee(amount,hours);break;
default:System.out.println("Error invalid Choice");
}
System.out.println("Do you wish to continue?(Y/N)");
ch=s.next();
}while (ch== 'y'||ch== 'Y');
}
}
但是当我使用s.next().ChatAt(0);
代码编译成功。有人可以解释为什么会发生这种情况吗?Char是否将输入作为字符串?或者如果它是一个字符串,为什么当我编辑while条件时它显示错误while(ch=="y"||ch=="Y");
?
答案 0 :(得分:3)
ch
是char
。 s.next()
会返回String
。您无法将String
分配给char
。您可以将String
的第一个字符分配给char
,这就是您在ch = s.next().charAt(0);
中所做的。
这是一件好事,你没有尝试while(ch=="y"||ch=="Y")
,因为即使你将ch
改为String
(这将允许它通过编译,但不会' t给出预期结果),因为您无法将Java中的String
与==
进行比较(您应该使用equals
代替)。
答案 1 :(得分:1)
s.next()
返回下一个String对象。但s.next().charAt(0)
返回下一个String对象的第一个字符。因此,它期待的性格和投掷错误
答案 2 :(得分:1)
next()
对象的方法Scanner
返回String
。因此,为了使您的作业有效,您需要使用charAt()
方法从该字符串中提取第一个字符。
由于ch是一个不是字符串的字符,while(ch == "y" || ch == "Y")
无法工作。
改为使用while(ch == 'y' || ch == 'Y')
。
(单引号=字符,双引号=字符串)
答案 3 :(得分:1)
这是因为 ch 是 char ,您的想法是输入单个字母Y或N来停止或继续您的程序。但是,您使用返回String的Scanner方法next()。这就是为什么你得到这个
的主要原因 *javac "AbstractDemo.java" (in directory: /home/user/Desktop)
AbstractDemo.java:52: error: incompatible types
ch=s.next();
^
required: char
found: String
1 error
Compilation failed.*
当您尝试使用 s.next()。ChatAt(0)时。这意味着你试图从输入中获得第一个字符 - >当您尝试将字符串分配给Char而不转换它时,这只是不兼容的类型错误。
答案 4 :(得分:0)
使用s.next()时,它将被读取为字符串。这就是ch = s.next()
出错的原因但是,s.next()。charAt(0)将返回一个可以由变量使用的char值。
同样,当你将char ch与' y'进行比较时,它会比较两个字符,但是" y"读取为字符串,会导致类型不匹配。