Archief - naam zoeken in een array java

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.

badboyss

Legacy Member
hallo

2e jaar programmeren en laatste jaar oef (optie netwerkbeheer).
Nu heb ik een programma moeten schrijven die een spaarrekening voorstelt.
Er wordt een maand gevraagd en een bedrag in classe a.
Deze wordt meegegeven in de oproep van methode van de klasse b.
In de klasse b heb ik een array met de 12 maanden.
De bedoeling is dat de array overlopen wordt en als de maand gevonden is de resterende maanden in de array geretourneerd worden incl de maand zelf.

Met die return word de interest berekend van de rest van het jaar.
Later moet ik nog verfijnen op dag dus als ik de 15 juli stort heb ik maar5 maand en 15 dag interest maar ik zou het eerst willen laten werken op de maanden.
Daarna indien mogelijk nog schrikkeljaren uitfilteren :crazy:
Indien nodig wil ik wel een deel van de code posten, ik heb hier vorig jaar veel info gekregen maar ook veel tuuuuuttt over de manier van de syntax op te stellen dus als je me kan op weg helpen zonder code laat gerust wat weten :lol:

grts b

profound

Legacy Member
Zijde verplicht arrays te gebruiken? Anders zou ek is kijken naar collections als ek u was.

Volgens mij is dit wat je zoekt, in ieder geval checkt hij toch de maanden. Hier is zeker ook nog plaats voor verbetering, aan u om er uit te halen wat je nodig hebt ;)
Code:
public class NineLTest {
	String[] months = new String[]{"jan","feb","mar","ap","mei","juni","juli","aug"};
	
	public String[] deposit(String month){
		String returnMonths[] = null;
		
		//checken of de maand in de array overeen komt met de ingegeven maand
		for(int i = 0; i < months.length; i++){
			if(months[i].equals(month)){
				//zoja, checkmonths
				returnMonths = checkMonths(i);
			}
		}
		
		return returnMonths;
	}
	
	private String[] checkMonths(int x){
		//nieuwe array maken met grootte gelijk aan de resterende maanden
		String finalMonths[] = new String[months.length - x];
		int counter = 0;
		
		//nieue array opvullen met de resterende maanden
		for(int y = x; y < months.length; y++){
			finalMonths[counter] = months[y];
			counter++;
		}
		
		return finalMonths;
	}
	
	public static void main(String[] args) {
		NineLTest nlTest = new NineLTest();
		String testMonths[] = nlTest.deposit("mei");
		
		for(int i = 0; i < testMonths.length; i++){
			System.out.println(testMonths[i]);
		}
	}
}

badboyss

Legacy Member
nee we mogen alles gebruiken met uitzondering van bv de calender classe :-(
Ik zal u voorbeeld eens bekijken om toe te passen.
Ik zal de gok wagen en hier eens pasten wat ik in gedachte had met het risico van dien :-)
Maar ik wil gewoon weten of mijn redenering,en niet zozeer de syntax iets is.

parameter die wordt meegegeven aan de methode(deel van de classe)
Code:
package view;

import java.util.Scanner;

import model.Bankrekening;
import model.Datum;
import model.Spaarrekening;


public class Transacties {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan = new Scanner(System.in);
		Datum maand = new Datum();

System.out.println("Voor welke maand wilt u storten");
	 String newMaand = scan.next();
		maand.count(newMaand);
Code:
package model;

import java.util.Arrays;

public class Datum {
	private int counter = 0;
	//lege string zodat jan begint op 1
	private String[] maanden = { "", "Januari", "Februari", "Maart", "April", "Mei", "Juni", 
            "Juli", "Augustus", "September", "Oktober", "November", "December"};
	
	private String Januari, Februari, Maart, April, Mei, Juni, 
    Juli, Augustus, September, Oktober, November, December;
    private int rest = 0;
    

	/**
	 * 
	 */
	public Datum() {
	}
	/**
	 * @param array maanden 
	 * @param string januari
	 * @param string februari
	 * @param string maart
	 * @param string april
	 * @param string mei
	 * @param string juni
	 * @param string juli
	 * @param string augustus
	 * @param string september
	 * @param string oktober
	 * @param string november
	 * @param string december
	 * @param int rest
	 */
	public Datum(String[] maanden, String januari, String februari,
			String maart, String april, String mei, String juni, String juli,
			String augustus, String september, String oktober, String november,
			String december, int rest) {
		this.maanden = maanden;
		Januari = januari;
		Februari = februari;
		Maart = maart;
		April = april;
		Mei = mei;
		Juni = juni;
		Juli = juli;
		Augustus = augustus;
		September = september;
		Oktober = oktober;
		November = november;
		December = december;
		this.rest = rest;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Datum [maanden=" + Arrays.toString(maanden) + ", Januari="
				+ Januari + ", Februari=" + Februari + ", Maart=" + Maart
				+ ", April=" + April + ", Mei=" + Mei + ", Juni=" + Juni
				+ ", Juli=" + Juli + ", Augustus=" + Augustus + ", September="
				+ September + ", Oktober=" + Oktober + ", November=" + November
				+ ", December=" + December + ", rest=" + rest + ", getRest()="
				+ getRest() + ", getClass()=" + getClass() + ", hashCode()="
				+ hashCode() + ", toString()=" + super.toString() + "]";
	}
	public void count(String maand){
		
		if (maand.equalsIgnoreCase(Januari)){ 
	          counter = 1;
	           }
		if (maand.equalsIgnoreCase(Februari)){ 
	           counter = 2;
	           }
		if (maand == Maart){ 
	           counter = 3;
	           }
		if (maand.equalsIgnoreCase(April)){ 
	           counter = 4;
	           }
		if (maand.equalsIgnoreCase(Mei)){ 
	          counter = 5;
	           }
		if (maand.equalsIgnoreCase(Juni)){ 
	           counter = 6;
	           }
		if (maand.equalsIgnoreCase(Juli)){ 
	          counter = 7;
	           }
		if (maand.equalsIgnoreCase(Augustus)){ 
	          counter = 8;
	           }
		if (maand.equalsIgnoreCase(September)){ 
	           counter = 9;
	           }
		if (maand.equalsIgnoreCase(Oktober)){ 
	           counter = 10;
	           }
		if (maand.equalsIgnoreCase(November)){ 
	          counter = 11;
	           }
		if (maand.equalsIgnoreCase(December)){ 
	           counter = 12;
	           }
		else{counter = 137;}// test of te zien of count een waarde krijgt
		
		// hier loopt het mis hij loopt over mijn count methode en count krijgt de waarde 137
		for (int i = counter; i < maanden.length; i ++)
			rest++;
				
				System.out.println(rest);
				System.out.println(counter);
			}
		
	/**
	 * @return the rest
	 */
	public int getRest() {
		return rest;
	}
	
	}

profound

Legacy Member
Nogal logisch da uwe counter 137 is, opt einde doet ge dit;

Code:
if (maand.equalsIgnoreCase(December)){ 
	           counter = 12;
	           }
		else{counter = 137;}

Dus tenzij ge december ingegeven hebt, ist 137. Gij bedoelde waarschijnlijke else if{}...

Ik kan u alvast aanraden om da boelke weg te gooien, en eens zien naar hoe ik het gedaan heb. :p
Mijn methode is ook verre van de beste waarschijnlijk, ma tis echt nie moeilijk en toch al een beetje beter. Ge zou ook nog collections kunne gebruike, dan kunde da allemaal op nog minder lijnen code doen.

Dus in uw main methode kunt ge dan zoiets doen;
Code:
String newMaand = scan.next();
String testMonths[] = nlTest.deposit(newMaand);

En dan ebde ne array van strings waar dus uw resterende maanden in zitten.
Ik zou alsek van u was ook is goe nadenken over de benamingen van uw classe enzo. De moment da ge dit doet
Code:
Datum maand = new Datum();

Zou er wel een belleke moete rinkelen dat uw Datum klasse misschien een andere naam moet hebben.

Probeer ook geen talen te mengen me elkaar "newMaand" ofzo, daar ga uwen docent grijs haar van krijgen. Wees consistent, ofwel nieuweMaand ofwel newMonth (<- imo het 'beste').

badboyss

Legacy Member
ondertussen alles weggesmeten en opnieuw begonnen.
Ik heb toch nog zelf eens geprobeerd en kom nu tot de juist oplossing.
Hopelijk is de syntax nu iets beter het werkt allezins .
Ivb de naamgeving dat klopt ik vind dit al even moeilijk ofde syntax om een goede naam te vinden maar ik zal me daar ook eens op toeleggen..
Ivb de klasse datum deze hebben we in de opdracht gekregen omdat het de bedoeling is dat we op het einde (lees maandag) eigenlijk moeten komen tot bv:
Code:
hallo 
voor welke maand wil u storten
september
op welke dag wilt u storten
16 
hoeveel wilt u storen
1000
en dan moet ik voor de resterende 3 maand en 16 dagen de intrest berekenen.
Maar ik zal al tevreden zijn als het werkt per maand :-)

Code:
package model;

import java.util.Arrays;
import java.util.List;

public class Datum {
	private int rest = 0;
	//lege string zodat jan begint op 1
	List<String> maanden = Arrays.asList( "", "januari", "februari", "maart", "april", "mei", "juni", 
            "juli", "augustus", "september", "oktober", "november", "december");
	

    

	/**
	 * lege constructor
	 */
	public Datum() {
		super();
	}
	
	
	/**constructor
	 * @param int rest
	 * @param string maanden
	 */
	public Datum(int rest, List<String> maanden) {
		super();
		this.rest = rest;
		this.maanden = maanden;
	}


	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Datum [rest=" + rest + ", maanden=" + maanden + "]";
	}

public void count(String maand ){
	
	if (maanden.contains(maand)){
		rest = maanden.indexOf(maand);
				
				System.out.println(rest);
				System.out.println(maand);
			}
	}
	/**geef de rest terug om de intrest te berekeken
	 * @return the rest
	 */
	public int getRest() {
		return rest;
	}
	
	}

profound

Legacy Member
Opnieuw beginnen is in veel gevallen inderdaad een goe idee :)

En het ziet er idd toch al wa beter uit!

badboyss

Legacy Member
nu nog het schrikkeljaar uitfilteren op 28 of 29 dagen en de dagen berekenen piece of cake :-)

badboyss

Legacy Member
iemand een idee waarom dit altijd 0.0 oplevert ipv een negatief getal?

Code:
 double tempRentevoet = (termijnBerekenen.getRest() / 12);
termijnbereken.getrest is een int waarde waarbij de rest van de array word afgetrokken van 12 dus bv sept geeft als getrest 3

Zelfs als ik gewoon een int of een double ingeef kom ik 0.0 uit en als double vervang in een int lukt het ook niet.

net of hij niet negatief wil gaan?

profound

Legacy Member
3/12 is toch niet negatief??

Hij rond gewoon af naar onder (0,25 = 0,0)

Een int kan trouwens alleen gehele getallen bevatten dus das nogal wiedes dat het dan ook niet lukt.

badboyss

Legacy Member
Sorry verkeerd uitgedrukt heb al zo veel geprobeerd bedoel idd dus comma getal verkeerd getypt.
En idd een int kan enkel gehele getallen aan ,maar op den duur probeer je alles ;-).
zowiezo vang ik mijn waarde op in een double dus zou het moeten gaan toch?
of is het omdat het double= (int/int);is dat het niet werkt?

edit gevonden ik moet mijn int casten naar een double.

profound

Legacy Member
Een int delen door een int zal altijd een int blijven, dus je zult moeten casten idd.
Je kan dus;
Code:
 double tempRentevoet = ((double)termijnBerekenen.getRest() / 12);
of
Code:
 double tempRentevoet = (termijnBerekenen.getRest() / 12.0);

De twaalf wordt hier een double.


edit: ik ben zelf geen pro in het casting, boxing/unboxing, .... ik maak er zelf nog fouten op hoor, dus alser een foutje in staat, please forgive me :p
Maar normaal klopt het wel.

badboyss

Legacy Member
ik heb het bovenste reeds toegepast en dit lukt ;-) dus die casting werkt :-).
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