Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

import java.util.Scanner; public class HelloWorld { public static void main(Stri

ID: 3810139 • Letter: I

Question

import java.util.Scanner;

public class HelloWorld {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("Please enter how many Skater you want to enter:");
SkateRace sRace = new SkateRace(stdIn.nextInt());
System.out.println("Welcome to Skate Race Program ");
phase1(stdIn,sRace);
phase2(stdIn,sRace);
phase3(stdIn,sRace);
}
private static void phase1(Scanner stdIn, SkateRace sRace) {
String name,state;
double time;
System.out.println("Starting First Phase");
System.out.println("Enter Skater's data as:Name State Time");
  
for(int i=0;i<sRace.getLength();i++){
System.out.print("Enter Skater data: ");
name=stdIn.next();
state=stdIn.next();
time=stdIn.nextDouble();
Skater skater=new Skater(name,state,time);
sRace.addSkater(skater);
System.out.println("Current Leader: "+findLeader(sRace).toString()+" ");

}
System.out.println("Curren Standings: ");
System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");
for(int i=0;i<sRace.getSize();i++){
System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");

}
  
}
private static void phase2(Scanner stdIn, SkateRace sRace) {
System.out.println(" Starting Second Phase ");
String name;
double newtime;
while(true){
System.out.print("Enter the name and updated time of skater you want to update or "quit" :");
name=stdIn.next();
if(name.equals("q"))
break;
newtime=stdIn.nextDouble();
if(sRace.updateSkater(name,newtime))
System.out.println("Skater "+name+" updated and the new Skater data is :"+sRace.getSkater(name).toString());
else
System.out.println("Skater "+name+ " is not updated!");
}

System.out.println("Current Standings: ");
System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");
for(int i=0;i<sRace.getSize();i++){
System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");

}
  
  
}
protected static Skater findLeader(SkateRace sRace) {
Skater leader=sRace.getSkater(0);
for(int i=1;i<sRace.getSize();i++){
if(sRace.getSkater(i).getTime()<leader.getTime())
leader=sRace.getSkater(i);
}
return leader;
}
private static void phase3(Scanner stdIn, SkateRace sRace) {
System.out.println("Starting Third and disqualifying phase");
String name;
while(true){
System.out.print("Enter the name of the Skater you want to disqualify or "quit" :");
name=stdIn.next();
if(name.equals("quit"))
break;
sRace.removeSkater(name);
}
if(sRace.getSize()>0){

System.out.println("Current Standings: ");
System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");
for(int i=0;i<sRace.getSize();i++){
System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");
}
}else{
System.out.println("All racers disqualified");
}
}
  
  
}

class Skater {
private String name;
private String state;
private double time;
  
public Skater(String name,String state,double time){
this.name=name;
this.state=state;
this.time=time;
}
public String getName(){
return name;
}
public String getState(){
return state;
}
public double getTime(){
return time;
}
public void setTime(double time){
this.time=time;
}
public String toString(){
return (name+" "+state+" "+time);
}
  
  
}

class SkateRace {
private Skater[] skaters;
private int size;
  
public SkateRace(int numberOfSkaters){
this.size=0;
skaters=new Skater[numberOfSkaters];
}
  
public int getSize(){
return size;
}
  
public int getLength(){
return skaters.length;
}
public void addSkater(Skater skater){
if(size<=getLength()){
skaters[size]=skater;
size += 1;
}
}
public Skater getSkater(String name){
for(int i=0;i<size;i++){
if(skaters[i].getName().equals(name)){
return skaters[i];
}
}
return null;
}
public Skater getSkater(int position){
if(position>=0&&position<size)
return skaters[position];
else
return null;
}
public boolean updateSkater(String name,double newtime){
Skater skater=getSkater(name);
if(skater!=null&&newtime<skater.getTime()){
skater.setTime(newtime);
return true;
}else{
return false;
}

}
  
public void removeSkater(String name) {
for (int i = 0; i < size; ++i) {
if (name.equals(skaters[i].getName())) {
while(i<=(size-1)){
if(i==(size-1))
skaters[i]=null;
else
skaters[i]=skaters[i+1];
i++;
}
size -= 1;
break;
}

}

}
public String toString(){
String racers="";
for(int i=0;i<size;i++){
racers += skaters[i].toString()+",";
}
return racers;
}
  
}

What to do In this assignment, you will continue working on Assignment 6 by adding some features. You have to add a new member method to SkateRace class printStandings(): void that will print the array of skaters in ascending order (sorted) by race time. Use insertion sort for this. Your printstandings method should call a helper method that does the sorting. The signature of the helper method should be private void sort Skater array)

Explanation / Answer

PROGRAM CODE:

package skaters;

import java.util.Scanner;

public class HelloWorld {

public static void main(String[] args) {

Scanner stdIn = new Scanner(System.in);

System.out.print("Please enter how many Skater you want to enter:");

SkateRace sRace = new SkateRace(stdIn.nextInt());

System.out.println("Welcome to Skate Race Program ");

phase1(stdIn,sRace);

phase2(stdIn,sRace);

phase3(stdIn,sRace);

}

private static void phase1(Scanner stdIn, SkateRace sRace) {

String name,state;

double time;

System.out.println("Starting First Phase");

System.out.println("Enter Skater's data as:Name State Time");

  

for(int i=0;i<sRace.getLength();i++){

System.out.print("Enter Skater data: ");

name=stdIn.next();

state=stdIn.next();

time=stdIn.nextDouble();

Skater skater=new Skater(name,state,time);

sRace.addSkater(skater);

System.out.println("Current Leader: "+findLeader(sRace).toString()+" ");

}

System.out.println("Curren Standings: ");

System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");

for(int i=0;i<sRace.getSize();i++){

System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");

}

  

}

private static void phase2(Scanner stdIn, SkateRace sRace) {

System.out.println(" Starting Second Phase ");

String name;

double newtime;

while(true){

System.out.print("Enter the name and updated time of skater you want to update or "quit" :");

name=stdIn.next();

if(name.equals("q"))

break;

newtime=stdIn.nextDouble();

if(sRace.updateSkater(name,newtime))

System.out.println("Skater "+name+" updated and the new Skater data is :"+sRace.getSkater(name).toString());

else

System.out.println("Skater "+name+ " is not updated!");

}

System.out.println("Current Standings: ");

System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");

for(int i=0;i<sRace.getSize();i++){

System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");

}

  

  

}

protected static Skater findLeader(SkateRace sRace) {

Skater leader=sRace.getSkater(0);

for(int i=1;i<sRace.getSize();i++){

if(sRace.getSkater(i).getTime()<leader.getTime())

leader=sRace.getSkater(i);

}

return leader;

}

private static void phase3(Scanner stdIn, SkateRace sRace) {

System.out.println("Starting Third and disqualifying phase");

String name;

while(true){

System.out.print("Enter the name of the Skater you want to disqualify or "quit" :");

name=stdIn.next();

if(name.equals("quit"))

break;

sRace.removeSkater(name);

}

if(sRace.getSize()>0){

System.out.println("Current Standings: ");

System.out.println(" The Leader is : "+findLeader(sRace).toString()+" ");

for(int i=0;i<sRace.getSize();i++){

System.out.print((i+1)+":"+sRace.getSkater(i).toString()+" ");

}

}else{

System.out.println("All racers disqualified");

}

}

  

  

}

class Skater {

private String name;

private String state;

private double time;

  

public Skater(String name,String state,double time){

this.name=name;

this.state=state;

this.time=time;

}

public String getName(){

return name;

}

public String getState(){

return state;

}

public double getTime(){

return time;

}

public void setTime(double time){

this.time=time;

}

public String toString(){

return (name+" "+state+" "+time);

}

  

  

}

class SkateRace {

private Skater[] skaters;

private int size;

  

public SkateRace(int numberOfSkaters){

this.size=0;

skaters=new Skater[numberOfSkaters];

}

  

public int getSize(){

return size;

}

  

public int getLength(){

return skaters.length;

}

public void addSkater(Skater skater){

if(size<=getLength()){

skaters[size]=skater;

size += 1;

}

}

public Skater getSkater(String name){

for(int i=0;i<size;i++){

if(skaters[i].getName().equals(name)){

return skaters[i];

}

}

return null;

}

public Skater getSkater(int position){

if(position>=0&&position<size)

return skaters[position];

else

return null;

}

public boolean updateSkater(String name,double newtime){

Skater skater=getSkater(name);

if(skater!=null&&newtime<skater.getTime()){

skater.setTime(newtime);

return true;

}else{

return false;

}

}

  

public void removeSkater(String name) {

for (int i = 0; i < size; ++i) {

if (name.equals(skaters[i].getName())) {

while(i<=(size-1)){

if(i==(size-1))

skaters[i]=null;

else

skaters[i]=skaters[i+1];

i++;

}

size -= 1;

break;

}

}

}

public String toString(){

String racers="";

for(int i=0;i<size;i++){

racers += skaters[i].toString()+",";

}

return racers;

}

//sort method that implements insertion sort

private Skater[] sort(Skater array[])

{

   int n = array.length;

for (int i = 1; i < n; i++) {

Skater key = array[i];

int j = i-1;

while ( (j >= 0) && ( array [j].getTime() > key.getTime() ) ) {

array [j+1] = array [j];

j--;

}

array[j+1] = key;

}

return array;

}

//printing the skaters in insertion sort

public void printStandings()

{

   Skater array[] = sort(skaters);

   for(Skater arr: array)

   {

       System.out.println(arr);

   }

}

}