never thought i had issues with nested loops well here Iam: What i want to achieve is this: Given two number A and B i need to find all counting numbers between 1 and the A*B for example A=4 B=3 i need this:
1 2 3
4 5 6
7 8 9
10 11 12
I wrote the initial parts but i can't figure out how can i write down the value which changes in every row
for(int i=1; i<=A; i++){
for(int j=1; j<=B; j++){
System.out.println("?");}}
Having A*B gives me
1 2 3
2 4 6
3 6 9
4 8 12
I tried some other combinations too but to no luck, It might look straight forward but its the first time i'm facing this. Thanks in advance!
for(int i=0; i<A; i++){
for(int j=0; j<B; j++){
System.out.print(B*i + (j + 1));
}
System.out.println("");
}
You can try (i-1)*B + j.
Another option is to just use 1 for loop:
int limit = A * B;
for (int i = 1; i <= limit; i++) {
System.out.print(i + " ");
if (i % B == 0) {
System.out.println();
}
}
I don't know Why it has to be a nested loop? however, this one might work
for(int i=0; i < A; i++){
for(int j=i*B; j<(i+1)*B; j++){
System.out.print(j+1);
}
System.out.print("\n");
}
for(int i=1;i<=A*B;i++)
{ System.out.printf("%d%c",i,(i%B!=0?' ':'\n'));
}
for(i=1;i<A*B;i+=B)
{ for(j=i;j<i+B;j++)
{ System.out.printf("%d ",j);
}
System.out.println();
}
for(int i=1; i<=A; i++){
for(int j=1; j<=B; j++){
System.out.print(B*(i - 1) + j);
}
System.out.println();
}
The solution is ridiculously simply, just use one more variable and count it from 1 to A*B.
q = 0;
for(int i=0; i<A; i++){
for(int j=0; j<B; j++){
q++;
System.out.print(q + " ");
}
System.out.println();
}
Related
Hi I'm a beginner and I'm still learning and if someone could help me in this one thx in advance my code is:
for(int i = 0; i < 10; i++) {
System.out.println(i);
}
and the output should be like this:
0 1
2 3
4 5
6 7
8 9
Just use next line only for odd numbers:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0)
System.out.format("%2d", i);
else
System.out.format(" %2d\n", i);
}
Output:
0 1
2 3
4 5
6 7
8 9
P.S. For more general usage, I would extract it into separate method
public static void printTwoColumns(int min, int max) {
int width = String.valueOf(max).length();
for (int i = min; i < max; i++) {
String str = String.format("%" + width + 'd', i);
if (i % 2 == 0)
System.out.print(str);
else {
System.out.print(' ');
System.out.println(str);
}
}
}
You can do something like this:
for (int i = 0; i < 10; i++) {
System.out.print(i);
System.out.println(++i);
}
The first print uses the current i value and using System.out.print.
The second
print is using println so it goes one line down and also takes ++i so it will advance i by 1 and will also print the new value.
Each loop iteration is printing two values and advances i by total of 2.
To do what you want you can either do something like this:
for(int i = 0; i < 10; i ++){
if(i % 2 == 0){
System.out.print(i); //Only for evens
}else{
System.out.println(i); //Only for odds
}
}
Or you could simplify it even more with something like this:
for(int i = 0; i < 5; i += 2){
System.out.println(i + " " + (i + 1));
}
Trying to make a loop in java that goes like this
1
2
3
4
5
1000
1010
1020
1030
1040
Right now my code is
for(int j = 1; j <=5; j += 1){
for(int i = 1000; i <=1040; i += 10){
System.out.println(+ j );
System.out.println(+ i );
}
}
And this is not working at all as its printing every number 5 times.
Two separate loops since there is no relation between first 5 and last 5 numbers.
for(int j = 1; j <=5; j += 1) {
System.out.println(j);
}
for(int i = 1000; i <=1040; i += 10){
System.out.println(i);
}
Or if you really really really want to do it in one loop:
int i=1;
while(i<=1040)
{
System.out.println(i);
if(i<5){i++; continue;}
else if(i==5){i=1000; continue;}
else i+=10;
}
Output:
1
2
3
4
5
1000
1010
1020
1030
1040
Otherwise just use 2 for loops (the first with +1 increment, the second with +10 increments) in sequence and not nested.
for(int j=1; j<=5; j++) {
System.out.println(j);
}
for(int j=1000; j<=1040; j+=10){
System.out.println(j);
}
Please try this.
If your purpose is to only display the number like above.
Then you can do that with one for statement.
public class HelloWorld
{
public static void main(String[] args)
{
for(int j = 1; j <=5; j += 1){
System.out.println(j);
}
for(int i = 1000; i <=1040; i += 10){
System.out.println(i);
}
}
}
My apologies if this individual question is a duplicate, but I have not seen any specific answers to this particular problem.
I am trying to put spaces in between each individual character in a triangle I created using nested for loops in the code below.
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= 1; j--) {
if (j > i)
System.out.print(" ");
else
System.out.print(j);
}
System.out.println();
}
System.out.println();
for (int i = 1; i <= 6; i++) {
for (int j = 1; j < i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= (5 - i + 1); j++) {
System.out.print(j);
}
System.out.println();
}
This outputs:
1
21
321
4321
54321
12345
1234
123
12
1
However, it is required to be:
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
I've tried putting " " on either as well as both sides of the print statement, as I did with the reverse of these two triangles, to no avail. Am I missing something?
You can also try something like this.
int spaces=10;
int z;
for (int i = 1; i <=5 ; i++) {
spaces=spaces-2;
for (int j = 0; j<=spaces ; j++) {
if(j!=spaces)
System.out.print(" ");
else {
z=i;
while (z >= 1) {
System.out.print(z + " ");
z--;
}
}
}
System.out.println("\n");
}
System.out.println("\n");
spaces=-2;
int m;
for (int i = 1; i <=5 ; i++) {
spaces=spaces+2;
for (int j = 0; j <=spaces ; j++) {
if(j!=spaces)
System.out.print(" ");
else{
z=i;
m=1;
while (m<=6-z) {
System.out.print(m + " ");
m++;
}
}
}
System.out.println("\n");
}
Just change System.out.print(j); to System.out.print(j + " ");
I need to produce a triangle as shown:
***4
**34
*234
1234
My code is this:
for(int i=3; i>0 ;i--)
for(int j=0; j < i; j++){
System.out.print("*");
}
for(int s3 = 5; s3 >= 0; s3 -- ){
for ( int n2 = s3 + 1; n2 <= 4; n2 ++){
System.out.print(n2);
}
System.out.println();
}
}
which gives me this:
***
4
34
234
1234
**
4
34
234
1234
*
4
34
234
1234
Can anybody help me with this?
Just do it like this:
for(int i=3; i>=0 ;i--) {
for(int j=0; j < i; j++) {
System.out.print("*");
}
for ( int k = i+1; k < 5; k++ ) {
System.out.print(k);
}
System.out.println();
}
You just need an outer loop and 2 inner loops. The outer loops counts back from 3 to 0 (the number of stars for this line). The first inner loop prints that many stars. The second one fills the rest with digits.
Note that whether you start from 3 to 0 or 4 to 1 and then use a +1 or not and a -1 or not doesn't really matter. Also whether the first loop count forwards or backwards doesn't matter.
I just started with 3 because I find it easier to understand if i is the number of stars in the line. And I count forward (from 0 to i-1) in the first loop, just because I myself find it more intuitive to count in this direction than in the reverse one.
Achieve it by using two levels of nested loop.
for(int i=4;i>0;i--){
for(int j=i-1;j>0;j--){
System.out.print("*");
}
System.out.print(i);
for(int k =i+1;k<=4;k++){
System.out.print(k);
}
System.out.println();
}
final int NUM = 4;
for (int i = NUM; i >= 1; i--) {
for (int star = 1; star < i; star++) {
System.out.print("*");
}
for (int j = i; j <= NUM; j++) {
System.out.print(j);
}
System.out.println();
}
actually it just occurred to me why do we even use nested loops to solve problems like this especially when drawing something like
*
**
***
****
why cant we just build Strings as we go something like:
StringBuilder stars = new StringBuilder("****");
for (int i = 3; i >= 0; --i) {
stars.setCharAt(i, (char) (i + 49));
System.out.println(stars);
}
btw the code above will only work if you 9 or less stars, but I am just opening your mind to new ideas that you could use and practice :)
you can try this:
int valeur=5;
for(int i=valeur; i>0 ;i--) {
for (int j=1;j<=valeur;j++) {
System.out.print(j<i?"*":(j+""));
}
System.out.println("");
}
Try This
for(int i=4; i>0; i--){
for(int j=i-1; j>0; j--){
System.out.print("*");
}
System.out.print(i);
for(int k=i+1; k<=4; k++){
System.out.print(k);
}
System.out.println();
}
I am trying to make my code print out the Asterisk in the image, you see below. The Asterisk are align to the right and they have blank spaces under them. I can't figure out, how to make it go to the right. Here is my code:
public class Assn4 {
public static void main(String[] args) {
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
for (int x = 0; x <= 1; x++) {
System.out.println(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
}
System.out.println();
}
}
Matrix problems are really helpful to understand loops..
Understanding of your problem:
1) First, printing star at the end- That means your first loop should be in decreasing order
for(int i =7;i>=0; i+=i-2)
2) Printing star in increasing order- That means your second loop should be in increasing order
for(int j =0;j<=7; j++)
Complete code:
for(int i =7;i>=0; i=i-2){ // i=i-2 because *s are getting incremented by 2
for(int j =0;j<=7; j++){
if(j>=i){ // if j >= i then print * else space(" ")
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println();// a new line just after printing *s
}
Starting loops with 1 can sometimes help you visualize better.
int stopAt = 7;
for (int i = 1; i <= stopAt ; i += 2) {
for (int j = 1; j <= stopAt; j++) {
System.out.print(j <= stopAt - i ? " " : "*");
}
System.out.println();
}
Notice, how each row prints an odd number of *s ending at the line with 7. So, you start with i at 1 and go through 3 1+2, 5 3+2, and then stopAt 7 5+2.
The nested for loop has to print 7 characters always to make sure *s appear right aligned. So, the loop runs from 1 to 7.
Here the complete code:
for(int i = 0; i < 8; i++){
if( i%2 != 0){
for(int x = 0; x < i; x++){
System.out.print("*");
}
}else{
System.out.println();
}
}