Array aber wie?

Mal so als Idee... Es gibt eine DB names HSQL. Download hier:

http://hsqldb.org/web/hsqlDocsFrame.html

Diese Datenbank kann man in einem reinen Speichermodus betreiben. Sie schreibt dann nix auf die Platte. Damit kannst Du Tabellen aufbauen und sie per SQL abfragen. Meine SQL-Lösung ist nicht so klasse, aber vielleicht bekommst Du es besser hin. Es ist mehr als Skizze zu verstehen. Um den Code laufen zu lassen, musst Du nur die HSQL.jar in Deinen Classpath einbinden

Java:
package de.tutorials;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Hsql {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		Class.forName("org.hsqldb.jdbcDriver");
		Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");
		Statement createTableStatement = c.createStatement();
		createTableStatement.execute("Create table bmi (minAge NUMERIC, maxAge NUMERIC, minThreshold NUMERIC,  maxThreshold NUMERIC, range VARCHAR(100))");
		PreparedStatement insertStatement = c.prepareStatement("INSERT into bmi (minAge, maxAge, minThreshold, maxThreshold, range) VALUES (?,?,?, ?,?)");
	
		insertStatement.setInt(1,18 );
		insertStatement.setInt(2,24 );
		insertStatement.setInt(3, 0);
		insertStatement.setInt(4, 19);
		insertStatement.setString(5, "Sie sind untergewichtig");
		insertStatement.execute();
		
		insertStatement.setInt(1,18 );
		insertStatement.setInt(2,24 );
		insertStatement.setInt(3, 19);
		insertStatement.setInt(4, 24);
		insertStatement.setString(5, "Sie haben Ihr Normalgewicht");
		insertStatement.execute();
		
		// usw.
		
		//Abfrage per select
		
		PreparedStatement abfrageStatement = c.prepareStatement("Select range from bmi where minAge <= ? AND maxAge >= ? AND minThreshold <= ? AND maxThreshold >= ?");
		
		int alter = 23;
		int threshold = 20;
		abfrageStatement.setInt(1, alter);
		abfrageStatement.setInt(2, alter);
		abfrageStatement.setInt(3, threshold);
		abfrageStatement.setInt(4, threshold);
		
		ResultSet rs = abfrageStatement.executeQuery();
		
		while(rs.next())
			System.out.println(rs.getString("range"));
		

	}

}

P.S. Es ist eine freie, 100% in Java geschriebene DB
 
Zuletzt bearbeitet:
Noch ein Versuch ohne Arrays ;)

Kannste aber leicht umschreiben ..... ;-)


Eine einfache Klasse für die Array-Einträge:

Java:
package de.tutorials;

public class Entry {
	
	private double minAge;
	private double maxAge;
	private double minThreshold;
	private double maxThreshold;
	private String range;
	
	
	public Entry(double minAge, double maxAge, double minThreshold, double maxThreshold, String range) {
		setMinAge(minAge);
		setMaxAge(maxAge);
		setMinThreshold(minThreshold);
		setMaxThreshold(maxThreshold);
		setRange(range);
	}
	
	public double getMaxAge() {
		return maxAge;
	}
	public void setMaxAge(double maxAge) {
		this.maxAge = maxAge;
	}
	public double getMaxThreshold() {
		return maxThreshold;
	}
	public void setMaxThreshold(double maxThreshold) {
		this.maxThreshold = maxThreshold;
	}
	public double getMinAge() {
		return minAge;
	}
	public void setMinAge(double minAge) {
		this.minAge = minAge;
	}
	public double getMinThreshold() {
		return minThreshold;
	}
	public void setMinThreshold(double minThreshold) {
		this.minThreshold = minThreshold;
	}
	public String getRange() {
		return range;
	}
	public void setRange(String range) {
		this.range = range;
	}
	

	
	

}

und die Auswertung (mit ArrayList, geht aber auch mit Array)

Java:
package de.tutorials;

import java.util.ArrayList;
import java.util.List;

public class EntryModel {
	
	List<Entry> entries = new ArrayList<Entry>();
	
	public EntryModel() {
		add(new Entry(18,24,0,19,"Untergewicht"));
		add(new Entry(18,24,20,25,"Normalgewicht"));
		//etc
	}

	private boolean add(Entry e) {
		return entries.add(e);
	}

		
	public String getRange(int alter, int thershold) {
		for(Entry entry: entries) {
			if (entry.getMinAge() <= alter && entry.getMaxAge() > alter && entry.getMinThreshold() <= thershold && entry.getMaxThreshold() > thershold)
				return entry.getRange();
		}
		
		return "unbekannt";
	}

}
 
oder so:

Java:
package de.tutorials;


public class EntryModel {
	
	Entry [] entries = new Entry[36];
	int index = 0;
	
	public EntryModel() {
		add(new Entry(18,24,0,19,"Untergewicht"));
		add(new Entry(18,24,20,25,"Normalgewicht"));
		//etc
	}

	private void add(Entry e) {
		entries[index ++] = e;
	}

		
	public String getRange(int alter, int thershold) {
		for(int i= 0; i < entries.length; i ++) {
			Entry entry = entries[i];
			if (entry.getMinAge() <= alter && entry.getMaxAge() > alter && entry.getMinThreshold() <= thershold && entry.getMaxThreshold() > thershold)
				return entry.getRange();
		}
		
		return "unbekannt";
	}

}

diesmal mit Array :D
 
und ohne Array :D

Java:
package de.tutorials;


public class EntryModel {
	
	Entry start = null;
	Entry end = null;
	
	public EntryModel() {
		add(new Entry(18,24,0,19,"Untergewicht"));
		add(new Entry(18,24,20,25,"Normalgewicht"));
		//etc
	}

	private void add(Entry e) {
		
		if (end == null){
			start = end = e;
		} else {
			end.setNext(e);
			end = e;
		}
		
			
	}

		
	public String getRange(int alter, int thershold) {
		if (start == null) return "leere Liste";
		Entry entry = start;
		do 
		{
			if (entry.getMinAge() <= alter && entry.getMaxAge() > alter && entry.getMinThreshold() <= thershold && entry.getMaxThreshold() > thershold)
				return entry.getRange();
		} while ((entry = entry.getNext()) != null);
		
		return "unbekannt";
	}

}

Java:
package de.tutorials;

public class Entry {
	
	private double minAge;
	private double maxAge;
	private double minThreshold;
	private double maxThreshold;
	private String range;
	private Entry next = null;
	
	
	public Entry getNext() {
		return next;
	}

	public void setNext(Entry next) {
		this.next = next;
	}

	public Entry(double minAge, double maxAge, double minThreshold, double maxThreshold, String range) {
		setMinAge(minAge);
		setMaxAge(maxAge);
		setMinThreshold(minThreshold);
		setMaxThreshold(maxThreshold);
		setRange(range);
	}
	
	public double getMaxAge() {
		return maxAge;
	}
	public void setMaxAge(double maxAge) {
		this.maxAge = maxAge;
	}
	public double getMaxThreshold() {
		return maxThreshold;
	}
	public void setMaxThreshold(double maxThreshold) {
		this.maxThreshold = maxThreshold;
	}
	public double getMinAge() {
		return minAge;
	}
	public void setMinAge(double minAge) {
		this.minAge = minAge;
	}
	public double getMinThreshold() {
		return minThreshold;
	}
	public void setMinThreshold(double minThreshold) {
		this.minThreshold = minThreshold;
	}
	public String getRange() {
		return range;
	}
	public void setRange(String range) {
		this.range = range;
	}
	

	
	

}
 
lach danke
hab grad mitm package rumgespielt und nun ist alles weg ahhhhhhhhhhhhhhhhhhh
meine ganze klasse bmi :(
das wars mit dem abgeben
aber trotzdem danke für den aufwand
 
Zurück