Die Aufgabenstellung ist, dass hotel 4 Stockwerke hat und auf jedem Stockwerk sind 6 Zimmer. Jedes Zimmer hat 0 bis 4 Gäste und der Benutzer soll mir dem Namen eingeben
bei mir funktioniert leider nicht. Was ist an meinem code falsch?
Wie kann ich gestänzahl in bestimmten Zimmer Abfragen?
import java.util.Scanner;
public class Hotel {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int zimmer=24;
int gaeste=0;
int[][]gaesteanzahl=new int [zimmer][gaeste];
for (int i=0;i<zimmer;i++)
{
if (i%2==0)
{
gaeste=2;
}
if(i%5==0)
{
gaeste=3;
}
if(i%3==0)
{
gaeste=1;
}
}
String[][]gaestename=new String [zimmer][gaeste];
for (int i=0;i<zimmer;i++)
{
for (int j=0;j<gaeste;j++)
{
gaestename**[j]=sc.nextLine();
}
}
}
}
Danke für die Antwort. Im Stoff geht es um mehrdimensionale Array und wir haben Objekte noch nicht gelernt. In der erste schleife versuche ich in bestimmte Nummern gestäanzahl einzugeben.
Sollte 3 dimensionale Array machen mit int[][][] gaesteanzahl=new int [stock][zimmer][gaeste]; ?
nebenbei probiere ich etwas aus und falls mir jemand tipps geben kann wurde ich mich sehr freuen
*** Edit ***
Ich glaube es Stimmt so dass ich in bestimmte Zimmer Gästeanzahl eingebe
Wie kann ich dann Gästenamen eingeben?
import java.util.Scanner;
public class Hotel {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int zimmerNummer= 6;
int stock = 4;
int[][] gaesteAnzahl = new int [stock][zimmerNummer];
for (int i=0;i<stock;i++)
{
for(int j = 0; j < zimmerNummer; j++){
gaesteAnzahl**[j] = (int)(Math.random()*5);
}
}
}
}
Mach doch einfach ein dreidimensionales String-Array:
String[][][] namen = new String[4][6][4];
//for-Schleife durch Stockwerke
//for-Schleife durch Zimmer
//for-Schleife durch Gäste
//Benutzereingabe names[stockwerk][zimmer][gast];
So wäre allerdings jedes Zimmer mit 4 Gästen belegt. Wenn du irgendwo eine Vorgabe hast in welchem Zimmer wie viele Gäste sind würde ich dazu noch ein zweidimensionales int-Array machen, und dann nur so oft durch die Gastschleife gehen wie in dem Array steht. Der Rest bleibt dann halt null oder du füllst es mit irgendeinem Platzhalter “nicht belegt” oder so aus.
aa ja danke, aber Aufgabenstellung ist 0 bis 4 Gäste pro Zimmer
mit der Schleife schaffe ich nicht gästeanzahl pro Zimmer einzugeben
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int zimmerNummer= 6;
int stock = 4;
int gaesteAnzahl = 0;
String[][][] namen = new String [stock][zimmerNummer][gaesteAnzahl];
for (int i=0;i<stock;i++)
{
// math.random gibt die Zahle 0<= zahl < 1
for(int j = 0; j < zimmerNummer; j++){
gaesteAnzahl = (int)(Math.random()*5);
namen **[j][gaesteAnzahl];
}
}
}
Mit String[][][] namen = new String [stock][zimmerNummer][gaesteAnzahl];
wird ein Array erstellt, bei dem alle Größen schon festgelegt sind (und man kann die auch nicht mehr ändern). Es ist nicht ganz klar, worin die Frage besteht, aber… vielleicht sollen die Dimensionen einzeln erstellt werden?!
String namen[][][] = null; // Am anfang weiß man noch nichts...
System.out.println("stockwerke: ");
int stockwerke = sc.nextInt();
// Jetzt weiß man, wie viele Stockwerke es gibt.
// Erstelle einen Array mit der entsprechenden Größe für die 'stockwerke'
namen = new String[stockwerke][][];
for (int s=0; s<stockwerke; s++)
{
System.out.println("zimmer in stockwerk "+s+": ");
int zimmer = sc.nextInt();
// Erstelle im stockwerk 's' die angegebene Anzah Zimmer
namen[s] = new String[zimmer][];
for (int z=0; z<zimmer; z++)
{
int gaeste = ...
...
// Erstelle im aktuellen stock für das aktuelle
// zimmer einen array für die letztendlichen
// gästenamen...
namen[s][z] = new ...
}
}
Noch nebenbei: Das können (hoffentlich) nur Übungen sein, um mal ein bißchen mit Arrays rumzumachen. In der “Realität” würde man das nicht so machen. Da sind Arrays eher “selten”, zumindest in dieser Form…
[quote=Marco13]Das können (hoffentlich) nur Übungen sein, um mal ein bißchen mit Arrays rumzumachen. In der “Realität” würde man das nicht so machen. Da sind Arrays eher “selten”[/quote]Dem kann ich mich nur anschließen!
Im Normalfall braucht man Arrays nur, wenn sie von (schlechten) Bibliotheken als Parameter gefordert werden. Listen oder Maps mit eigenen Objekten sind überdurchschnittlich oft die bessere Wahl.
Naja, man muss mit solchen Aussagen immer aufpassen, sonst kommt noch die Frage, warum man denn nicht public static void main(List<String> args) schreiben kann Man könnte das weiter ausdifferenzieren (a la ~„Primitive arrays sind okayer als Referenztyp-Arrays“ oder so), aber das ist hier wohl nicht nötig.
Also ich denk mal, man würde ein int-Array (Zimmerbelegung) mit zwei Dimensionen benötigen, nämlich Stockwerkzahl/ZimmerProStock um dort die Zahl der Gäste für jedes Zimmer zu speichern.
Die eingetragene Anzahl wird dann zunächst automatisch 0 sein.
In einem weiteren Array, einem dreidimensionales String Array (NamensArray), das in den Dimensionen mit Stockwerkzahl/ZimmerProStock/MaximaleGästeZahlProZimmer festgelegt würde, könnte man dann ggf. Namen der Gäste eintragen.
Wenn ein Zimmer belegt wird, wäre also ein Eintrag im int-Array und bis zu vier Einträge im String-Array erforderlich.
Zu beachten wäre, dass das Zimmer nicht überbelegt wird.
Wenn ein Zimmer frei wird, wäre im int-Array für das entsprechende Zimmer nur eine 0 einzutragen.
Bei einer Abfrage der Belegung würde man zunächst im int-Array die Zahl der Gäste abfragen und die entsprechende Anzahl an Namen aus dem NamensArray lesen.
*** Edit ***
etwa so
[spoiler]```import java.util.Scanner;
public class Hotel {
private int[][] belegung = new int[4][6];
private String[][][] namen = new String[4][6][4];
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
Hotel hotel = new Hotel();
hotel.menu();
}
private void menu(){
boolean ok;
int eingabe;
do {
do {
System.out.println("<1> Einchecken <2> Auschecken <3> Abfrage <4> Beenden");
eingabe = sc.nextInt();sc.nextLine();
ok = (eingabe > 0 && eingabe <5);
if (!ok) {
System.out.println("Eingabe wiederholen");
}
} while (!ok);
switch (eingabe){
case 1: einchecken(); break;
case 2: auschecken(); break;
case 3: abfrage(); break;
}
} while (eingabe<4);
}
private void einchecken(){
System.out.println("Wieviele Personen");
int anzahl = sc.nextInt();sc.nextLine();
if (anzahl < 0 || anzahl >4){
System.out.println("So goes it not");
return;
}
int zimmernr = freiesZimmer();
if (zimmernr == 0){
System.out.println("Du kommst hier nicht rein");
}
else{
System.out.println("Ihre Zimmernummer ist "+zimmernr);
}
System.out.println("Ihre Namen bitte :");
int etage = zimmernr/10 - 1;
int zimmer = zimmernr % 10 -1;
belegung[etage][zimmer]=anzahl;
for (int i = 0; i<anzahl;i++){
namen[etage][zimmer]**=sc.nextLine();
}
}
private int freiesZimmer(){
int zimmer=0;
for (int i=0;i<belegung.length;i++){
for (int j=0;i<belegung**.length;j++){
if (belegung**[j]==0) {
zimmer = (i+1)*10+j+1;
break;
}
}
if (zimmer>0) break;
}
return zimmer;
}
private void auschecken(){
System.out.println("Zimmernummer");
int zimmernr = sc.nextInt();sc.nextLine();
int etage = zimmernr/10 - 1;
int zimmer = zimmernr % 10 -1;
if ((etage >= 0) && (zimmer >= 0) && (etage < belegung.length) && (zimmer < belegung[0].length)){
int personen = belegung[etage][zimmer];
belegung[etage][zimmer]=0;
if (personen > 0){
for (int i=0;i<personen;i++){
System.out.println("Aufwiedersehen "+namen[etage][zimmer]**);
}
}
else{
System.out.println("Das würd ich mir nochmal überlegen");
}
}
else{
System.out.println("Das ist wohl ein Jux ?");
}
}
private void abfrage(){
System.out.println("Zimmernummer");
int zimmernr = sc.nextInt();sc.nextLine();
int etage = zimmernr/10 - 1;
int zimmer = zimmernr % 10 -1;
if ((etage >= 0) && (zimmer >= 0) && (etage < belegung.length) && (zimmer < belegung[0].length)){
int personen = belegung[etage][zimmer];
if (personen > 0){
System.out.printf("Das Zimmer ist mit %s Person(en) belegt%n",personen);
for (int i=0;i<personen;i++){
System.out.println(namen[etage][zimmer]**);
}
}
else{
System.out.println("Das Zimmer ist frei");
}
}
else{
System.out.println("Jetzt bist du schon soo lange hier und kennst die Zimmernummern nicht");
}
}