Can anyone help me with this really confusing programming problem?

The board game scrabble works by assigning points to wooden tiles arranged in cells on a board. We'll simplify this considerably, and consider the following question. We begin with the letter-scoring scheme from Scrabble: a = 1, b = 3, c = 3, d = 2, ..., z = 10. Given a text file - a novel for example, what is the highest-(or a highest-) scoring line in the the file? In keeping with the Scrabble style, we'll add double and triple letter scores: any letter that falls at a line (String) position that's evenly divisible by 4 will have its score doubled; and any letter that falls at a line (String) position that's evenly divisible by 9 will have its score tripled. A letter at a position that's evenly divisible by 4 and 9 will have its score doubled, not tripled. All non-letters (e.g., space, comma, etc.) have score 0.

Example: the line "now is the time" has a Scrabble score (by our rules) of 29. (Verify this with pencil and paper. Note that "n" is at position 0, which is a double letter score.)

Your solution should include two files: A driver called LineScrabbleDriver, and a file called LineScrabble.java which does the heavy lifting for the application. The LineScrabble file should extend Echo, in the standard way we've indicated (it could also extend the LineReader class).

(Echo Class)
import java.util.Scanner;
import java.io.*;

public class Echo{
String fileName; // external file name
Scanner scan; // Scanner object for reading from external file

public Echo(String f) throws IOException
{
fileName = f;
scan = new Scanner(new FileReader(fileName));
}

public void readLines(){ // reads lines, hands each to processLine
while(scan.hasNext()){
processLine(scan.nextLine());
}
scan.close();
}

public void processLine(String line){ // does the real processing work
System.out.println(line);
}
}

(LineReader Class)
import java.util.Scanner;
import java.io.*;

public abstract class LineReader{
String fileName; // external file name
Scanner scan; // Scanner object for reading from external file

public LineReader(String f) throws IOException
{
fileName = f;
scan = new Scanner(new FileReader(fileName));
}
public void readLines(){ // reads lines, hands each to processLine
while(scan.hasNext()){
processLine(scan.nextLine());
}
scan.close();
}
public abstract void processLine(String line);
}

Output: your program should report the (or a) highest scoring line in the input file, along with the score for that line.

Tips:

Here is a list from a to z of the letter scores from Scrabble:

{1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,… Notice that this list is in proper format for copying and pasting directly into your program as an int array.

It's far easier to convert lines of text to lowercase before processing.

You MUST use a try-catch harness in driver class.

You MUST comment every method with a one line description of the job that method does, and your description must be placed just below the method header line.

Two sample files are provided below, sampletext.txt is silly but useful, and HeartOfDarkness.txt is the Conrad novella.

Some sample output:

enter file name

sampletext.txt

winner:

and aid. their. party?

winning score: 40

-------------------------------

enter file name

HeartOfDarkness.txt

winner:

plenty time. i can manage. you take kurtz away quick--quick--i tell

winning score: 192

(HeartOfDarkness.txt)
twiki-edlab(dot)cs(dot)umass(dot)edu/pub/Moll121/AssignSix/HeartOfDarkness.txt
(sample.txt)
twiki-edlab(dot)cs(dot)umass(dot)edu/pub/Moll121/AssignSix/sampletext.txt

I got the the LineScrabble class:

import java.io.*;

public class LineScrabble extends Echo{
int max = 0;
String bestLine = "";

public LineScrabble(String f) throws IOException
{
super(f);
}
int[] scrabbles = {1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10};

public void processLine(String s)
{
s.toLowerCase();
int score = 0;
for(int i = 0; i<s.length(); i++){
int w = (int)(s.charAt(i)-97);
if (w >=0 && w <= 25)
{
if (i == 0)
{
score += 2*scrabbles[w];
}
else if (i%4==0 && i%9==0)
{
score += 2*scrabbles[w];
}
else if (i%9==0)
{
score += 3*scrabbles[w];
}
else if (i%4==0)
{
score += 2*scrabbles[w];
}
}
System.out.println(score);
}
if(score > max)
{
max = score;
bestLine = s;
}
}

public void results()
{
System.out.println("Winning score: " + max);
System.out.println("Winning line: " + bestLine);
}
}

Does anyone have the driver class for this assignment?

To solve this programming problem, you need to:

1. Create a new Java class called LineScrabble that extends the Echo class. This class will handle the heavy lifting for the application.
2. Declare an int array that represents the letter scores from Scrabble. Copy and paste the array {1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,...} into your LineScrabble class.
3. Implement the processLine method in the LineScrabble class. This method should receive each line from the text file and calculate its score according to the given rules. To calculate the score, iterate over each character in the line, convert it to lowercase, and check its corresponding score in the letter scores array. Apply the double and triple letter scores based on the position of the character in the line. Keep track of the highest scoring line and its score.
4. In the main method of the LineScrabbleDriver class, prompt the user to enter the file name of the text file to process.
5. Create an instance of the LineScrabble class, passing the file name to its constructor.
6. Invoke the readLines method of the LineScrabble instance, which will read each line of the text file and process it.
7. After processing all the lines, print the highest scoring line and its score.

Remember to include proper try-catch handling to handle any potential file input/output errors.

Let me know if you need any further assistance!