-
Notifications
You must be signed in to change notification settings - Fork 0
/
Q1 1.java
129 lines (107 loc) · 3.69 KB
/
Q1 1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package a1Q1;
/*
* Alistair Godwin
* SID: 020079158
* UID: agodwin
* Assignment 2: Question 2(Part 1 -> 5.25)
* JAC444
*
*
* New: Added new methods for getting the MAXROW constant via a user. for 5.25 quest.
*
* This program will generate a star using a given MaxRow size by utilizing multiple nested for loops and method calls.
*/
import java.util.Scanner;
public class Q1{
//==Allows use in functions==//
static int _stars;
static int _halfdigit;
//==========================//
public static void main(String [] args) {
System.out.println("Assignment 2: Q1\n");
//==============Set as Required=============//
final int MAXROW = getMaxRows(); //Both the max rows and max characters PER row. Min should be 3, otherwise no diamond.
final int HALFROW = (int) Math.round( MAXROW / 2.0 ); //The halfway point of the max rows. Rounded
//=========================================//
_stars = 1; //Default The least amount of stars possible. Changes to per row character limits.
_halfdigit = HALFROW - 1; //The starting star digit is half the total rows - 1.
//=====================Display Pyramid===============//
//Print up to HALFROW rows.
for(int i = 0; i < HALFROW; i++) {
//Print up to MAXROW chars per Row.
for(int j = 0; j < MAXROW; j++) {
if(j == _halfdigit) {
j+=PrintStars();//Continue iterating after placing the stars
}else {
space(); //Fill up remaining spaces pre and post.
}
}
endLn();
_halfdigit--;//The amount of spaces decreases by 1 per row(the stars start sooner)
_stars += 2; //Max stars increases by 2 per row
}
//=====================================================//
_stars -= 4; //Reversal, skip the max star line repeating in this case.
_halfdigit = 1; //Since we are not keeping two lines in the centre, move the half digit by one.
//===================Reverse Pyramid==================//
//Print up to HALFROW rows in reverse order.
for(int i = HALFROW - 1; i > 0; i--) {
//Print up to MAXROW chars per Row.
for(int j = 0; j < MAXROW; j++) {
if(j == _halfdigit) {
j+=PrintStars();
}else {
space(); //Fill up remaining spaces pre and post
}
}
endLn();
_halfdigit++; //The amount of spaces increases by 1 per row(the stars start later)
_stars -=2; //Max stars decreases by 2 per row
}
//=================================================//
System.out.println("\nGoodbye!"); //Bye Bye
}
//Fetch the MaxRows of the diamond from the user. Make calls to ensure safe input.
public static int getMaxRows() {
Scanner inp = new Scanner(System.in);
int a = 0;
do {
System.out.println("Please Enter an Odd Numbered Int from 1 - 19");
if (inp.hasNextInt()){
a = inp.nextInt(); //Get int
}else {
inp.next(); //Clean buffer if not int
}
}while(Inspect(a) == false); // Ensure valid input
inp.close();
return a; //Return MAXROWS
}
//Check the Range of 1 - 19 inclusive and check if odd.
public static boolean Inspect(int a) {
boolean range = (a > 0 && a < 20) ? true : false;
return (range == true && IsOdd(a) == true);
}
//Check if odd and return it.
private static boolean IsOdd(int a) {
return (a % 2 != 0);
}
//Print 'stars' worth of asterisks by calling Star();
public static int PrintStars() {
for(int k = 0; k < _stars; k++) {
star();
}
return _stars;
}
//Print Space
public static void space() {
System.out.printf(" ");
}
//Print *
public static void star(){
System.out.printf("*");
}
//Print \n
public static void endLn() {
System.out.print("\n");
}
}