Gå til innhold

Skrive data til array og få visuelt mønster :o


Anbefalte innlegg

Hei!

 

Eg er medlem på ei facebook gruppe der personer for det meste spørr hjelp om lekse eller noko annet, og eg ser enkelt korleis diverse kan bli løyst. Så det holder tankegangen gående.

 

Så ein dag den 27. juni, postet eit medlem ei gåte på gruppa:

 

 

 

hi friend.. pls some help me to print numbers like this in java...

1 2 3 4 5 6

18 19 20 21 22 7

17 28 29 30 23 8

16 27 26 25 24 9

15 14 13 12 11 10... Pls help me...

 

Eg skjønte jo det så enkelt som at kvar linje var uavhengig av kvarandre, men i dag så såg eg at istadenfor fleire forskjellige uavhengige linjer, så kan det ver ein array som danner eit visuelt mønster:

1,  2,  3,  4,  5,  6,
18, 19, 20, 21, 22, 7,
17, 28, 29, 30, 23, 8,
16, 27, 26, 25, 24, 9,
15, 14, 13, 12, 11, 10

I dette tilfellet er det da ein "firkantet sirkel" 0.o

Dere kan tenke dere ein hypnose sirkel :p

http://0o2471.net/55649

 

som dere ser da så stiger verdien med ein heile vegen, med indeks verdier så blir det:

[0][0] -> [0][5] -> [4][5] -> [4][0] -> [1][0] -> [1][4] -> [3][4] -> etc.

 

 

 

Men eg vetje heilt korleis eg skal programmere denne, nokon andre som veit?

Endret av Fylling
Lenke til kommentar
Videoannonse
Annonse

Måtte tenke litt, men fikk det til å funke til slutt.

public class Drit {
	public static int size = 6, xMax = size, yMax = size, xMin = 0, yMin = 0;
	public static String[][] hei;
	
	public enum Direction {
		RIGHT, DOWN, LEFT, UP
	}
	
	public static void main(String[] args) {
		hei = new String[yMax][xMax];
		initTheShit();
		doDaThing();
	}
	
	public static void initTheShit() {
		for(int y = 0; y < yMax; y++) {
			for(int x = 0; x < xMax; x++) {
				hei[y][x] = "X";
			}
		}
	}
	
	public static void doDaThing() {
		Direction d = Direction.RIGHT;
		int counter = 1;
		int x = 0;
		int y = 0;
		while(!((xMin > xMax) && (yMin > yMax))) {
			if(d == Direction.RIGHT) {
				while(x < xMax) {
					hei[y][x] = Integer.toString(counter);
					printTheShit();
					x++;
					counter++;
				}
				y++;
				xMax--;
				x = xMax;
				d = Direction.DOWN;
			}
			else if(d == Direction.DOWN) {	
				while(y < yMax) {
					hei[y][x] = Integer.toString(counter);
					printTheShit();
					y++;
					counter++;
				}
				x--;
				yMax--;			
				y = yMax;
				d = Direction.LEFT;
							
			}
			else if(d == Direction.LEFT) {	
				while(x > xMin) {
					hei[y][x] = Integer.toString(counter);
					printTheShit();	
					counter++;
					x--;					
				}
				x = xMin;
				xMin++;
				d = Direction.UP;						
			}
			else if(d == Direction.UP) {
				while(y > yMin) {
					hei[y][x] = Integer.toString(counter);
					printTheShit();
					y--;
					counter++;
				}
				x++;
				yMin++;
				y = yMin;
				d = Direction.RIGHT;						
			}
		}
	}
	
	public static String padRight(String s, int n) {
	     return String.format("%1$-" + n + "s", s);  
	}
	
	public static void printTheShit() {
		for(int y = 0; y < size; y++) {
			for(int x = 0; x < size; x++) {
				//System.out.print(hei[y][x] + "  ");
				System.out.print(padRight(hei[y][x], 3));	
			}
			System.out.println();
		}
		System.out.println();
		System.out.println();			
	}
}
Lenke til kommentar

Her er et forslag til hvordan det kan kodes, forutsatt at jeg har forstått problemet:

public class Test {

  public static void main(String[] args) {
    int arr[][] = new int[5][6];

    int row_min = 0;
    int row_max = arr.length - 1;
    int col_min = -1;
    int col_max = arr[0].length - 1;
    int value = 1;

    while (value <= arr.length*arr[0].length) {
      for (int x = ++col_min; x <= col_max && row_min <= row_max; x++)
        arr[row_min][x] = value++;
      for (int y = ++row_min; y <= row_max && col_min <= col_max; y++)
        arr[y][col_max] = value++;
      for (int x = --col_max; x >= col_min && row_min <= row_max; x--)
        arr[row_max][x] = value++;
      for (int y = --row_max; y >= row_min && col_min <= col_max; y--)
        arr[y][col_min] = value++;
    }

    for (int y = 0; y < arr.length; y++) {
      for (int x = 0; x < arr[y].length; x++)
        System.out.print((arr[y][x] < 10 ? " " : "") + arr[y][x] + " ");
      System.out.println();
    }		
  }

}

Endret av jonny
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...