不兼容类型:布尔不能转换为double(错误)

问题描述:

import javax.swing.JOptionPane; 

import java.util.Scanner; 

public class pay{ 

static Scanner sc; 

public static void main (String[]args) 

{ 
    double Regpay = 8; 
    double OThour = Regpay * 1.5; 
    double hours = 0; 
    double gpay = Regpay * hours; 
    double Totalpay = OThour + gpay; 

    Scanner input = new Scanner(System.in); 
    System.out.println("Normal pay for hours worked less than 40hrs will be, £8.00 per hour"); 
    System.out.println("If workers work more than 40hrs, their pay will be time and a half"); 
    System.out.println("please enter your name"); 
    String name = sc.nextLine(); 

    System.out.println("How many hours did you work this month"); 
    hours = sc.nextDouble(); 

    System.out.println("How many hours overtime did you work"); 
    OThour = sc.nextDouble(); 




    if (hours<=40){ 
     Totalpay = gpay; 
     System.out.print("You are not entitled to overtime pay"); 
    }else{ 
     if (hours>=41) 
     Totalpay = gpay + OThour >=1; 
    } 
    }   
} 

我收到错误就行了Totalpay = gpay + OThour >=1;我不知道该怎么办,我一直试图改变周围的事情,但我不断收到同样的错误!!!!不兼容类型:布尔不能转换为double(错误)

+0

你想用这条线完成什么?看起来你正在比较'gpay + OThour',看它是否大于或等于'1'。 – rgettman

+1

'gpay + OThour> = 1'检查'gpay + OThour'是否大于或等于1,并返回'true'或'false',由于它不是一个'double'数。 –

您正在寻找的答案(我假设)是测试OTHoure是否大于1,并将其添加到TotalPay。要完成此操作,请使用

替换TotalPay = TotalPay + OTHours> = 1
if(OTHours>=1){ 
    TotalPay = gPay + OTHour; 
} 
+0

大部分工作都是由我的老师完成的,但其目的是为了让员工支付当月支付的总金额,将时长(OThours)添加到gpay中。目的还在于,如果雇员工作了41小时或更长时间,那么他应该在工作40小时内每工作小时支付8 x 1.5的费用。 –

您正在组合两个不兼容的表达式类型。

Totalpay = gpay + OThour >=1; 

使用操作的顺序, “gpay + OThour> = 1” 是两个表达式:

gpay + OThour : (the sum of two doubles) 

(result of gpay + OThour) >= 1 : (a boolean expression) 

这样做的结果是一个布尔答案(真/假),这是不被解析为双倍,所以它不能存储在TotalPay中。其次,你的结果不会像预期的那样 - 你使用的变量(gpay)已经被初始化为0,并且永远不会被改变。

+0

我应该将0更改为什么值? –

@purpleorb和@ Jaboyc已经解释了错误被抛出的原因。我要谈一个更全面的解决方案。

有几个问题与此

  1. 从用户
  2. 布尔被分配到双重问题(如你所提到的)
  3. 不必要的if语句让输入之前查找变量值结构

您可以将代码更改为以下来解决这些问题:

Scanner input = new Scanner(System.in); 
    System.out.println("Normal pay for hours worked less than 40hrs will be, £8.00 per hour"); 
    System.out.println("If workers work more than 40hrs, their pay will be time and a half"); 
    System.out.println("please enter your name"); 
    String name = input.nextLine(); 

    double hours = 0; 
    System.out.println("How many hours did you work this month"); 
    hours = input.nextDouble(); 

    double Regpay = 8; 
    double OThour = Regpay * 1.5; 
    double gpay = Regpay * hours; 
    double Totalpay = OThour + gpay; 

    if (hours>40){ 
     Totalpay = gpay + (OThour- 1) * (hours - 40); 
    }else{ 
     Totalpay = gpay; 
     System.out.print("You are not entitled to overtime pay"); 
    } 

这样做是在用户将值输入到hours之后进行计算gpay = Regpay * hoursTotalpay = OThour + gpay。此外,这可以通过检查小时数是否大于40来简化if语句结构,然后再执行所需的计算。

+0

谢谢你这么多帮助 –

+0

欢迎你!如果您发现答案有帮助,并回答您的问题,请记住点击绿色复选标记将其标记为接受的答案! – Bimde