2016-03-20 6 views
0

Ich mache eine Datenbank, wo Sie in Tiere und die Ergänzungen eingeben können, die sie benötigen. Ich muss ein mehrdimensionales Array verwenden. Das Problem, auf das ich stoße, ist, dass ein Benutzer, der Daten in das multidimensionale Array eingibt, einen Fehler außerhalb der Grenzen erhält. Ich bin verwirrt, weil ich die gleiche Methodik für den Benutzer verwendet habe, um die Art des Tieres und die Anzahl der erforderlichen Ergänzungen einzugeben, aber wenn es tatsächlich in die Ergänzung kommt, habe ich eingeführt und Array halten, um die Ergänzungen für jedes Tier organisiert zu halten. Für eine visuelle Referenz, wollte meine Logik so sein:Füllen eines bestimmten Teils eines mehrdimensionalen String-Arrays (Out of Bounds)

Namen Tier Typ 1 Beiblatt 1

Die Tierarten die erste Spalte nach unten gehen, während die Ergänzungen in einer horizontalen Art und Weise an jedem Tier zu füllen. Ich poste meinen Code, aber speziell habe ich Probleme mit dem Array außerhalb der Grenzen bekommen. Ich vermute, dass es damit zu tun hat, wie ich das Multi-Array initialisiert habe, aber ich bin mir an dieser Stelle nicht sicher. Jede Hilfe würde sehr geschätzt werden!

// Nicholas Stafford // 1. Februar 2016 // Dieses Programm wird eine Benutzereingabe von bis zu einem beliebigen Anzahl von Tieren und Ernährungsinformationen und dann erlaubt es dem Benutzer ermöglichen, dass die Informationen angezeigt werden, wenn die Datenbank

Suche
import java.util.Scanner; 
import java.util.Arrays; 

public class Inventar {

public static void main(String[] args) 
    { 

     //Initial variables 
     int choiceent; 
     int numAnimals = 0; 
     int numDiet = 0; 
     int ArrayHold = 0; 
     boolean isNum; 
     boolean isNum2; 
     boolean quit = false; 


     //Scanners needed for input 
     Scanner choice = new Scanner(System.in); 
     Scanner input1 = new Scanner(System.in); 
     Scanner input2 = new Scanner(System.in); 
     Scanner input3 = new Scanner(System.in); 
     Scanner input4 = new Scanner(System.in); 

     //Initial value needed to enter animals into database 
     System.out.println("Enter the number of animals you wish to enter:"); 
     do 
     { 
      if(input1.hasNextInt()) { 
       numAnimals = input1.nextInt(); 
       isNum = true; 

      } 
      else { 
       System.out.println("Please enter an integer value!"); 
       isNum = false; 
       input1.next(); 
      } 

     } 
     while(!(isNum)); 
     System.out.println("You are entering " +numAnimals+ " animals."); 

     //Multidimensional array 
     String [][] ZooBase = new String [100][100]; 

     //Array for data types 
     int numDietA[] = new int [numAnimals]; 

     do{ 

     System.out.println("1. Enter the names of each animal"); 
     System.out.println("2. Enter the dietary information"); 
     System.out.println("3. Search the array for information"); 
     System.out.println("4. Close the program"); 

     choiceent = choice.nextInt(); 

     switch(choiceent) 
     { 
     case 1: 
      //Data validation for name 

      for(int i = 0; i < numAnimals; i++) 
      { 
       System.out.println("Enter the type of animal for animal " +i+ ""); 
       while(!input2.hasNext("[a-zA-Z]+")) 
       { 
        System.out.println("Enter a type of animal!"); 
        ZooBase[i+1][0] = input2.nextLine(); 
       } 
       ZooBase[i+1][0] = input2.nextLine(); 
      } 

      //Display Names 
      System.out.println("Names"); 
      for(int j = 0; j < numAnimals; j++){ 
        System.out.println(ZooBase[j+1][0]); 
      } 
      break; 

     case 2: 

      for(int j = 0; j < numAnimals; j++) 
      { 
       System.out.println("How many supplements does the " +ZooBase[j+1][0]+ " need?"); 
       do 
       { 
        if(input3.hasNextInt()) { 
         numDietA[j] = input3.nextInt(); 
         isNum2 = true; 

        } 
        else { 
         System.out.println("Please enter an integer value!"); 
         isNum2 = false; 
         input3.next(); 
        } 
       }while(!(isNum2)); 

       } 

       for(int k = 0; k < numAnimals; k++) 
       { 
        ArrayHold = k+1; 
        for(int m = 0; m < numDietA[m]; m++) 
        { 
        System.out.println("Enter item " +m+ " for the " +ZooBase[m+1][0]+ ""); 

         while(!input4.hasNext("[a-zA-Z]+")) 
         { 
          System.out.println("Enter a supplement (No integers)!"); 
          ZooBase[ArrayHold][m+2] = input4.nextLine(); 
         } 
         ZooBase[ArrayHold][m+2] = input4.nextLine();   
        } 
       } 



      break; 

     case 3: 
      break; 

     case 4: 
      quit = true; 
      break; 

     default: 

      System.out.println("Invalid option!"); 
      break; 



     } 
     }while(choiceent != 4); 

    }  

}

Antwort

0

Sobald ein Array INITIALIZ ist ed, kann seine Größe nicht geändert werden. Um sicherzustellen, dass dies nicht geschieht, verwenden Sie ArrayList <>, die keine festen Grenzen hat. Sie finden die Syntax + alle Details hier: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Hoffe, dass hilft!

ps. Sie können auch nur 1 Scanner-Eingang initialisieren und im gesamten verwenden

+0

Ah, ich verstehe. Ich bin gezwungen, ein mehrdimensionales Array, keine Array-Liste zu verwenden, aber ich frage nur den Benutzer, ob er für jede Iteration ein anderes Supplement eingeben möchte. Ich dachte, dass, wenn ich das Array auf 100 definierte und den Benutzer fragte, wie viele Ergänzungen, die sie wollten, würde es nur füllen das Array und nicht tatsächlich seinen initialisierten Wert ändern. – NStafford

Verwandte Themen