2012-06-10 3 views
0

Привет, ребята, я в настоящее время создаю программу, которая позволяет пользователю создавать массив, искать массив и удалять элемент из массива. Рассматривая метод LibraryMenu, первый случай, когда вы создаете массив в инструкции switch, отлично работает, однако другие при создании компиляции создают «не удается найти ошибку символа».Java: Вывод операторов с использованием массивов

Мой вопрос: я хочу, чтобы функции поиска и удаления ссылались на первый случай коммутатора - создать массив библиотеки. Любая помощь приветствуется, даже если ее вероятность от простой ошибки.

import java.util.*; 
public class EnterLibrary 
{ 

public static void LibraryMenu() 
    { 
     java.util.Scanner scannerObject =new java.util.Scanner(System.in); 
     LibraryMenu Menu = new LibraryMenu(); 
     Menu.displayMenu(); 
     switch (scannerObject.nextInt()) 
     { 
      case '1': 
      { 
       System.out.println ("1 - Add Videos"); 
       Library[] newLibrary; 
       newLibrary = createLibrary(); 
      } 
      break; 
      case '2': 
       System.out.println ("2 - Search Videos"); 
       searchLibrary(newLibrary); 
       break; 
      case '3': 
      { 
       System.out.println ("3 - Change Videos"); 
        //Change video method TBA 
      } 
      break;  
      case '4': 
       System.out.println ("4 - Delete Videos"); 
       deleteVideo(newLibrary); 
       break; 
      default: 
       System.out.println ("Unrecognized option - please select options 1-3 "); 
       break; 
     } 
    } 

public static Library[] createLibrary() 
{ 
    Library[] videos = new Library[4]; 
    java.util.Scanner scannerObject =new java.util.Scanner(System.in); 
    for (int i = 0; i < videos.length; i++) 
    { 
     //User enters values into set methods in Library class 
     System.out.print("Enter video number: " + (i+1) + "\n"); 
     String number = scannerObject.nextLine(); 
     System.out.print("Enter video title: " + (i+1) + "\n"); 
     String title = scannerObject.nextLine(); 
     System.out.print("Enter video publisher: " + (i+1) + "\n"); 
     String publisher = scannerObject.nextLine(); 
     System.out.print("Enter video duration: " + (i+1) + "\n"); 
     String duration = scannerObject.nextLine(); 
     System.out.print("Enter video date: " + (i+1) + "\n"); 
     String date= scannerObject.nextLine(); 
     System.out.print("VIDEO " + (i+1) + " ENTRY ADDED " + "\n \n"); 
     //Initialize arrays 
     videos[i] = new Library(); 
     videos[i].setVideo(number, title, publisher, duration, date ); 
    } 
    return videos; 
} 

public static void printVidLibrary(Library[] videos) 
{ 
    //Get methods to print results 
    System.out.print("\n======VIDEO CATALOGUE====== \n"); 
    for (int i = 0; i < videos.length; i++) 
    { 
     System.out.print("Video number " + (i+1) + ": \n" + videos[i].getNumber() + "\n "); 
     System.out.print("Video title " + (i+1) + ": \n" + videos[i].getTitle() + "\n "); 
     System.out.print("Video publisher " + (i+1) + ": \n" + videos[i].getPublisher() + "\n "); 
     System.out.print("Video duration " + (i+1) + ": \n" + videos[i].getDuration() + "\n "); 
     System.out.print("Video date " + (i+1) + ": \n" + videos[i].getDate() + "\n "); 
    } 
} 

public static Library searchLibrary(Library[] videos) 
{ 
    //User enters values to setSearch 
    Library titleResult = new Library(); 
    java.util.Scanner scannerObject =new java.util.Scanner(System.in); 
    for (int n = 0; n < videos.length; n++) 
    { 
     System.out.println("Search for video number:\n"); 
     String newSearch = scannerObject.nextLine(); 
     titleResult.getSearch(videos, newSearch); 

     if (!titleResult.equals(-1)) 
     { 
     System.out.print("Match found!\n" + newSearch + "\n"); 
     } 
     else if (titleResult.equals(-1)) 
     { 
     System.out.print("Sorry, no matches found!\n"); 
     } 
    } 
    return titleResult; 
} 

public static void deleteVideo(Library[] videos) 
{ 
    Library titleResult = new Library(); 
    java.util.Scanner scannerObject =new java.util.Scanner(System.in); 
    for (int n = 0; n < videos.length; n++) 
    { 
     System.out.println("Search for video number:\n"); 
     String deleteSearch = scannerObject.nextLine(); 
     titleResult.deleteVideo(videos, deleteSearch); 
     System.out.print("Video deleted\n"); 
    } 
} 



public static void main(String[] args) 
{ 
    Library[] newLibrary; 

    new LibraryMenu(); 
} 
} 
+2

Пожалуйста, поставить некоторые усилия в правильно отступы код, и я обещаю, что я положил некоторые усилия в считыванию весь вопрос. :) –

ответ

0

Library[] newLibrary; определен только в вашем случае «1», вы должны определить его в более широкой области, например, ваш метод LibraryMenu. Кроме того, объявленный в вашем объявлении Library[] newLibrary не называется нигде, и, возможно, вам следует добавить проверку Null в свой поиск, напечатать методы удаления.

Ваш класс конструктора должен иметь одно и то же имя вашего класса и не содержать в нем никаких ключевых слов-модификаторов. Кроме того, когда вы создаете объект своего класса, он не будет использовать статические методы, объявленные там.

Примечание: когда вы работаете с собственными объявленными массивами, было бы лучше, если вы объявите переменную int, чтобы отслеживать фактический размер массива.Обратите внимание, что array.length возвращает количество элементов, которые может иметь массив, а не количество элементов, которые у него уже есть.

Я бы перепроектировать свои определения (не код) к чему-то вроде этого:

//Note I changed the classname from EnterLibrary to LibraryMenu. Apparently you 
//wanted a LibraryMenu class. 
public class LibraryMenu { 

    private final int MAX_ITEMS = 50; 
    private Library[] videos; 
    private int size = 0; 

    //remove the static and void keyworkds from this method, so this will be 
    //the constructor. 
    public LibraryMenu() { 
     videos = new Library[MAX_ITEMS]; 
     //the rest of your code here... 
     switch (scannerObject.nextInt()) { 
     //if you're reading an int, keep the constants in the case as int. 
     case 1: 
      //no need of brackets inside a case statement 
      //check that you can add an item in your Library array 
      //also, its not good to ask the user to add 4 (or N) videos in 1 round :). 
      if (size < MAX_ITEMS) { 
       Library video = addVideo(); 
       videos[size++] = video; 
      } 
      break; 
     case 2: 
      break; 
     } 
    } 

    //remove the static keyword so the instance of your class can call the method. 
    public Library addVideo() { 
     Library video = new Library(); 
     //your code to read data goes here... 
     //then fulfill the video and return it. 
     return video; 
    } 

    //The Library[] videos is declared in your class, so all other methods could 
    //use it without having to receive it as a parameter. 
    public void printVidLibrary() { 
     //your code goes here... 
    } 

    public Library searchLibrary() { 
     //your code goes here... 
    } 

    public void deleteVideo(Library[] videos) { 
     //your code goes here... 
    } 

    public static void main(String[] args) { 
     new LibraryMenu(); 
    } 
} 
+0

Этот ответ казался мне самым полезным. Я буду комментировать дальше, если у меня появятся проблемы. Благодарю. – Shane

+0

@Shane вы можете [отметить сообщение как ответ] (http://meta.stackexchange.com/a/5235/182862). Я поможем вам, когда смогу, если у вас появятся новые вопросы для сообщества, вы должны задать новый вопрос, а не добавлять дополнительные вопросы здесь. –

1

Вы должны переместить объявление этой переменной массива из сферы первого case, и до куда-нибудь, где другие случаи могут увидеть. Учитывая текущую структуру вашего кода, было бы удобнее всего сделать это статический член класса - то есть,

public class EnterLibrary 
{ 
    Library[] newLibrary; 

Тогда все статические методы этого класса могли бы поделиться одной переменной. Но обязательно удалите все другие объявления переменной, которые появляются в других методах, иначе они все равно будут использовать отдельные переменные, и такие ошибки могут быть очень трудными для отслеживания!

2

Я думаю, что это ужасный дизайн. Вы смешивали слишком много вещей: пользовательский интерфейс, логику, структуру данных.

Начните с изоляции LibraryArray от LibraryMenu. Вы не должны видеть в нем никакого переключателя или ввода или вывода.

Java - объектно-ориентированный язык. Начните думать о своей системе с точки зрения объектов. Я не вижу таких классов, как Video и VideoCatalog. Эта система будет намного проще реализовать, если вы их создали.

Похоже, у вас есть начало:

package model; 

public class Video { 
    private Long id; 
    private String title; 
    private String publisher; 
    private int durationSeconds; 
    private Date publicationDate; 
    // add ctors, getters, etc. Immutable? Could be... 
    // equals, hash code, toString 
} 

Держите ваш VideoCatalog свободным от пользовательского интерфейса или I/O:

package model; 

public interface VideoCatalog { 
    List<Video> find(); 
    List<Video> find(String title); 
    List<Video> find(Date startDate, Date endDate) ; 
    Long save(Video video); 
    void update(Video video); 
    void delete(Video video); 
} 

Теперь вы можете иметь реализацию, которая использует любую структуру данных вы хотите:

package model; 

public class VideoCatalogImpl implements VideoCatalog { 
    private Set<Video> videos; 
    // add implementations here. 
} 
0

Попробуйте это,

Объявление Library[] newLibrary;as an instance variable (at class scope), или as local variable before the switch statement.

Смежные вопросы