Archief - [prog][java]out of bounds

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

pieta

Legacy Member
Code:
import tio.*;

class Mijnenveger {
	public static void main (String[] args){
		int m,n,b;
		System.out.println("geef een getal in voor het aantal rijen");
		m = Console.in.readInt();
		System.out.println("geef een getal in voor het aantal kolommen");
		n = Console.in.readInt();
		System.out.println("geef een getal in voor het aantal bommen");
		b = Console.in.readInt();
		

		
		
		for (int G = -1; G < m ; G++) {
      for (int H = -1; H < n; H++)
        if (G == -1 && H == -1)
          System.out.print(" ");
        else if (G == -1)
          System.out.print(H);
        else if (H == -1)
          System.out.print(G);
        else
          System.out.print("#");
      System.out.println();
    }
las ik dit run zget em de hele tijd:
eception in thread "main'' java.lang.ArrayIndexOutOfBoundsException:" end an het getal wak ingeef bij mn kolom" at mijneveger.main<mijneveger.java:32>

Bubbling Zombie

Legacy Member
Ge zijt bij uw tweede for uw "{ }" (de correcte naam ontglipt mij) vergeten denk ik.

.Acku.

Legacy Member
Ps uw code ziet er al beter uit zo:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Mijnenveger {
	public static void main(String[] args) throws IOException{
		int m, n, b;
		BufferedReader kb = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("geef een getal in voor het aantal rijen");
		 //m = System.in.readInt();
		m = Integer.parseInt(kb.readLine());
		System.out.println("geef een getal in voor het aantal kolommen");
		// n = Console.in.readInt();
		n = Integer.parseInt(kb.readLine());
		System.out.println("geef een getal in voor het aantal bommen");
		// b = Console.in.readInt();
		b = Integer.parseInt(kb.readLine());

		for (int g = 0; g <= m; g++) {
			for (int h = 0; h <= n; h++) {

				if (g == 0 && h == 0) {
					System.out.print(" ");
				} else if (g == 0) {
					System.out.print(h);
				} else if (h == 0) {
					System.out.print(g);
				} else {
					System.out.print("#");
				}
			}
			System.out.println();
		}
	}
}

Wijzigingen:
Zet altijd haakjes {} na for, while en if. Dat leest beter, vermijdt fouten (als je later een lijn toevoegt in de lus dan zie je soms niet dat die niet meegenomen wordt erin).
Initaliseer op 0 ipv -1, beter voor menselijke logica.

.Acku.

Legacy Member
Ps: ivm met die tio en Console. ben je zeker dat je niet
Input input = new Input();
int a = input.readInt()

wilt doen zoals andere collega's van je?
(ik heb die package niet)

pieta

Legacy Member
ja al die dingen hebk nog nie gezien dus magk ook nie gebruiken!

.Acku.

Legacy Member
pieta zei:
ja al die dingen hebk nog nie gezien dus magk ook nie gebruiken!

Zeg raren, ge hebt niet eens een Array in die code. Zijt ge wel zeker dat ge de juiste code aan het uitvoeren zijt?

.Acku.

Legacy Member
Ge runned Mijneveger terwijl de klasse Mijnenveger noemt, io ;)
maw: ge runned een oude gecompileerde klasse, veranderingen aan uw hernoemde zie je niet.

.Acku.

Legacy Member
Mocht ge er niet uit geraken: verander class Mijnenveger terug naar class Mijneveger

.Acku.

Legacy Member
Ma ge doet lomp :( Chekc uw instellingen. En doe eens een ander soort van System.out in het begin, ge zult zien dat ge de verkeerde klasse aan het uitvoeren zijt.

killgore

Legacy Member
ik krijg geen fout in eclipse, ma gok dat er iets mis is met de buffer van uw in of output.

edit: acku, em runt wel degelijk mijnenveger hoor op die afbeelding, het is het bestand dat nog mijneveger noemt ;)

Krueger

Legacy Member
killgore zei:
ik krijg geen fout in eclipse, ma gok dat er iets mis is met de buffer van uw in of output.

edit: acku, em runt wel degelijk mijnenveger hoor op die afbeelding, het is het bestand dat nog mijneveger noemt ;)
Het kan zijn dat ik niet mee ben, maar moet de naam van uw bestand niet hetzelfde zijn als de naam van uw Java-class?

Ook wel straf dat hij een foutmeling krijgt op lijn 32, terwijl er geneens 32 lijnen code zijn voor zover ik kan zien.

killgore

Legacy Member
Krueger zei:
Het kan zijn dat ik niet mee ben, maar moet de naam van uw bestand niet hetzelfde zijn als de naam van uw Java-class?

Ook wel straf dat hij een foutmeling krijgt op lijn 32, terwijl er geneens 32 lijnen code zijn voor zover ik kan zien.
alleen als ge er modifier bijzet bij mijn weten ;).

bij acku zen code heb ik toch 35 regels ze :p.

Unzip Attack

Legacy Member
1. indentatie trekt op geen zak, uw eerste for() verder zetten dan uw 2de for() :s

2. haakjes gebruik is verschrikkelijk, maak keuzes ofwel OVERAL haakjes ofwel bij alles behalve if's van 1 regel lang ofzo, maar dit is echt horrible

3. NAAMGEVING ! Sjezuz van zo'n spotgemakkelijk spul maak je een soep waar je op den duur helemaal niet meer aanuit kan.
namen als m,n,b,H,G,... zeggen NIX. als je echt met rijen en kolommen werkt, gebruik dan namen als "rij", "kolom" of hou je aan "i", "j" ofzo...

4. begin niet te prullen met for's te laten starten vanaf -1 enzo... nergens voor nodig...

5. zoiets maak je veel beter met een arraytje... dit is prulwerk zonder array in mijn ogen

Code:
import tio.*;

class Mijnenveger {
	public static void main (String[] args){
		int aantalRijen,aantalKolommen,aantalBommen;

		System.out.println("geef een getal in voor het aantal rijen");
		aantalRijen = Console.in.readInt();

		System.out.println("geef een getal in voor het aantal kolommen");
		aantalKolommen = Console.in.readInt();

		System.out.println("geef een getal in voor het aantal bommen");
		aantalBommen = Console.in.readInt();


		for (int rij = 0; rij <= aantalRijen ; rij++) {		
		      for (int kolom = 0; kolom <= aantalKolommen; kolom++) {
		    	  if (rij == 0 && kolom == 0) {
			    	  System.out.print(" ");
			      }
		    	  else if (rij == 0) {
		    		  System.out.print(kolom);
		    	  }
			  else if (kolom == 0) {
			          System.out.print(rij);
			  }
			  else {
			   	  System.out.print("#");
			  }
		      }
		      System.out.println();
		}
		
	}
}

trekt al op iets meer en wordt uitgevoerd zonder problemen...

.Acku.

Legacy Member
killgore zei:
alleen als ge er modifier bijzet bij mijn weten ;).

bij acku zen code heb ik toch 35 regels ze :p.

Ge runt mijn code zeker? Probleem is dat hij zijn IDE heeft ingesteld op het runnen van Mijneveger.class (door mijneveger.java als main aan te duiden), en dan later de naam heeft veranderd naar mijnenveger, waardoor er opeens twee klassen in zijn build (/classes bij jcreator) zitten, en de IDE de oude blijft runnen maar de nieuwe compileert.

Is een oud zeer die ik ook al paar keer ben tegengekomen, in ergere gevallen bij .jars, waar ik vergeet de compiled classes te herjarren. Pijnlijk als je ontdekt dat je urenlang op iets zat te zoeken dat geeneens een fout meer was.

Unzip geeft dezelfde tips als ik dat is vriendelijk ;) ben benieuwd als er eens iemand afkomt met een groter projectje, wat er daar uit te halen valt

killgore

Legacy Member
.Acku. zei:
Ge runt mijn code zeker? Probleem is dat hij zijn IDE heeft ingesteld op het runnen van Mijneveger.class (door mijneveger.java als main aan te duiden), en dan later de naam heeft veranderd naar mijnenveger, waardoor er opeens twee klassen in zijn build (/classes bij jcreator) zitten, en de IDE de oude blijft runnen maar de nieuwe compileert.

en waarom geeft de interpreter dan een fout in de klasse mijnenveger??? ALs hij zijn oude .class bestand zou uitvoeren zou hij nog steeds een fout in mijneveger moeten krijgen aangezien hij die klasse ook gebruikt ;).

Tkan natuurlijk iets specifiek jcreator zijn (werk er niet mee ;)), maar klinkt vrij onlogisch imho :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan