next()和next()之间的区别.CharAt(0);

时间:2015-11-07 11:30:39

标签: java string char

我创建了一个抽象类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");

5 个答案:

答案 0 :(得分:3)

chchars.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"读取为字符串,会导致类型不匹配。