Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
bhargman authored and Bhargava Chinthirla committed Jan 31, 2019
0 parents commit e7cc59f
Show file tree
Hide file tree
Showing 13 changed files with 429 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
*.iml
.gradle
.idea
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
81 changes: 81 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# CSCI 380-04: Assignment 1 - Due by 11:59 PM, Feb 19th, 2019
* * *

This assignment is meant to introduce you to git, Android Studio, and Java fundamentals.
Complete each part of the assignment as separate git commits. Any assignment that's completed,
but uses only one giant commit will have 10% taken off. If you don't already have
Android Studio and git set up on your computer, follow the instructions here before continuing:
- https://developer.android.com/training/basics/firstapp/
- https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
# Part 0 - Reading
Read the following before attempting this assignment. Make sure to follow the naming convention below in
your assignments. You will be deducted 1% for each naming convention violation.
+ [https://leanpub.com/aprimeronjava/read](https://leanpub.com/aprimeronjava/read)
+ [https://google.github.io/styleguide/javaguide.html#s5-naming](https://google.github.io/styleguide/javaguide.html#s5-naming)

# Part 1 - Github Setup - 5%
+ Create a Github account
+ Once your Github account is created, make sure to authenticate with an SSH key (see [https://help.github.com/articles/connecting-to-github-with-ssh/](https://help.github.com/articles/connecting-to-github-with-ssh/)).
+ Create a new **private repo** called `assignment1` on your personal Github account (see [https://help.github.com/articles/creating-a-new-repository/](https://help.github.com/articles/creating-a-new-repository/)). Don't initialize with a readme, since you'll just be importing this
existing project to your new repo.
+ In terminal, cd into a directory where you'd like to keep your projects.
+ Clone this repo using the following command:
+ `git clone https://github.com/bhargman/assignment1.git`
+ Once your repo is cloned, `cd` into it using terminal, and use the following commands to set the remote to your new repo and push your project:
+ `git remote set-url origin [email protected]:[yourGithubUserName]/assignment1.git`
+ `git push -u origin master`
+ Add me as a collaborator (username : `bhargman`) to your private repo (see [https://help.github.com/articles/inviting-collaborators-to-a-personal-repository/](https://help.github.com/articles/inviting-collaborators-to-a-personal-repository/)).
+ **If you don't do this step, I'll have no way of grading your assignment**

# Part 2 - Android Studio - 5%
+ Import your `assignment1` repo into Android Studio
+ In the main Android Studio window, tap on "Open an existing Android Studio project"
+ Browse to your `assignment` folder and select to open it
+ Android Studio will now load the project and you should be able to do the rest of this assignment

# Part 3 - Primitives - 10%
Update `Primitives.java` to include the following:
+ `private` fields for every type of primitive.
+ Constructor with parameters to initialize every primitive field.
+ Update the `print()` method in `Primitives.java` that will print each primitive value on a new line, with the format `"variableName : value"`
+ Add a main method to `Primitives.java` that creates an instance of `Primitives` with name `primitives`, and calls `primitives.print()`.

# Part 4 - Arrays - 30 %
+ Update the constructor in `Arrays.java` to initialize the `squares` array with the first 10 *even* squares (exclude 0).
+ Update the `printSquaresBackward()` method in `Arrays.java` to print each value of the `squares` array in backwards order.
+ Add a main method to `Arrays.java` that creates an instance of `Arrays` with name `arrays`, and calls `primitives.printSquares()`.

# Part 5 - Classes - 50%
+ Create a new `package` in `com.csci38004.assignment` called `shapes`.
+ All work for this part should be done in the `shapes` package.
+ Create a new `interface` called `Shape`.
+ Add `double area()` and ` double perimter()` methods to the `Shape` interface.
+ Create two classes called `Circle` and `Rectangle` which implement `Shape`.
+ Add reasonable fields to the `Circle` and `Rectangle` classes which will allow you to calculate the area and perimeter of each shape.
+ Add constructors to `Circle` and `Rectangle` so you can initialize your fields.
+ Implement the `area()` and `perimeter()` methods for `Circle` and `Rectangle`.
+ Create an interface called `Shape3D`.
+ Add `double volume()` method to `Shape3D`.
+ Create a class called `Cyclinder` which extends `Circle` and implements `Shape3D`.
+ Add and initialize any required fields that you may need to calculate a cylinder's volume.
+ Keep in mind that the `Cylinder` class will have access to its parent (`Circle`) class' methods. Use this to your advantage to implement the `volume()` method.
+ Create a class named `ShapeRunner` with the following main method:
```
public static void main(String[] args) {
Shape circle = new Circle(2.0);
Shape rectangle = new Rectangle(4.0, 2.0);
Shape3D cylinder = new Cylinder(4.0, 1.0);
System.out.println("Circle:");
System.out.println("Area: " + circle.area() + ". Perimeter: " + circle.perimeter());
System.out.println("\nRectangle:");
System.out.println("Area: " + rectangle.area() + ". Perimeter: " + rectangle.perimeter());
System.out.println("\nCylinder:");
System.out.println("Volume: " + cylinder.volume());
}
```
+ Notice how the shapes are declared with their interfaces instead of their concrete types. This allows for more flexibility when
trying to extend an application, but also makes sure that you are able to only access methods on the interface's contract. Feel free
to play around with different values to test your implementations, but when submitting your final assignment, make sure to leave this
`main()` method as written here.
27 changes: 27 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google()
jcenter()

}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()

}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
15 changes: 15 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true


Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
6 changes: 6 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#Mon Jan 21 14:53:23 EST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
172 changes: 172 additions & 0 deletions gradlew
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
#!/usr/bin/env sh

##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn () {
echo "$*"
}

die () {
echo
echo "$*"
echo
exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`

# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option

if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi

# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"

# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi

exec "$JAVACMD" "$@"
Loading

0 comments on commit e7cc59f

Please sign in to comment.