Hi! I`m new to java programming, and I´m working on a task where I`m suppose to
ID: 3670206 • Letter: H
Question
Hi! I`m new to java programming, and I´m working on a task where I`m suppose to create 4 different versions of a key card system (each version is a further development of the last). I got help from a Chegg expert to write the codes. But when I´m pasting the codes into my java (Eclipse), I get an error in "version 0.2" in line 27 it says; ("Type mismatch: Cannot convert from int to String"). Can someone please help me rewrite the code of "verdion 0.2" where it is necesarry?
I also don`t know how to create the class in the java project for "version 0.4". What should I call that class? And what boxes should I tick off etc.. (I´ll make sure to give you a "thumbs up").
What I have done so far:
I have created a project. Then I created a class called Card in the src folder. This works fine. Then I created a interface called Employee (the one with the int String error) also in the src folder. Then I created a class called Constants (works fine) also in the src folder. And from here I´m stuck.. I don`t know whether "version 0.4" is a class/interface or what I should call the class, or which "boxes" to tick off.
Here is the codes for the 4 versions:
Version 0.1
public abstract class Card {
String firstName;
String lastName;
String pin;
long cardNumber;
boolean accessCode;
static long card = 1;
public Card() {
firstName = "Alex";
lastName = "Mitti";
pin ="1120";
cardNumber = card;
card++;
accessCode = false;
}
String getName(){
return firstName + " "+lastName;
}
abstract boolean checkPIN(int pin);
@Override
public String toString() {
return "[Name: "+firstName+" "+lastName+",PIN: "+pin+",Card Number: "+cardNumber+",IsCancelled: "+accessCode+"]";
}
boolean isCancelled(){
return accessCode;
}
}
Version 0.2
import java.util.*;
class Employee extends Card{
@Override
boolean checkPIN(int pin) {
int day, month, year;
int second, minute, hour;
GregorianCalendar date = new GregorianCalendar();
day = date.get(Calendar.DAY_OF_MONTH);
second = date.get(Calendar.SECOND);
minute = date.get(Calendar.MINUTE);
hour = date.get(Calendar.HOUR);
if(hour>=7 && hour<=17 && !isCancelled() && pin!=9999){
return true;
}
return false;
}
}
class Guest extends Card{
Date issueData;
public Guest(){
pin =9999; //THIS IS WHERE THE ERROR OCCURS "Cannot convert from int to String".
issueData = new Date();
}
@Override
boolean checkPIN(int pin) {
Date currentDate = new Date();
int diffInDays = (int) ((currentDate.getTime() - issueData.getTime()) / (1000 * 60 * 60 * 24));
if(pin == 9999 && diffInDays <=7 && (!isCancelled())){
return true;
}
return false;
}
}
version 0.3
import java.util.Calendar;
import java.util.GregorianCalendar;
public interface Constants {
void setFirstname(String firstName);
String getFirstname();
void setLastname(String lastName);
String getLastname();
void setFullName(String fullName);
String getFullName();
double computeCredit();
double computeBonus();
}
class Employee extends Card implements Constants{
double salaryPerHe;
GregorianCalendar issueData ;
public Employee() {
salaryPerHe =123.43;
issueData = new GregorianCalendar();
}
@Override
boolean checkPIN(int pin) {
int day, month, year;
int second, minute, hour;
GregorianCalendar date = new GregorianCalendar();
year = date.get(Calendar.YEAR);
day = date.get(Calendar.DAY_OF_MONTH);
second = date.get(Calendar.SECOND);
minute = date.get(Calendar.MINUTE);
hour = date.get(Calendar.HOUR);
if(hour>=7 && hour<=17 && !isCancelled() && pin!=9999){
return true;
}
return false;
}
@Override
public void setFirstname(String firstName) {
this.firstName= firstName;
}
@Override
public String getFirstname() {
return firstName;
}
@Override
public void setLastname(String lastName) {
this.lastName =lastName;
}
@Override
public String getLastname() {
return lastName;
}
@Override
public void setFullName(String fullName) {
String names[] = fullName.split("\s+");
firstName = names[0];
lastName=names[1];
}
@Override
public String getFullName() {
return firstName+" "+lastName;
}
@Override
public double computeCredit() {
return salaryPerHe*45; // constant 45
}
@Override
public double computeBonus() {
GregorianCalendar date = new GregorianCalendar();
int currentYear = date.get(Calendar.YEAR);
int startYear = issueData.get(Calendar.YEAR);
return (currentYear-startYear)*45; // 45 constant
}
}
version 0.4
abstract class Card implements Comparable<Card>,Cloneable { //WHAT IS THE CLASS NAME?
String firstName;
String lastName;
int pin;
long cardNumber;
boolean accessCode;
static long card = 1;
public Card() {
firstName = "Alex";
lastName = "Mitti";
pin = 0;
cardNumber = card;
card++;
accessCode = false;
}
String getName(){
return firstName + " "+lastName;
}
abstract boolean checkPIN(int pin);
@Override
public String toString() {
return "[Name: "+firstName+" "+lastName+",PIN: "+pin+",Card Number: "+cardNumber+",IsCancelled: "+accessCode+"]";
}
boolean isCancelled(){
return accessCode;
}
@Override
public int compareTo(Card o) {
if(this.lastName.compareTo(o.firstName) !=0)
return -1;
return this.firstName.compareTo(o.firstName);
}
}
Explanation / Answer
The type mismatch is present in version 2 because you have defined "pin" as string variable in version 1 but in version 2 you are assigning an integer value. So, just change the type of pin from string to int and it will start working.
you need to change few lines in version to get it working:
public abstract class Card {
String firstName;
String lastName;
int pin;
long cardNumber;
boolean accessCode;
static long card = 1;
public Card() {
firstName = "Alex";
lastName = "Mitti";
pin =1120;
cardNumber = card;
card++;
accessCode = false;
}
String getName(){
return firstName + " "+lastName;
}
abstract boolean checkPIN(int pin);
@Override
public String toString() {
return "[Name: "+firstName+" "+lastName+",PIN: "+pin+",Card Number: "+cardNumber+",IsCancelled: "+accessCode+"]";
}
boolean isCancelled(){
return accessCode;
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
VERSION :2,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
In version 3 change
public interface Constants {
to
interface Constants {
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
I would recommend to change the class name in version 0.4 . Keep it "Cards".
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Even if you dont use eclipse, it will run in terminal . Just create four files for each version Class names.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.