File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Beginning Java and the fly likes Head First Java Programs Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Head First Java Programs" Watch "Head First Java Programs" New topic
Author

Head First Java Programs

Simon Evans
Ranch Hand

Joined: Mar 27, 2008
Posts: 93
Dear Programmers,
I have been reading 'Head First Java' anyway, after a certain point, to run the programs therin it was necessary to install jdk 6.0, which I did, but I still get compiler error returns, even upon using code lifted directly from the headfirstlabs.com site. The book recommends this site (JavaRanch) to discuss whatever problems are thus encountered. I encountered such problems on pages 150 - 3, with the programs DotCom, DotComBust and GameHelper. They all return compiler errors, so I can't play the version of 'Battleships' as outlined.
It seems even though I am using the jdk 6.0 - the compiler won't recognise the 'enhanced loops' nor other stuff - like 'input streams' - just like the jdk 1.2 didn't. I could go into greater detail as to the error returns, but would like to know if there is a sub-site in Java Ranch that might deal with this conumdrum.
Thank you for your assistance.
Yours
Simon Evans


Simon
Sam Bluesman
Ranch Hand

Joined: Nov 21, 2004
Posts: 191
Please state the compiler errors exactly and we might be able to help. I'm unsure if we can solve all your problems given that we are not all familair with 'Head First Java' but we might be able to point you in the right direction.

Sam
[ March 27, 2008: Message edited by: Sam Bluesman ]

Moosey knows best
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
I couldn't see anything about your particualr problem in the Javaranch FAQ. It is nice to see HFJ recommending us, but that was probably printed before I signed on.
You should have no difficulty getting enhanced for loops to run on jdk1.6.0. Try writing this at a terminal: java -version

Also
javac -version

Both ought to give something with 1.6 in.

If you are getting compiler errors about not being able to access enhanced for loops you appear to have got a JDK somewhere, but it must be an old one, 1.4.2 or older. And as Sam Bluesman has already told you, it is easier to help if we know the exact details of what you are doing.
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
Please don't send PMs about replies to posts. You ought to have posted what you sent me here, and used code tags (below the mesage window) around the code. Please post your code here, so everybody can learn from it.

Make sure not to copy code onto the Ranch by hand, but use copy-and-paste. That way you quote the exact code rather than potentially adding spelling errors. In fact about 80% of the compiler errors you got are misspellings.

Are you using an IDE? Probably not a good idea for beginners. Best to get used to using a text editor; since you appear to be on Windows I suggest you try Notepad++ (try here) which supports syntax highlighting automatic indentation and bracket pairing highlighting.

In fact, I think that if you check your code for misspelllings, unpaired brackets and wordWhichShouldBeOneWord div ided in pa rts, you will reduce your list of errors to about 2. If you check for places where there ought to be a = operator which you have missed out, you can probably get rid of the other two.
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
Actually, I think I may have been a bit harsh. Sorry.

Your list of errors read
C:\Java Head First>javac DotCom.java
DotCom.java:8: <identifier> expected
private ArrayList< String> locationCells;
^
DotCom.java:13: <identifier> expected
public void setLocationCells(ArrayList<String>loc)
^
DotCom.java:66: ')' expected
^
3 errors

C:\Java Head First>javac DotComBust.java
DotComBust.java:9: <identifier> expected
private ArrayList<DotCom> dotComsList = new ArrayList<DotCom>();
^
DotComBust.java:42: ';' expected
for (DotCom dotComToSet : dotComsList)
^
DotComBust.java:52: illegal start of expression
}
^
DotComBust.java:51: ';' expected
^
DotComBust.java:80: ';' expected
for (DotCom dotComeToTest: dotComsList)
^
DotComBust.java:108: illegal start of expression
}
^
DotComBust.java:107: ';' expected
^
7 errors

C:\Java Head First>javac GameHelper.java
GameHelper.java:34: ';' expected
inputLine is.readLine();
^
GameHelper.java:51: <identifier> expected
public ArrayList<String>placeDotCom(int comSize)
^
GameHelper.java:149: ';' expected
^
3 errors
Trying to compile what you sent me in the PM gave a different set of errors; I can only go by what you sent me.What I have found are:
  • DotCom - instead of = after index, double )) after "ouch! you sank . . ."
  • GameHelper: = missing after inputLine, comSize misspelt twice, ) missing and ) doubled after ==0
  • DotComBust: helper dotComsList and dotComToTest misspelt, ) missing or )) doubled after ==0
  • You will have to go through your own code and check for those errors.
    Simon Evans
    Ranch Hand

    Joined: Mar 27, 2008
    Posts: 93
    Dear Programmers,

    I have previously posted this matter, and seem to have ended up taking culpability for code, which although published to hard copy (Head First Java p150-2) and to the net (www.headfirstlabs.com Chapter 6) doesn't compile.

    I was told not to send the code as a personal message to 'RanchHands' but to the Post Reply option, so this is what I am now doing.

    I am quoting the code as I read it, and anyone if they have the book, or wishes to look at the site code can check thus, that it is not my fault if there are errors, besides if there were no errors, programs would compile, and I would not be asking about it.

    I have installed the jdk 6.0 to my computer, and 'javac' wouldn't be legible as a command if it were not in the jdk's established classpath, which it is, but all the same compiler seems to point to the enhanced loops, and to establishment of input stream object, and arraylist classes though I was given to understand these are jdk6.0 legible.

    Without wishing to put the cart before the horse, so's to speak, this is the response to my compiler re: DotCom, DotComBust and GameHelper (on pages 150, 148=9 & 152 HFJ, respectively) :-

    ***************************************************************************
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:\Documents and Settings\Administrator>cd c:\set PATH=c rogramFiles\Java\jdk1.
    6.0.05\bin;%PATH%
    The filename, directory name, or volume label syntax is incorrect.

    C:\Documents and Settings\Administrator>cd c:\Java Head First

    C:\Java Head First>set PATH=C rogram Files\Java\jdk1.6.0.05\bin;%PATH%

    C:\Java Head First>cd c:\Java Head First\sub


    C:\Java Head First\sub>javac DotCom.java
    DotCom.java:5: <identifier> expected
    private ArrayList<String> locationCells;
    ^
    DotCom.java:7: <identifier> expected
    public void setLocationCells(ArrayList<String>loc)
    ^
    DotCom.java:34: ')' expected
    }
    ^
    3 errors

    C:\Java Head First\sub>javac DotComBust.java
    DotComBust.java:5: <identifier> expected
    private ArrayList<DotCom> dotComsList = new ArrayList<DotCom>();
    ^
    DotComBust.java:21: ';' expected
    for (DotCom dotComToSet : dotComsList)
    ^
    DotComBust.java:26: illegal start of expression
    }
    ^
    DotComBust.java:25: ';' expected
    }
    ^
    DotComBust.java:40: ';' expected
    for (DotCom dotComToTest: dotComsList)
    ^
    DotComBust.java:54: illegal start of expression
    }
    ^
    DotComBust.java:53: ';' expected
    System.out.println(result);
    ^
    7 errors

    C:\Java Head First\sub>javac GameHelper.java
    GameHelper.java:17: ';' expected
    inputLine is.readLine();
    ^
    GameHelper.java:27: <identifier> expected
    public ArrayList<String>placeDotCom(int comSize)
    ^
    GameHelper.java:82: ';' expected
    }
    ^
    3 errors

    C:\Java Head First\sub>
    ***************************************************************************
    Here are the programs that caused this output, please bear in mind I am only using the text as writ, also I am not interested in finding fault with anyone, only to get through the book, which would be somewhat pointless if code don't work :-
    ***************************************************************************
    import java.util.*;

    public class DotCom
    {
    private ArrayList<String> locationCells;
    private String name;
    public void setLocationCells(ArrayList<String>loc)
    {
    locationCells = loc;
    }
    public void setName(String n)
    {
    name = n;
    }
    public String checkYourself(String userInput)
    {
    String result = "miss";
    int index = locationCells.indexOf(userInput);
    if(index >= 0)
    {
    locationCells.remove(index);
    if(locationCells.isEmpty())
    {
    result = "kill";
    System.out.println("Ouch! You sank" + name + " ");
    }
    else
    {
    result = "hit";
    }
    }
    return result;
    }
    }

    ***************************************************************************
    import java.util.*;
    public class DotComBust
    {
    private GameHelper helper = new GameHelper();
    private ArrayList<DotCom> dotComsList = new ArrayList<DotCom>();
    private int numOfGuesses = 0;
    private void setUpGame()
    {
    DotCom one = new DotCom();
    one.setName("Pets.com");
    DotCom two = new DotCom();
    two.setName("eToys.com");
    DotCom three = new DotCom();
    three.setName("Go2.com");
    dotComsList.add(one);
    dotComsList.add(two);
    dotComsList.add(three);
    System.out.println("Your goal is to sink three dot coms.");
    System.out.println("Pets.com, eToys.com, Go2.com");
    System.out.println("Try to sink them all in the fewest number of guesses");
    for (DotCom dotComToSet : dotComsList)
    {
    ArrayList<String> newLocation = helper.placeDotCom(3);
    dotComToSet.setLocationCells(newLocation);
    }
    }
    private void startPlaying()
    {
    while(!dotComsList.isEmpty())
    {
    String userGuess = helper.getUserInput("Enter a guess");
    checkUserGuess( userGuess);
    }
    finishGame();
    }
    private void checkUserGuess(String userGuess)
    {
    numOfGuesses++;
    String result = "miss";
    for (DotCom dotComToTest: dotComsList)
    {
    result = dotComToTest.checkYourself(userGuess);
    if(result.equals("hit"))
    {
    break;
    }
    if(result.equals("kill"))
    {
    dotComsList.remove(dotComToTest);
    break;
    }
    }
    System.out.println(result);
    }
    private void finishGame()
    {
    System.out.println("All Dot Coms are dead! Your stock is now worthless.");
    if(numOfGuesses <= 18)
    {
    System.out.println("It only took you" + numOfGuesses + " guesses.");
    System.out.println("You got out before your options sank.");
    }
    else
    {
    System.out.println("Took you long enough. " + numOfGuesses + "guesses.");
    System.out.println("Fish are dancing with your options");
    }
    }
    public static void main (String args [])
    {
    DotComBust game = new DotComBust();
    game.setUpGame();
    game.startPlaying();
    }
    }
    *************************************************************************

    import java.io.*;
    import java.util.*;
    public class GameHelper
    {
    private static final String alphabet = "abcdefg";
    private int gridLength = 7;
    private int gridSize = 49;
    private int [] grid = new int[gridSize];
    private int comCount = 0;
    public String getUserInput(String prompt)
    {
    String inputLine = null;
    System.out.print(prompt + " " );
    try
    {
    BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
    inputLine is.readLine();
    if(inputLine.length() ==0)
    return null;
    }
    catch(IOException e)
    {
    System.out.println("IOException: " + e);
    }
    return inputLine.toLowerCase();
    }
    public ArrayList<String>placeDotCom(int comSize)
    {
    ArrayList<String> alphaCells = new ArrayList<String>();
    String [] alphacoords = new String[comSize];
    String temp = null;
    int [] coords = new int [comSize];
    int attempts = 0;
    boolean success = false;
    int location = 0;
    comCount++;
    int incr = 1;
    if((comCount % 2 ) ==1)
    {
    incr = gridLength;
    }
    while (!success & attempts++ <200)
    {
    location = (int) (Math.random() * gridSize);
    int x = 0;
    success = true;
    while (success && x < comSize)
    {
    if (grid[location] ==0
    {
    coords[x++] = location;
    location += incr;
    if (location >= gridSize)
    {
    success = false;
    }
    if (x>0 && location % gridLength == 0)
    {
    success = false;
    }
    }
    else
    {
    success = false;
    }
    }
    }
    int x = 0;
    int row = 0;
    int column = 0;
    while (x < comSize)
    {
    grid[coords[x]] = 1;
    row = (int) (coords[x]/gridLength);
    column = coords[x] % gridLength;
    temp = String.valueOf(alphabet.charAt(column));
    alphaCells.add(temp.concat(Integer.toString(row)));
    x++;
    }
    return alphaCells;
    }
    }
    ***************************************************************************

    The above were written in notepad, so can be copied, saved as "xxx.java" and compiled, as per usual.
    Hoping you can help to get them compiler compliant, so I can play 'Sink a Dotcom' all by myself.
    Thanks.
    Yours
    Simon.
    Bert Bates
    author
    Sheriff

    Joined: Oct 14, 2002
    Posts: 8764
        
        5
    Hi Simon,

    One thing that I'm wondering is whether you're going through the book from the beginning? For instance, have you done all the exercises in the earlier chapters? By the time you get to chapter 5, things are pretty complex, so if you've skipped some of the earlier stuff that might be why you're struggling now.

    For instance, has your Java installation been used to successfully compile smaller programs? A really common approach to programming is to test things in small steps. So, for instance, after I've installed a new version of Java, I'll test it with a little 5 line program like this:

    public class Tester {
    public static void main(String[] args) {
    System.out.println("running on the new version of Java");
    }
    }

    When I read your posts it seems like maybe you're tackling two big issues at once:

    #1 - installing and configuring your Java environment
    #2 - testing a fairly substantial Java program

    It's really, really, really hard to debug problems when you're juggling so many variables at once.

    hth,

    Bert


    Spot false dilemmas now, ask me how!
    (If you're not on the edge, you're taking up too much room.)
    Campbell Ritchie
    Sheriff

    Joined: Oct 13, 2005
    Posts: 36508
        
      16
    Don't get your knickers in a twist.

    This is why I told you not to send the details in a private message; this is a public board where everybody learns from what is posted.
    What you posted does not throw the whole series of compiler errors you quoted.
    And what I downloaded from the O'Reilly website (HFJ) ten minutes ago compiles without problem, once you get the pacakage structure sorted out.

    We are trying our best to help.

    Bert Bates is right to try out a tiny program first, but it would have been better to writewhich actually contains a Java5-specific feature.

    You don't want your JDK environment in your classpath, you want it in your PATH. Did you do what I suggested at first ("javac -version")? What did it print out. If you have put JDK6 in the classpath and not in the path, then your problem is that you have installed Java incorrectly. That is the other thing Bert is hinting at. Make sure you have that correct, or nothing will work.

    Good luck with it.
    Campbell Ritchie
    Sheriff

    Joined: Oct 13, 2005
    Posts: 36508
        
      16
    BTW: If you get a in your posting you have set the PATH wrongly using : then P. It should read :\P. Try again with C:\Program Files\etc\etc when you set your PATH. And make sure the last bit of your PATH to set is "bin".
    [edit]That last bit means you write ....bin before the %PATH% bit[/edit]
    [ March 30, 2008: Message edited by: Campbell Ritchie ]
    hugo zheng
    Greenhorn

    Joined: Nov 01, 2011
    Posts: 2
    Simon Evans wrote:Dear Programmers,
    I have been reading 'Head First Java' anyway, after a certain point, to run the programs therin it was necessary to install jdk 6.0, which I did, but I still get compiler error returns, even upon using code lifted directly from the headfirstlabs.com site. The book recommends this site (JavaRanch) to discuss whatever problems are thus encountered. I encountered such problems on pages 150 - 3, with the programs DotCom, DotComBust and GameHelper. They all return compiler errors, so I can't play the version of 'Battleships' as outlined.
    It seems even though I am using the jdk 6.0 - the compiler won't recognise the 'enhanced loops' nor other stuff - like 'input streams' - just like the jdk 1.2 didn't. I could go into greater detail as to the error returns, but would like to know if there is a sub-site in Java Ranch that might deal with this conumdrum.
    Thank you for your assistance.
    Yours
    Simon Evans


    the placeDotCom method maybe has some bug.I am not sure for I just glanced round.Too much lines -_-!
    I reviced the placedotcom method and give you some code for test.If you have no problem in Guess method,these code for placeDotCom may help you run the program correctly.

    >
    Ben Ooms
    Ranch Hand

    Joined: May 16, 2011
    Posts: 40

    Hello Simons,

    The code of DotCom.java is fine, when I copy pasted it from this post in a TEXTFILE called DotCom.java. I knew that upfront, I suspected you where not using a plain text editor because of the error:


    I reproduced compiler errors when opening a textfile with wordpad and saving it as DotCom.java.

    So it looks like you are using wordpad or a simmilar textprocessor. Use notepad or even better use notepad++ (its free).

    regards,
    Ben




    nick mackenzie
    Greenhorn

    Joined: Feb 22, 2012
    Posts: 1
    Thanks everyone for the clues, especially "once you get the package structure sorted out".

    Straight from the zip file (see wickedlysmart.com) it does almost work but only if you change the package names & file structure.
    Change the first line in chap05/GameHelper.java from
    package chap05;
    to
    package helpers;

    Also within chap06/DotComBust.java remove (or comment out) the first line
    package chap06;

    Put both of those .java files in your root directory (wherever the rest of your .java files are).
    And this is the important bit, which hasn't been covered in the book yet (I'm sure it will be, but not yet)
    - put the GameHelper.java file within a "helpers" folder before you compile it. Because the line "import helpers.GameHelper;" within DotComBust.java expects it to be in a folder called "helpers".

    Like magic, all three files compile & the game runs


    Good book by the way. Looks like it's designed for teenagers but it really does keep me interested. Cheers, nick
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: Head First Java Programs
     
    Similar Threads
    don't use any IDE for SCJP
    Installation of the jdk 6.0
    2 different types of singleton
    Help!How to change the language of java compile information?
    i've passed the SCJP 6.0 with 81%