CS 113 - Computer Science 1

Lab 2

More Unix and and or or

In this lab you will:
  1. Learn a few more Unix commands
  2. Write some Java programs using if statements

Unix

Log in and open a terminal as in lab 1. This process is also described here.

Recall that in the last lab you used the following Unix commands

CommandDescription
cd When use with no arguments, return to the home directory
cd xxxxSwitch from the current directory to a subdirectory named xxxx.
cd xxx/yyyswitch from the current directory to the subdirectory yyy which is contained in the the directory xxx. xxx must be a subdirectory of the current directory
lsLIst the contents of the current directory
pwdShow the full path of the current directory
javac Xxx.javaCompile the java program Xxx.java (Xxx.java must be in the current directory
javac XxxRun the java program Xxx. The file Xxx.class must be in the current directory. Do not include ".class" -- that is "java Xxx.class" will not work.
Using the commands above, go into your CS113 directory and create a new directory for the lab; the instruction below assume you named this directory Lab02.

Copy

Use the Unix copy command to copy the HelloWorld program from your Lab01 folder to your Lab02 folder. The command is (I use "UNIX$" as the command prompt -- yours will differ" )
    UNIX$ cp Lab01/HelloWorld.java Lab02/HelloWord2.java
The command says to copy the file HelloWord.java which is in the Lab01 folder into the Lab02 folder with the name HelloWorld2.java.

Now change your directory to Lab02 and compile the file. If everything went correctly, you should have gotten the following error message

    HelloWorld2.java:1: error: class HelloWorld is public, should be declared in a file named HelloWorld.java
            public class HelloWorld {
                   ^
    1 error
The problem, as the error message indicates is that the file name and class name do not match. So make them match using the copy command -- as follows
    cp HelloWorld2.java HelloWorld.java
Here, we are copying a directory so we do not need a directory name as above.

Now compile HelloWorld.java. It should be fine.

Unix rm and mv

The copy in the last section is kind of ugly as it leaves behind the useless HelloWorld2.java. Two options: delete the file or do not copy in the first place, move it. To remove (delete) the File
rm HelloWorld.java
Here rm is short for remove. Be careful with remove, it is permanent. (You may be able to recover a file you removed, but it involves talking to the sysadmin and this only works on files that have been on the system for a while (days).)

Usually the better option than copy followed by remove is to simply rename the file. For instance

    mv HelloWord2.java HelloWorld.java
mv is short for "move". This command is much bigger than simple renaming, whihc you might guess from the name "move". cp, rm and mv can all be destructive. rm is obvious. cp and mv do not warn you that you are copying a file onto another file of the same name. If you do that, the original version of the file is lost.

scp

The final Unix command for today

"scp" acts much like "cp" EXCEPT it can copy files from your labtop to Unix, or the converse.

To use scp open a terminal window on your laptop. Use cd to navigate to a directory with the file you want to upload to Unix. Then scp it to a directoy on the Unix system. For instance, suppose on Unix you have a directory named Lab02 in a CS113 directory which is in your home directory. On your laptop you have the same directory structure. Further suppose that on your laptop you have a file named Readme that you want to get to Unix. Given this setup, so the following:

    // open a terminal on your laptop
    $ cd
    $ cd CS113/Lab02 //
    $ ls
    // A listing of files one of the files is Readme
    $ scp Readme UNIX_NAME@goldengate.cs.brynmawr.edu:CS113/Labo2/Readme 

Replace "UNIX_NAME" with your Unix login. The scp command will ask you for your unix password. Enter it. If all goes well, you will see something like:
    Readme                                                  100%  162     5.6KB/s   00:00
which shows that 100% of the file Readme was copied in 00:00 minutes.

Java

Leap Year

Using VS code, open the Lab02 directory. It should have the HelloWord.java file from above, but not much more. Then, create a new file in VS Code named LeapYear.java copy/paste this code into it:
public class LeapYear {
   public static void main(String[] args) {
       int year = Integer.parseInt(args[0]);
   }
}
Then, modify the program so that it displays “true” or “false” depending on whether the input year is a leap year. A year is a leap year if it is divisible by 4 (e.g. 2020), unless it is divisible by 100 in which case it is not (e.g. 1900, 2100), unless it is divisible by 400 (e.g. 2000), in which case it is!

Therefore a year is a leap year if: (it is divisible by 400) OR (it is divisible by 4 AND NOT divisible by 100)

Keep in mind that you can use the modulo operator "%" when determining whether one number is divisible by another.

Your program should produce the correct output for each of the following cases:
java LeapYear 2020
true
 
java LeapYear 2021
false
 
java LeapYear 1600
true
 
java LeapYear 1900
false

Valid Triangle

Next, create a new file in VS Code named ValidTriangle.java and copy/paste this code into it:
public class ValidTriangle {
   public static void main(String[] args) {
       int s1 = Integer.parseInt(args[0]);
       int s2 = Integer.parseInt(args[1]);
       int s3 = Integer.parseInt(args[2]);
   }  
}

Modify the program so that it displays “true” or “false” depending on whether the three numbers represent valid lengths of the sides of a triangle.

For three numbers to represent the valid lengths of the sides of a triangle, each number must be less than the sum of the other two.

Here are some cases

java ValidTriangle 7 10 8
true
 
java ValidTriangle 40 12 15
false
Finally, modify your ValidTriangle program so that it also displays “false” if any of the three values are 0 or negative.

What to hand in

Use your phone to take a picture of the VSC screen with your java programs. Send the picture to gtowell@brynmawr.edu