stdout is not correct In some test cases: exception in thread "main" java.util.NoSuchElementException please fix this code and add a counter. The desired output is given in the picture. Also please add spaces where it belongs
- stdout is not correct
- In some test cases: exception in thread "main" java.util.NoSuchElementException
please fix this code and add a counter. The desired output is given in the picture. Also please add spaces where it belongs
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
class Name {
public Name(String last, String first) {
this.last = last;
this.first = first;
}
public Name(String first) {
this("", first);
}
public String getFirst() {
return first;
}
public String getLast() {
return last;
}
public String getFormal() {
return first + " " + last;
}
public String getOfficial() {
return last + " " + first;
}
public String getInitials() {
return first.charAt(0) + "_" + last.charAt(0) + "_";
}
public boolean equals(Name other) {
return first.equals(other.first) && last.equals(other.last);
}
public String toString() {
return first + " " + last;
}
public static Name read(Scanner scanner) {
if (!scanner.hasNext())
return null;
String last = scanner.next();
String first = scanner.next();
return new Name(last, first);
}
private String first, last;
}
class PhoneNumber {
public PhoneNumber(String number) {
this.number = number;
}
public String getAreaCode() {
return number.substring(1, number.indexOf(")"));
}
public String getExchange() {
return number.substring(number.indexOf(")") + 1, number.indexOf("-"));
}
public String getLineNumber() {
return number.substring(number.lastIndexOf("-") + 1);
}
public boolean isTollFree() {
return number.charAt(0) == '8';
}
public boolean equals(PhoneNumber other) {
return number.equals(other.number);
}
public String toString() {
return number;
}
private String number;
public static PhoneNumber read(Scanner scanner) {
if (!scanner.hasNext())
return null;
String number = scanner.next();
return new PhoneNumber(number);
}
}
class PhonebookEntry {
private Name name;
private PhoneNumber phoneNumber;
public PhonebookEntry(Name name, PhoneNumber phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
public Name getName() {
return name;
}
public PhoneNumber getPhoneNumber() {
return phoneNumber;
}
public void Display() {
if (phoneNumber.isTollFree()) {
System.out.println("Dialing (toll-free) " + name.getFormal() + ": "
+ phoneNumber.toString());
} else {
System.out.println("Dialing " + name.getFormal() + ": "
+ phoneNumber.toString());
}
}
public String toString() {
return name.toString() + ": " + phoneNumber.toString();
}
public boolean equals(PhonebookEntry other) {
return name.equals(other.name) && phoneNumber.equals(other.phoneNumber);
}
public static PhonebookEntry read(Scanner scanner) {
Name name = Name.read(scanner);
PhoneNumber phoneNumber = PhoneNumber.read(scanner);
if (name == null || phoneNumber == null)
return null;
else
return new PhonebookEntry(name, phoneNumber);
}
}
public class Phonebook {
public static void main(String[] args) {
char choice;
PhonebookEntry entries[]=new PhonebookEntry[100];
Scanner sc = new Scanner(System.in);
int count=0;
Scanner readFile=null;
try {
readFile = new Scanner(new File("phonebook.text"));
PhonebookEntry pe=PhonebookEntry.read(readFile);
while(pe!=null)
{
if(count<entries.length)
{
entries[count]=pe;
count++;
}
else
{
System.out.println("*** Exception *** Phonebook capacity exceded - increase size of underlying array");
PhonebookEntry entriesNew[]=new PhonebookEntry[entries.length*2];
for(int i=0;i<count;i++)
{
entriesNew[i]=entries[i];
}
entries=entriesNew;
entries[count]=pe;
count++;
}
pe=PhonebookEntry.read(readFile);
}
readFile.close();
while(true)
{
System.out.print("lookup, reverse-lookup, quit (l/r/q)? ");
choice=sc.next().charAt(0);
switch(choice)
{
case 'L':
case 'l':{
System.out.print("last name? ");
String lastName=sc.next();
System.out.print("first name? ");
String firstName=sc.next();
int index=searchByName(lastName,firstName,entries,count);
if(index!=-1)
{
System.out.println(entries[index].getName().getFormal()+"'s phone number is "+entries[index].getPhoneNumber().toString());
}
else
{
System.out.println("Name not found");
}
continue;
}
case 'R':
case 'r':{
System.out.print("phone number (nnn-nnn-nnnn)? ");
String number=sc.next();
int index=searchByNumber(number,entries,count);
if(index==-1)
{
System.out.println("** Phone number not found **");
}
else
{
System.out.println(number+" belongs to "+entries[index].getName().getFormal());
}
continue;
}
case 'Q':
case 'q':{
break;
}
default:{
System.out.println("** Invalid Choice **");
continue;
}
}
break;
}
} catch (FileNotFoundException e) {
System.out.println("*** IOException *** phonebook.text not found");
}
}
private static int searchByNumber(String number, PhonebookEntry[] entries,
int count) {
for(int i=0;i<count;i++)
{
if(entries[i].getPhoneNumber().toString().equalsIgnoreCase(number))
{
return i;
}
}
return -1;
}
private static int searchByName(String lastName, String firstName,
PhonebookEntry[] entries, int count) {
for(int i=0;i<count;i++)
{
if(entries[i].getName().getLast().equalsIgnoreCase(lastName) && entries[i].getName().getFirst().equalsIgnoreCase(firstName))
{
return i;
}
}
return -1;
}
}
Trending now
This is a popular solution!
Step by step
Solved in 2 steps with 1 images