Recall that in the last lab you used the following Unix commands
Command | Description |
---|---|
cd | When use with no arguments, return to the home directory |
cd xxxx | Switch from the current directory to a subdirectory named xxxx. |
cd xxx/yyy | switch 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 |
ls | LIst the contents of the current directory |
pwd | Show the full path of the current directory |
javac Xxx.java | Compile the java program Xxx.java (Xxx.java must be in the current directory |
javac Xxx | Run 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. |
UNIX$ cp Lab01/HelloWorld.java Lab02/HelloWord2.javaThe 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 errorThe 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.javaHere, we are copying a directory so we do not need a directory name as above. Now compile HelloWorld.java. It should be fine.
rm HelloWorld.javaHere 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.javamv 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" 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/ReadmeReplace "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:00which shows that 100% of the file Readme was copied in 00:00 minutes.
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
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 falseFinally, modify your ValidTriangle program so that it also displays “false” if any of the three values are 0 or negative.