How to rotate this array in a counterclockwise in java? - java

Here's a problem. Please help me!
Enter a star bundle. (star='*')
Suppose you input a bunch of stars one by one.
Output by rotating it 90 degrees counterclockwise.
In the first line, separate the star bundles by spaces. Array that stores star bundles has to be initialized with a space character(' ').
From the second line, print a rotating star.
import java.util.Scanner;
public class Spin {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
int[][] A = new int[n][n];
int K = 1;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
A[i][j] = K++;
}
}
public static int[][] leftRotate(int n, int[][] A) {
int[][] B = new int[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
B[i][j] = A[j][n-i-1];
}
}
}
}
}

Take the input as a string using s = sc.nextLine(). E.g. if user enters *** * **, you get the same as s = "*** * **".
Split the line on spaces so you get String[] arr = {"***", "*", "**"}.
Find the longest string, e.g. in this case you get longest = 3.
The size of the array is the width of the resulting 3D grid, and the longest string is the height of the grid, so create the grid: char[][] grid = new char[longest][arr.length];
Fill the grid with spaces.
Now iterate arr and build up each column of the grid, starting at the bottom.
... arr[0] *.. arr[1] *.. arr[2] *..
... -------> *.. -------> *.. -------> *.*
... *.. **. ***
Print the grid.
static void rotate(String input) {
String[] words = input.split(" ");
int rows = Arrays.stream(words).mapToInt(String::length).max().orElse(0);
char[][] grid = new char[rows][words.length];
Arrays.stream(grid).forEach(row -> Arrays.fill(row, ' '));
for (int i = 0; i < words.length; i++)
for (int j = 0; j < words[i].length(); j++)
grid[rows - j - 1][i] = words[i].charAt(j);
Arrays.stream(grid).forEach(System.out::println);
}
Tests
rotate("*** * **");
rotate("** **** *");
rotate("The quick brown fox jumps over the lazy dog");
Outputs
*
* *
***
*
*
**
***
kn s
cw pr y
eioxmeezg
hurouvhao
Tqbfjotld

Related

Parsing multiple ints from Joptionpane

Im trying to practice some java and I am confused. I am trying to enter in multiple numbers into a 3*3 array, however when I run my program I get a compliation error (Exception in thread "main"java.lang.NumberFormatException)? How can parse multiple ints from a Joptionpane into the arrays?
public static int[][] enterMatrix() {
String NumberstoParse = JOptionPane.showInputDialog("Enter list: ");
int UserInput = Integer.parseInt(NumberstoParse);
int[][] matrix = new int[3][3];
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
matrix[i][j] = UserInput;
return matrix;
}
}
I think the main issue is when parsing the String from the JOptionPane. Integer.parseInt() sees the commas and throws NumberFormatException. Might be worthwhile to do some testing of this method, possibly with JShell!
Here, I have taken the input String "1, 2, 3, 4, 5, 6, 7, 8, 9" and used method split from class String to make an array of String that is split by (",\s+"). This means, split around the matching regular expression, which here is "a comma and one or more white space characters". Each individual String from the array is then processed with Integer.parseInt().
public static int[][] enterMatrix() {
String numberstoParse = JOptionPane.showInputDialog("Enter list: ");
String[] splitNumbers = numberstoParse.split(",\\s+");
int[][] matrix = new int[3][3];
int ctr = 0;
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = Integer.parseInt(splitNumbers[ctr]);
ctr++;
}
return matrix;
}
Adding to what Alex already added below is the code which will take care of some border line issues there are some test cases include few test cases. The code is documented, I hope this helps...
public class Dummy
{
public static void main(String[] args)
{
String temp = "";
for(int x = 0; x <10; x++){
temp = temp + x+"";
int[][] matrix = enterData(temp);
System.out.println("Given Input:" + temp);
if(matrix != null){
for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
}
}
System.out.println("-------------");
temp +=",";
}
}
//Once you understand the test cases, you can remove the argument and use the JOptionPane for input
public static int[][] enterData(String input)
{
//TODO: Please user JOPtionPane I have added this just to make the test cases work
//String input = JOptionPane.showInputDialog("Enter list: ");
//This will split the Input on the basis of ","
String[] inputArr = input.split(",");
//Variable has a counter which which will represent the number of inputs received
int inputArrCount = 0;
int[][] matrix = new int[3][3];
//If the size is greater than 9, then as u suggested an error is printed
if(inputArr.length > 9 ){
System.err.println("Number length > 9");
return null;
}
for(int i = 0; i <matrix.length; i++){
for (int j = 0; j < matrix[i].length; j++){
//If to just track that inputArrCount never goes beyond the inputArr elements
if(inputArrCount < inputArr.length){
int temp = Integer.parseInt(inputArr[inputArrCount++]);
matrix[i][j] = temp;
}
}
}
return matrix;
}
}

Creating a vertical histogram

Basically I've been trying to make my histogram display the asterisks vertically aligned above the letter that it is incrementing above. I've been trying to figure out the most efficient way to get the asterisks to align above the letter repeating. Any suggestions?
**My current output displays this horizontally**
asfklafjasjfk
A (3) ***
F (3) ***
J (2) **
K (2) **
L (1) *
S (2) **
ABCDEFGHIJKLMNOPQRSTUVWXYZ
I want it to display this
abcaaaabbzzzzz
*
* *
** *
** *
*** *
ABCDEFGHIJKLMNOPQRSTUVWXYZ
I have listed my code below
public class histogram {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String lettersInput = input.nextLine();
lettersInput=lettersInput.toUpperCase();
String map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int[] count = new int[map.length()];
for(int x = 0; x < lettersInput.length();x++){
int letter = map.indexOf(lettersInput.charAt(x));
if(letter < 0){
continue;
}
count[letter]++;
}
for(int x = 0; x < count.length; x++){
if(count[x]< 1)
continue;
System.out.println(String.format("%s (%d) %s",
map.charAt(x),
count[x],
new String(new char[count[x]]).replace('\0','*')));
}
System.out.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
}
The approach I took was to use a sorted map, whose keys are letters of the alphabet and whose values are the number of occurrences of each letter. Simply iterate over the input string to populate the map. Then, iterate over each row of possible output and print out either a space or an asterisk for each letter. I used Collections.max() on the map's values to find the height of the histogram.
TreeMap<Character, Integer> map = new TreeMap<>();
String input = "abcaaaabbzzzzz".toUpperCase();
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i=0; i < input.length(); ++i) {
Integer val = map.get(input.charAt(i));
map.put(input.charAt(i), val == null ? 1 : val + 1);
}
Collection<Integer> c = map.values();
int maxFrequency = Collections.max(c);
System.out.println("Input:\n" + input);
for (int i=maxFrequency; i > 0; --i) {
for (int j=0; j < alphabet.length(); ++j) {
Integer count = map.get(alphabet.charAt(j));
System.out.print((count != null && count >= i) ? "*" : " ");
}
System.out.println();
}
System.out.println(alphabet);
Output:
Input:
ABCAAAABBZZZZZ
* *
* *
** *
** *
*** *
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Demo here:
Rextester

Printing rhomboid using scanner in eclipse

Enter edge length of your rhomboid: 5
Here is your rhomboid:
*****
*****
*****
*****
*****
I need to print that rhomboid with scanner. I get like: * * * * * *
My code was like that normally I'm not that bad but i couldn't even do the first line:
import java.util.Scanner;
public class rhomboid {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter edge lenght of your rhomboid: ");
int edgelenght = scan.nextInt();
System.out.println("Here is your rhomboid:");
while(edgelenght > 0){
System.out.print(" ");
System.out.print("*");
edgelenght--;
So your code will just print 1D output..
Output:- *****
So, to solve this you need two loops one for row and column.Now a little modification in 2D printing for rhombus is, first now there must be gap of 4 spaces before printing,it can be achieved by using one more variable k as shown below.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter edge lenght of your rhomboid: ");
int edgelenght = scan.nextInt();
int k = edgelenght - 1;
for (int i = 0; i < edgelenght; i++) {
for (int j = 0; j < k + edgelenght; j++) {
if (j < k) {
System.out.print(" ");
} else {
System.out.print("*");
}
}
k--;
System.out.println();
}
}
What you get is what you wrote in your code.
while(edgelenght > 0){
System.out.print(" ");
System.out.print("*");
edgelenght--;
}
will print edgelenght times a space " " and after that a "*".
What you want is something like this:
for(int line = 0; line < edgeLength; line++){
// in line 0 print 4 spaces (5-1), in line 3 print 1 (5-1-3), in line 4 (the last one) print 0
for(int space = 0; space < edgeLength - line - 1; space++){
System.out.print(" ");
}
for(int asterix = 0; asterix < edgeLength; asterix++){
System.out.print("*");
}
// print a newline
System.out.println("");
}
You need to first loop over the lines.
For every line you need a loop to print spaces. And one to print *.

Put a 2-d array in another 2-d array java

I am having trouble figuring out how to put one 2-D array into another one.
public class MazeAnalyze{
public static void main(String[]args){
Scanner kbd = new Scanner(System.in);
String str = "";
System.out.println("Enter dimensions");
int n = kbd.nextInt();
char [][] mazeValue = new char[n][n];
char[][] newMaze = new char[n+2][n+2];
String [] input= new String [n];
int [][] totalOpen = new int [n][n];
char X= 88;
System.out.println("Enter the maze");
for(int i =0; i <input.length; i++){
input[i] = kbd.next().toUpperCase();
}
for(int x=0; x< input.length;x++){
mazeValue[x]= input[x].toCharArray();
}
System.out.println("The maze array contains:");
for(int i=0; i<mazeValue.length; i++){
for(int j=0; j<mazeValue[i].length;j++){
System.out.print(mazeValue[i][j]);
}//end of second loop
System.out.println();
}//end of first loop
System.out.println("The maze with the Xs are");
for(int i=0; i<newMaze.length; i++){
for(int j=0; j<newMaze[i].length;j++){
newMaze[i][j]= 'X';
}//end of second loop
}//end of first loop
for(int i=0; i<newMaze.length; i++){
for(int j=0; j<newMaze[i].length;j++){
System.out.print(newMaze[i][j]);
}
System.out.println();
}
for(int x=0; x<n-2; x++){
for(int i=0; i<mazeValue.length; i++){
for(int j=0; j<mazeValue[i].length;j++){
newMaze[i+1][j+1]= mazeValue[i][j];
}
}
}//end of main for loop
This is my output:
Enter dimensions
3
Enter the maze
xox
xoo
ooo
The maze array contains:
XOX
XOO
OOO
The maze with the Xs are
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
The maze with the border is
XOX
XOO
OOO
What I want is:
My maze array surrounded by X's like a border. Any suggestions?
Simplest way in your case seems to be using string concat and add "X" and the beginning and end of each line, and in addition add 2 lines to input - one at the start and one at the end, all containing only "XXX...X".
Note: It might be easier to use an ArrayList<String> or LinkedList<String> for input rather than String[] - adding elements at the start and end would be easier.

Printing *s as triangles in Java?

My assignment in my Java course is to make 3 triangles. One left aligned, one right aligned, and one centered. I have to make a menu for what type of triangle and then input how many rows is wanted. The triangles have to look like this
*
**
***
****
*
**
***
****
*
***
*****
So far I was able to do the left aligned triangle but I can't seem to get the other two. I tried googling but nothing turned up. Can anyone help? I have this so far.
import java.util.*;
public class Prog673A
{
public static void leftTriangle()
{
Scanner input = new Scanner (System.in);
System.out.print("How many rows: ");
int rows = input.nextInt();
for (int x = 1; x <= rows; x++)
{
for (int i = 1; i <= x; i++)
{
System.out.print("*");
}
System.out.println("");
}
}
public static void rightTriangle()
{
Scanner input = new Scanner (System.in);
System.out.print("How many rows: ");
int rows = input.nextInt();
for (int x = 1; x <= rows; x++)
{
for (int i = 1; i >= x; i--)
{
System.out.print(" ");
}
System.out.println("*");
}
}
public static void centerTriangle()
{
}
public static void main (String args [])
{
Scanner input = new Scanner (System.in);
System.out.println("Types of Triangles");
System.out.println("\t1. Left");
System.out.println("\t2. Right");
System.out.println("\t3. Center");
System.out.print("Enter a number: ");
int menu = input.nextInt();
if (menu == 1)
leftTriangle();
if (menu == 2)
rightTriangle();
if (menu == 3)
centerTriangle();
}
}
Sample Output:
Types of Triangles
1. Left
2. Right
3. Center
Enter a number (1-3): 3
How many rows?: 6
*
***
*****
*******
*********
***********
Hint: For each row, you need to first print some spaces and then print some stars.
The number of spaces should decrease by one per row, while the number of stars should increase.
For the centered output, increase the number of stars by two for each row.
Ilmari Karonen has good advice, and I'd just like to generalize it a bit. In general, before you ask "how can I get a computer to do this?" ask "how would I do this?"
So, if someone gave you an empty Word document and asked you to create the triangles, how would you go about doing it? Whatever solution you come up with, it's usually not hard to translate it to Java (or any other programming language). It might not be the best solution, but (hopefully!) it'll work, and it may point you to a better solution.
So for instance, maybe you would say that you'd type out the base, then go up a line, then type the next highest line, etc. That suggests that you can do the same in Java -- create a list of Strings, base-to-top, and then reverse them. That might suggest that you can just create them in reverse order, and then not have to reverse them. And then that might suggest that you don't need the list anymore, since you'll just be creating and printing them out in the same order -- at which point you've come up with essentially Ilmari Karonen's advice.
Or, maybe you'd come up with another way of doing it -- maybe you'd come up with Ilmari Karonen's idea more directly. Regardless, it should help you solve this and many other problems.
Left alinged triangle-
*
**
from above pattern we come to know that-
1)we need to print pattern containing n rows (for above pattern n is 4).
2)each row contains star and no of stars i each row is incremented by 1.
So for Left alinged triangle we need to use 2 for loop.
1st "for loop" for printing n row.
2nd "for loop for printing stars in each rows.
Code for Left alinged triangle-
public static void leftTriangle()
{
/// here no of rows is 4
for (int a=1;a<=4;a++)// for loop for row
{
for (int b=1;b<=a;b++)for loop for column
{
System.out.print("*");
}
System.out.println();}
}
Right alinged triangle-
*
**
from above pattern we come to know that-
1)we need to print pattern containing n rows (for above pattern n is 4).
2)In each row we need to print spaces followed by a star & no of spaces in each row is decremented by 1.
So for Right alinged triangle we need to use 3 for loop.
1st "for loop" for printing n row.
2nd "for loop for printing spaces.
3rd "for loop" for printing stars.
Code for Right alinged triangle -
public void rightTriangle()
{
// here 1st print space and then print star
for (int a=1;a<=4;a++)// for loop for row
{
for (int c =3;c>=a;c--)// for loop fr space
{
System.out.print(" ");
}
for (int d=1;d<=a;d++)// for loop for column
{
System.out.print("*");
}
System.out.println();
}
}
Center Triangle-
*
* *
from above pattern we come to know that-
1)we need to print pattern containing n rows (for above pattern n is 4).
2)Intially in each row we need to print spaces followed by a star & then again a space . NO of spaces in each row at start is decremented by 1.
So for Right alinged triangle we need to use 3 for loop.
1st "for loop" for printing n row.
2nd "for loop for printing spaces.
3rd "for loop" for printing stars.
Code for center Triangle-
public void centerTriangle()
{
for (int a=1;a<=4;a++)// for lop for row
{
for (int c =4;c>=a;c--)// for loop for space
{
System.out.print(" ");
}
for (int b=1;b<=a;b++)// for loop for column
{
System.out.print("*"+" ");
}
System.out.println();}
}
CODE FOR PRINTING ALL 3 PATTERNS -
public class space4
{
public static void leftTriangle()
{
/// here no of rows is 4
for (int a=1;a<=4;a++)// for loop for row
{
for (int b=1;b<=a;b++)for loop for column
{
System.out.print("*");
}
System.out.println();}
}
public static void rightTriangle()
{
// here 1st print space and then print star
for (int a=1;a<=4;a++)// for loop for row
{
for (int c =3;c>=a;c--)// for loop for space
{
System.out.print(" ");
}
for (int d=1;d<=a;d++)// for loop for column
{
System.out.print("*");
}
System.out.println();
}
}
public static void centerTriangle()
{
for (int a=1;a<=4;a++)// for lop for row
{
for (int c =4;c>=a;c--)// for loop for space
{
System.out.print(" ");
}
for (int b=1;b<=a;b++)// for loop for column
{
System.out.print("*"+" ");
}
System.out.println();}
}
public static void main (String args [])
{
space4 s=new space4();
s.leftTriangle();
s.rightTriangle();
s.centerTriangle();
}
}
package apple;
public class Triangle {
private static final int row = 3;
public static void main(String... strings) {
printLeftTriangle();
System.out.println();
printRightTriangle();
System.out.println();
printTriangle();
}
// Pattern will be
// *
// **
// ***
public static void printLeftTriangle() {
for (int y = 1; y <= row; y++) {
for (int x = 1; x <= y; x++)
System.out.print("*");
System.out.println();
}
}
// Pattern will be
// *
// **
// ***
public static void printRightTriangle() {
for (int y = 1; y <= row; y++) {
for (int space = row; space > y; space--)
System.out.print(" ");
for (int x = 1; x <= y; x++)
System.out.print("*");
System.out.println();
}
}
// Pattern will be
// *
// ***
// *****
public static void printTriangle() {
for (int y = 1, star = 1; y <= row; y++, star += 2) {
for (int space = row; space > y; space--)
System.out.print(" ");
for (int x = 1; x <= star; x++)
System.out.print("*");
System.out.println();
}
}
}
This is for normal triangle:
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print(" ");
}
for (int k = 1; k <= i + 1; k++) {
System.out.print(" *");
}
System.out.print("\n");
}
Output:
*
* *
* * *
* * * *
* * * * *
This is for left triangle, just removed space before printing *:
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print(" ");
}
for (int k = 1; k <= i + 1; k++) {
System.out.print("*");
}
System.out.print("\n");
}
Output:
*
**
***
****
*****
1) Normal triangle
package test1;
class Test1 {
public static void main(String args[])
{
int n=5;
for(int i=0;i<n;i++)
{
for(int j=0;j<=n-i;j++)
{
System.out.print(" ");
}
for(int k=0;k<=2*i;k++)
{
System.out.print("*");
}
System.out.println("\n");
}
}
2) right angle triangle
package test1;
class Test1 {
public static void main(String args[])
{
int n=5;
for(int i=0;i<n;i++)
{
for(int j=0;j<=n-i;j++)
{
System.out.print(" ");
}
for(int k=0;k<=i;k++)
{
System.out.print("*");
}
System.out.println("\n");
}
}
}
}
3) Left angle triangle
package test1;
class Test1 {
public static void main(String args[])
{
int n=5;
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
System.out.print("*");
}
System.out.println("\n");
}
}
}
I know this is pretty late but I want to share my solution.
public static void main(String[] args) {
String whatToPrint = "aword";
int strLen = whatToPrint.length(); //var used for auto adjusting the padding
int floors = 8;
for (int f = 1, h = strLen * floors; f < floors * 2; f += 2, h -= strLen) {
for (int k = 1; k < h; k++) {
System.out.print(" ");//padding
}
for (int g = 0; g < f; g++) {
System.out.print(whatToPrint);
}
System.out.println();
}
}
The spaces on the left of the triangle will automatically adjust itself depending on what character or what word you want to print.
if whatToPrint = "x" and floors = 3 it will print
x
xxx
xxxxx
If there's no automatic adjustment of the spaces, it will look like this (whatToPrint = "xxx" same floor count)
xxx
xxxxxxxxx
xxxxxxxxxxxxxxx
So I made add a simple code so that it will not happen.
For left half triangle, just change strLen * floors to strLen * (floors * 2) and the f +=2 to f++.
For right half triangle, just remove this loop for (int k = 1; k < h; k++) or change h to 0, if you choose to remove it, don't delete the System.out.print(" ");.
For the right triangle, for each row :
First: You need to print spaces from 0 to rowNumber - 1 - i.
Second: You need to print \* from rowNumber - 1 - i to rowNumber.
Note: i is the row index from 0 to rowNumber and rowNumber is number of rows.
For the centre triangle: it looks like "right triangle" plus adding \* according to the row index (for ex : in first row you will add nothing because the index is 0 , in the second row you will add one ' * ', and so on).
well for the triangle , you need to have three loops in place of two ,
one outer loop to iterate the no of line
two parallel loops inside the main loop
first loop prints decreasing no of loops
second loop prints increasing no of ''
well i could give the exact logic as well , but its better if you try first
just concentrate how many spaces and how many '' u need in every line
relate the no of symbols with loop iterating no of lines
and you're done
..... if it bothers more , let me know , i'll explain with logic and code as well
This will print stars in triangle:
`
public class printstar{
public static void main (String args[]){
int m = 0;
for(int i=1;i<=4;i++){
for(int j=1;j<=4-i;j++){
System.out.print("");}
for (int n=0;n<=i+m;n++){
if (n%2==0){
System.out.print("*");}
else {System.out.print(" ");}
}
m = m+1;
System.out.println("");
}
}
}'
Reading and understanding this should help you with designing the logic next time..
import java.util.Scanner;
public class A {
public void triagle_center(int max){//max means maximum star having
int n=max/2;
for(int m=0;m<((2*n)-1);m++){//for upper star
System.out.print(" ");
}
System.out.println("*");
for(int j=1;j<=n;j++){
for(int i=1;i<=n-j; i++){
System.out.print(" ");
}
for(int k=1;k<=2*j;k++){
System.out.print("* ");
}
System.out.println();
}
}
public void triagle_right(int max){
for(int j=1;j<=max;j++){
for(int i=1;i<=j; i++){
System.out.print("* ");
}
System.out.println();
}
}
public void triagle_left(int max){
for(int j=1;j<=max;j++){
for(int i=1;i<=max-j; i++){
System.out.print(" ");
}
for(int k=1;k<=j; k++){
System.out.print("* ");
}
System.out.println();
}
}
public static void main(String args[]){
A a=new A();
Scanner input = new Scanner (System.in);
System.out.println("Types of Triangles");
System.out.println("\t1. Left");
System.out.println("\t2. Right");
System.out.println("\t3. Center");
System.out.print("Enter a number: ");
int menu = input.nextInt();
Scanner input1 = new Scanner (System.in);
System.out.print("maximum Stars in last row: ");
int row = input1.nextInt();
if (menu == 1)
a.triagle_left(row);
if (menu == 2)
a.triagle_right(row);
if (menu == 3)
a.triagle_center(row);
}
}
public static void main(String[] args) {
System.out.print("Enter the number: ");
Scanner userInput = new Scanner(System.in);
int myNum = userInput.nextInt();
userInput.close();
System.out.println("Centered Triange");
for (int i = 1; i <= myNum; i+=1) {//This tells how many lines to print (height)
for (int k = 0; k < (myNum-i); k+=1) {//Prints spaces before the '*'
System.out.print(" ");
}
for (int j = 0; j < i; j++) { //Prints a " " followed by '*'.
System.out.print(" *");
}
System.out.println(""); //Next Line
}
System.out.println("Left Triange");
for (int i = 1; i <= myNum; i+=1) {//This tells how many lines to print (height)
for (int j = 0; j < i; j++) { //Prints the '*' first in each line then spaces.
System.out.print("* ");
}
System.out.println(""); //Next Line
}
System.out.println("Right Triange");
for (int i = 1; i <= myNum; i+=1) {//This tells how many lines to print (height)
for (int k = 0; k < (myNum-i); k+=1) {//Prints spaces before the '*'
System.out.print(" ");
}
for (int j = 0; j < i; j+=1) { //Prints the " " first in each line then a "*".
System.out.print(" *");
}
System.out.println(""); //Next Line
}
}
This is the least complex program, which takes only 1 for loop to print the triangle. This works only for the center triangle, but small tweaking would make it work for other's as well -
import java.io.DataInputStream;
public class Triangle {
public static void main(String a[]) throws Exception{
DataInputStream in = new DataInputStream(System.in);
int n = Integer.parseInt(in.readLine());
String b = new String(new char[n]).replaceAll("\0", " ");
String s = "*";
for(int i=1; i<=n; i++){
System.out.print(b);
System.out.println(s);
s += "**";
b = b.substring(0, n-i);
System.out.println();
}
}
}
For left aligned right angle triangle you could try out this simple code in java:
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int size=sc.nextInt();
for(int i=0;i<size;i++){
for(int k=1;k<size-i;k++){
System.out.print(" ");
}
for(int j=size;j>=size-i;j--){
System.out.print("#");
}
System.out.println();
}
}
}
Find the following , it will help you to print the complete triangle.
package com.raju.arrays;
public class CompleteTriange {
public static void main(String[] args) {
int nuberOfRows = 10;
for(int row = 0; row<nuberOfRows;row++){
for(int leftspace =0;leftspace<(nuberOfRows-row);leftspace++){
System.out.print(" ");
}
for(int star = 0;star<2*row+1;star++){
System.out.print("*");
}
for(int rightSpace =0;rightSpace<(nuberOfRows-row);rightSpace++){
System.out.print(" ");
}
System.out.println("");
}
}
}
*
***
*****
*******
*********
***********
*************
For center triangle
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int b=(n-1)*2;
for(int i=1;i<=n;i++){
int t= i;
for(int k=1;k<=b;k++){
System.out.print(" ");
}
if(i!=1){
t=i*2-1;
}
for(int j=1;j<=t;j++){
System.out.print("*");
if(j!=t){
System.out.print(" ");
}
}
System.out.println();
b=b-2;
}
output:
*
* * *
for(int i=1;i<=5;i++)
{
for(int j=5;j>=i;j--)
{
System.out.print(" ");
}
for(int j=1;j<=i;j++)
{
System.out.print("*");
}
for(int j=1;j<=i-1;j++)
{
System.out.print("*");
}
System.out.println("");
}
*
***
public class Triangle {
public static void main ( String arg[] ) {
System.out.print("Enter Triangle Size : ");
int num = 0;
try {
num = Integer.parseInt( read.readLine() );
} catch(Exception Number) {
System.out.println("Invalid Number!");
}
for(int i=1; i<=num; i++) {
for(int j=1; j<num-(i-1); j++) {
System.out.print(" ");
}
for(int k=1; k<=i; k++) {
System.out.print("*");
for(int k1=1; k1<k; k1+=k) {
System.out.print("*");
}
}
System.out.println();
}
}
}
Target output:
*
***
*****
Implementation:
for (int i = 5; i >= 3; i--)
for (int a = 1; a <= i; a++)
{
System.out.print(" ");
}
for (int j = 10; j/2>=i; j--)
{
System.out.print("*");
}
System.out.println("");
}
(a) (b) (c) (d)
* ********** ********** *
** ********* ********* **
*** ******** ******** ***
**** ******* ******* ****
***** ****** ****** *****
****** ***** ***** ******
******* **** **** *******
******** *** *** ********
********* ** ** *********
********** * * **********
int line;
int star;
System.out.println("Triangle a");
for( line = 1; line <= 10; line++ )
{
for( star = 1; star <= line; star++ )
{
System.out.print( "*" );
}
System.out.println();
}
System.out.println("Triangle b");
for( line = 1; line <= 10; line++ )
{
for( star = 1; star <= 10; star++ )
{
if(line<star)
System.out.print( "*" );
else
System.out.print(" ");
}
System.out.println();
}
System.out.println("Triangle c");
for( line = 1; line <= 10; line++ )
{
for( star = 1; star <= 10; star++ )
{
if(line<=star)
System.out.print( "*" );
//else
// System.out.print(" ");
}
System.out.println();
}
System.out.println("Triangle d");
for( line = 1; line <= 10; line++ )
{
for( star = 1; star <= 10; star++ )
{
if(line>10-star)
System.out.print( "*" );
else
System.out.print(" ");
}
System.out.println();
}
You might be interested in this too
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int b=0;
for(int i=n;i>=1;i--){
if(i!=n){
for(int k=1;k<=b;k++){
System.out.print(" ");
}
}
for(int j=i;j>=1;j--){
System.out.print("*");
if(i!=1){
System.out.print(" ");
}
}
System.out.println();
b=b+2;
}
Output:: 5
* * * * *
* * * *
* * *
* *
*

Categories