I am new to java, I want to print a reversed star pattern based on the coordinate. After I set the coordinate, it will then print the star pattern
import java.util.Scanner;
public class coorTest {
public static void main(String[] args) {
int max = 5;
for (int y = 0; y < max; y += 2) {
int left_spacing = (int) Math.floor(y * 1.0 / 2.0);
for (int space = 0; space < left_spacing; space++) {
System.out.print(" ");
}
for (int x = 0; x < (max - y); x++) {
System.out.print("x");
}
System.out.println();
}
}
}
Try this. I am using (0,0) as a first coordinate.
public static void printStar(int x, int y) {
int starCount = 5;
int space = 0;
int count = 0;
// y-axis line move
for(int i=0; i<y; i++) {
System.out.println();
}
for (int i = 0; i < starCount; i++) {
// x-axis space move
for(int xAxis=0; xAxis<x; xAxis++) {
System.out.print(" ");
}
for (int j = 0; j < starCount; j++) {
if (count < space) {
System.out.print(" ");
count++;
continue;
} else if (j >= starCount - count) {
System.out.print(" ");
} else {
System.out.print("*");
}
}
System.out.println();
space++;
count = 0;
}
}
My code is resulting in an infinite loop when i run it. Don't know whats wrong.
!(https://d2vlcm61l7u1fs.cloudfront.net/media%2F1aa%2F1aa1af9f-41ff-48d8-89e9-7b093a909045%2Fphpbrt5Fy.png)
I have tried the code below. It compiles properly.
public class Project3_1 {
//declare SEGMENTS and HEIGHT
public static final int SEGMENTS = 4;
public static final int HEIGHT = 4;
public static final int TOTAL = (2*(SEGMENTS)) + (2*(HEIGHT)) - 3;
public static void TopTree(int SEGMENTS, int HEIGHT) {
for (int s = 1; s <= SEGMENTS; s++) {
for (int h = 1; h <= HEIGHT; h++) {
int ASTERISKS = ((2*s) + (2*h) - 3);
int SPACES = ((TOTAL - ASTERISKS)/2);
//spaces
for (int b = 1; b <= SPACES; b++) {
System.out.print(" ");
}
//Asterisks
for (int a = 1; a <= ASTERISKS; a++) {
System.out.print("*");
}
System.out.println();
}
}
}
public static void TreeBase() {
int x = (TOTAL - 7)/2;
for (int i = 1; i <= (TOTAL-1)/2; i++){
System.out.print(" ");
}
System.out.println("*");
for (int i = 1; i <= (TOTAL-1)/2; i++){
System.out.print(" ");
}
System.out.println("*");
for (int i = 1; i <= x; x++){
System.out.print(" ");
}
for (int i = 1; i <= 7; i++) {
System.out.print("*");
}
for (int i = 1; i <= (TOTAL - (x + 7)); i++) {
System.out.print(" ");
}
System.out.println("");
}
public static void main (String[] args){
TopTree(SEGMENTS, HEIGHT);
TreeBase();
}
}
Check your third for loop in TreeBase(), you increment the wrong variable. The code you posted runs fine for me, it just doesn't make that bottom line of asterisks due to that loop I mentioned not being correct. Once you fix that, you should be good
I am trying to make a array that generates random numbers and saves how many times each number was rolled. Then I am trying to create a histogram of the results but the consoles goes blank. I couldn't think of way to cleverly use a loop so I had to use a very crude solution.
import java.util.Random;
import java.util.Arrays;
public class DiceRolls {
public static void main(String[] args){
int[] diceRolls = new int [9];
Random rand = new Random();
for(int numberOfRolls = 0; numberOfRolls <= 20; numberOfRolls++){
int individualRolls = rand.nextInt(9);
diceRolls[individualRolls] ++;
}
for(int y = 0; y >= diceRolls[0]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[1]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[2]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[3]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[4]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[5]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[6]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[7]; y++){
System.out.print("*");
}
System.out.println(" ");
for(int y = 0; y >= diceRolls[8]; y++){
System.out.print("*");
}
}
}
public static void main(String[] args){
int[] diceRolls = new int [9];
Random rand = new Random();
for(int numberOfRolls = 0; numberOfRolls <= 20; numberOfRolls++){
int individualRolls = rand.nextInt(9);
diceRolls[individualRolls] ++;
}
for(int j : diceRolls) {
for(int i = 0; i<j; i++) {
System.out.print("*");
}
System.out.println();
}
}
Any Questions?
You inverted you loop conditions. They should be:
y < diceRolls[?]
i need help.
i try to make a pyramids that use two alphabet like this:
O
OO
OXO
OXXO
OXXXO
OXXXXO
OOOOOOO
well, because i still new with java
i'm stuck here
O
OX
OXX
OXXX
OXXXX
OXXXXX
OXXXXXX
Here is my code:
import java.util.Scanner;
class Xx {
public static void main(String[] args) {
int x;
Scanner Sc = new Scanner(System.in);
System.out.print("Line of Pyramid : ");
x = Sc.nextInt();
for (int y = 0; y <= x; y++) {
System.out.print("O");
for (int z = 1; z <= y; z++) {
System.out.print("X");
}
System.out.println();
}
}
}
I would start with a method to repeat a given character n times, something like
static String repeat(char ch, int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(ch);
}
return sb.toString();
}
then you can call it to build your pyramid. Something like
int x = Sc.nextInt();
System.out.println("O");
System.out.println("OO");
for (int y = 1; y <= x; y++) {
System.out.print("O");
char ch = 'X';
if (y == x) {
ch = 'O';
}
System.out.print(repeat(ch, y));
System.out.println("O");
}
Which (when I run it with 5) generates (the requested),
O
OO
OXO
OXXO
OXXXO
OXXXXO
OOOOOOO
int x;
Scanner Sc = new Scanner(System.in);
System.out.print("X : ");
x = Sc.nextInt();
for (int y = 0; y <= x; y++)
{
System.out.print("O");
for (int z = 1; z <= y; z++)
{
System.out.print("X");
if(z == y)
System.out.print("O");
}
System.out.println();
}
for(int i=0; i<= x+2; i++)
{
System.out.print("O");
}
Output:
X : 5
O
OXO
OXXO
OXXXO
OXXXXO
OXXXXXO
OOOOOOOO
import java.util.Scanner;
class Xx {
public static void main(String[] args) {
int x;
Scanner Sc = new Scanner(System.in);
System.out.print("X : ");
x = Sc.nextInt();
for (int y = 0; y <= x; y++) {
System.out.print("O");
for (int z = 1; z <= y; z++) {
if(z==y||y==x)
System.out.print("O");
else
System.out.print("X");
}
System.out.println();
}
}
}
Explanation
you can identify the coloumn edge using z==y condition, and base coloumn should fill with 'O' , for check that y==x condition added in your code , will give your expected output
How do I make this:
*******
-*****-
--***--
---*---
--***--
-*****-
*******
The following is my code that I have written to try to accomplish the above, but it is not working as expected:
public static void stars(/*int jmlBaris*/) {
for ( int i = 7; i >= 1; i-=2) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
for (int i = 1; i <= 7; i+=2) {
for (int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println("");
}
}
public static void main(String[] args) {
stars();
}
}
This is how I might write it.
// three loops
public static void stars(int size) {
for (int y = 0; y < size; y++) {
for (int i = 0; i < y && i < size - y - 1; i++)
System.out.print(' ');
for (int i = Math.min(y, size - y - 1); i < Math.max(y + 1, size - y); i++)
System.out.print('*');
System.out.println();
}
}
or
// two loops
public static void stars(int size) {
for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++)
System.out.print(
(x >= y && x < size - y) ||
(x >= size - y - 1 && x <= y) ? '*' : ' ');
System.out.println();
}
}
or
// one loop
public static void stars(int size) {
for (int i = 0; i < size * size; i++) {
int y = i / size, x = i % size;
System.out.print(
(x >= y && x < size - y) ||
(x >= size - y - 1 && x <= y) ? '*' : ' ');
if (x == size - 1)
System.out.println();
}
}
Note: Whether this uses one, two or three loops, the time complexity is O(N^2). A simple way to determine this is the number of stars produced is O(N^2) no matter how it is done.
I would do something like this with substrings.
String a = "*******"; //7 stars
String blank = " "; //7 spaces
int j = 7;
for (int i = 0; i < 7; i++) {
if (i > j){
System.out.print(blank.substring(0,i));
System.out.println(a.substring(i,j));
}
else{
System.out.print(blank.substring(0,j));
System.out.println(a.substring(j,i));
}
j--;
}
System.out.println(a);
**Previous edit wouldn't have worked. Changes made.
This works.
Try something like this code I compiled on IDEOne (it seems to work, though):
http://ideone.com/9xZ1YB
class Main
{
public static void main(String[] args)
{
stars();
}
static void stars()
{
final int MAX_WIDTH = 7;
for (int i = 0; i < 7; ++i)
{
int width;
if (i < 3) width = MAX_WIDTH - i * 2;
else if (i > 3) width = (i - 3) * 2 + 1;
else width = 1;
// Before spaces
for (int j = 0; j < (MAX_WIDTH - width) / 2; ++j)
{
System.out.print(" ");
}
// Stars
for (int j = 0; j < width; ++j)
{
System.out.print("*");
}
// After spaces
for (int j = 0; j < (MAX_WIDTH - width) / 2; ++j)
{
System.out.print(" ");
}
System.out.println();
}
}
}
For a beginner in algorithms I would recommend you to break down the structure in sub-parts and then try to solve the pattern.
For this specific pattern it could be broken down into several triangles. Each triangle is then solved by different for loops as shown in the image below.
public static void printPattern(int num) {
// this loop generates first 4 lines
for (int i = 0; i < num / 2 + 1; i++) {
// draws the red triangle of '-'
for (int j = 0; j < i; j++) {
System.out.print("-");
}
// draws the green triangle of '*'
for (int j = i; j < num / 2 + 1; j++) {
System.out.print("*");
}
// draws the blue triangle of '*'
for (int j = i + 1; j < num / 2 + 1; j++) {
System.out.print("*");
}
// draws the orange triangle of '-'
for (int j = 0; j < i; j++) {
System.out.print("-");
}
System.out.println();
}
/* this loop generates last 3 lines */
for (int i = 0; i < num / 2; i++) {
// draws the green triangle of '-'
for (int j = i + 1; j < num / 2; j++) {
System.out.print("-");
}
// draws the red triangle of '*'
for (int j = 0; j < i + 2; j++) {
System.out.print("*");
}
// draws the orange triangle of '*'
for (int j = 0; j < i + 1; j++) {
System.out.print("*");
}
// draws the blue triangle of '-'
for (int j = i + 1; j < num / 2; j++) {
System.out.print("-");
}
System.out.println();
}
}
Using similar technique you could generate any pattern.
If I understood you right, your problem is to print indent in lines 2-7.
Imagine same problem with asterisk symbol replaced by 'x' and whitespace replaced by '-'. Then you need to draw
xxxxxxx
-xxxxx-
--xxx--
---x---
--xxx--
-xxxxx-
xxxxxxx
That means you should output 0, 1, 2 space(s) before asterisks in first, second, thrid strings respectively. I let details for you to figure them out.
public static void stars(/*int jmlBaris*/){
String starstr = "*";
String blank = "_";
int spaceBlank;;
for(int i=7; i>=1;i-=2){
spaceBlank = (7-i)*.5;
String starrep = StringUtils.repeat(starstr, i);
String blankrep = StrinUtils.repeat(blank, spacesBlank);
system.out.println(blankrep + starrep + blankrep);
}
for(int j=3 j<=7; j+=2){
spaceBlank = (7-j)*.5;
starrep = StringUtils.repeat(starstr, j);
String blankrep = StrinUtils.repeat(blank, spacesBlank);
system.out.println(blankrep + starrep + blankrep);
}
}
public static void main(String[] args){
stars();
}
You have little missing to put space on your code. I don't care about right space, who can see that? But left space is very important!!
Try this:
public static void stars(/*int jmlBaris*/) {
for ( int i = 7; i >= 1; i-=2) {
for (int k = 0; k < ((7-i) / 2); k++){ /* Missing Here */
System.out.print(" "); /* Missing Here */
} /* Missing Here */
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
for (int i = 1; i <= 7; i+=2) {
for (int k = 0; k < ((7-i) / 2); k++){ /* Missing Here */
System.out.print(" "); /* Missing Here */
} /* Missing Here */
for (int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println("");
}
}
int N = 7;
for (int y=0; y<N; y++)
{
for (int x=0; x<N; x++)
System.out.print( (y-x)*(N-y-x-1)<=0 ? '*' : '-');
System.out.println();
}
or, more symmetrically,
int n = 3;
for (int y=-n; y<=n; y++)
{
for (int x=-n; x<=n; x++)
System.out.print( y*y>=x*x ? '*' : '-');
System.out.println();
}