您能告诉我为什么我收到“字符串无法转换为int”错误的原因

时间:2020-10-06 23:24:06

标签: java

我有一个作业,要求我提供下面代码中的所有内容。一切正常-我只需要计算160个小时内的任何每月小时数,就可以以正常时薪的1.5倍支付。我的数学似乎不错,并且可以正常计算:

((小时-160)*加班)+(160 * hourlyRate)

但是我不知道是否要将该if语句放入正确的方法中,或者是否应该将其用作if语句。我的增/减支付方法在此之前有效,因此需要保留。我删除了一些内容,以便于阅读。

HourlyWorker班级:

public class HourlyWorker extends Employee
{
private int hours;
private double hourlyRate;
private double monthlyPay;
private double overtime = (1.5 * hourlyRate);

public HourlyWorker(String last, String first, String ID, double rate)
{
   super(last, first, ID);
   hourlyRate = rate;
}

public void setHours(int hours)
{
   this.hours = hours;
}

public int getHours()
{
   return hours;
}

public void setHourlyRate(double rate)
{
   this.hourlyRate = rate;
}

public double getHourlyRate()
{
   return hourlyRate;
}


public double getMonthlyPay()
{
   if (hours > 160)
   {
      monthlyPay = ((hours - 160) * overtime) + (160 * hourlyRate);
   }
   else 
   {
      monthlyPay = hourlyRate * hours;
   }
   return monthlyPay;
}

public void increasePay(double percentage)
{
   hourlyRate *= 1 + percentage / 100;
}

public void decreasePay(double percentage)
{
   hourlyRate *= 1 - percentage / 100;
}

}

我正在测试的东西:

public class TestEmployee2
{
   public static void main(String[] args)
   {
   Employee [] staff = new Employee[3];
      HourlyWorker hw1 = new HourlyWorker("Bee", "Busy", "BB1265", 10);
       
      hw1.setHours(200);    
      staff[0] = hw1;

   System.out.println(staff[0].getMonthlyPay());
   staff[0].increasePay(10);
   System.out.println(staff[0].getMonthlyPay());
}
}
Output is:
1600 (initial monthly rate, with 40 overtime hours and 160 regular hours)
1760 (10% increase to the monthlyPay)

Should be:
2006
22

06.6

1 个答案:

答案 0 :(得分:1)

正如@NomadMaker所述,问题出在您的addArtist方法中。 您当前的方法:

   public void addArtist(String artistName, String genre)
   {
      this.artists.add(artist, genre); 
   }

请记住,this.artists是一个可以存储Artist类型的对象的列表。 因此,您应该使用新参数创建一个新艺术家。像这样:

public void addArtist(String artist, String genre)
   {
      this.artists.add(new Artist(artist, genre)); 
   }

您可能会猜到,您没有具有两个参数(应接受名称和类型)的 Artist 构造函数。因此,您应该将此构造函数添加到您的代码中:

public Artist(String name, String genre) {
 this.name = name;
 this.genre = genre;
}

错误说明:

artists是一个列表,调用this.artist.add(artist, genre)时的操作是调用属于具有以下签名的列表集合的方法:add(int index, Artist artist) 索引将是放置艺术家的索引(如果顺序对您而言重要)。