# Array aber wie?



## WenzelPaul (28. Mai 2007)

Wie bekomme ich z.B. http://www.bmi-rechner24.de/bmi_tabelle_body_mass_index_70.html so eine Tabelle verarbeitet. 
Zuerst soll der Wert berechnet werden(kein Problem) und dann soll in der Tabelle nachgeschaut werden in welchem Bereich ich liege und dann soll "Sie liegen im BereichX" ausgeben werden.
Wie erkennt Java denn das ich in einem Bereich von 19 bis 24 zum Beispiel liege?
Hat jemand einen Tipp?

danke


----------



## christianullenboom (28. Mai 2007)

Hallo,

man kann es mit einer Tabelle lösen, aber tut's eine Fallunterscheidung nicht auch?


```
if ( bmi >= bla && bmi <= blub )
  ...
else if ...
  ...
```

Grüße

 Christian | http://www.tutego.com/


----------



## WenzelPaul (28. Mai 2007)

Naja, meine Tabelle hat 36 Werte und deswegen dachte ich wäre hier Array besser.


----------



## limago (28. Mai 2007)

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


```
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


----------



## WenzelPaul (28. Mai 2007)

oh das nenne ich doch auch mal eine möglichkeit. vielen dank für die arbeit.
aber ich wollts mitn array machen


----------



## limago (28. Mai 2007)

Noch ein Versuch ohne Arrays  

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


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


```
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)


```
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";
	}

}
```


----------



## limago (28. Mai 2007)

oder so:


```
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


----------



## limago (28. Mai 2007)

und ohne Array 


```
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";
	}

}
```


```
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;
	}
	

	
	

}
```


----------



## WenzelPaul (28. Mai 2007)

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


----------

