-3

ユーザーが以前に使用した ID 番号を入力しようとした場合、レコードを保存しないようにするにはどうすればよいですか? while ループを試してみましたが、ユーザーに 2 回目の質問をしても機能しますが、その後は機能しません。配列を使用することを考えましたか?

import java.util.*;

import java.io.*;
public class CreateCustomerFile
{
   public static void main(String[] args) throws IOException
   {
      int pos;
      RandomAccessFile it = 
         new RandomAccessFile("CustomerFile.txt", "rw");
      Scanner input = new Scanner(System.in);

      int id;
      String name;
      int zip;
      final int RECORDSIZE = 100;
      final int NUMRECORDS = 1000;
      final int STOP = 99;
      try
      {


        byte [] padding = new byte[RECORDSIZE];
     Arrays.fill(padding, (byte)0 );
     for(int x = 0; x < NUMRECORDS; ++x)
     {
         it.write(padding);
     }

      }

      catch(IOException e)
      {
         System.out.println("Error: " + e.getMessage());
      }
      finally
      {
         it.close();
      }
      it = 
        new RandomAccessFile("CustomerFile.txt","rw");
      try
      {
         System.out.print("Enter ID number" +  
                        " or " + STOP + " to quit ");

         id = input.nextInt();
         while(id != STOP)
         {
            input.nextLine();

            System.out.print("Enter last name");
            name = input.nextLine();
                while(name.length() > 7 || name.length() <7)
                {   
                System.out.print("Name must be 7 characters; Enter last name");
            name = input.nextLine();
                }
            System.out.print("Enter zipcode ");
            zip = input.nextInt();
            pos = id - 1;
            it.seek(pos * RECORDSIZE);
            it.writeInt(id);
                it.writeUTF(name);
            it.writeInt(zip);
                System.out.print("Enter ID number"  +
               " or " + STOP + " to quit ");
           int id1 = input.nextInt();

                if(id == id1)
                {
             System.out.print("Id has been previously used" );

                 System.out.print("Enter ID number"  +
               " or " + STOP + " to quit ");
           id1 = input.nextInt();

                }
                id = id1;

                }

         }  

      catch(IOException e)
      {
         System.out.println("Error: " + e.getMessage());
      }
      finally
      {
         it.close();
      }
   }
   }
4

2 に答える 2

2

一意の識別子に UUIDを使用することを検討する必要があります。

于 2012-11-26T03:33:06.837 に答える
0

ハッシュテーブル/辞書が必要なようです。

Java のハッシュテーブル/辞書の実装は次の場所にあります。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Dictionary.html

基本的な例:

import java.util.*;
public class DictionaryDemo {
public static void main(String[] args)
{
Dictionary d=new Hashtable();

    d.put("1", "a");
    d.put("2","b" );
    d.put("3","ck" );
    d.put("4","c" );
    d.put("10","d" );
    System.out.println(d.get("10"));
    System.out.println(d.remove("10")+"  has been removed");
    System.out.println("the  value of key 10 = " +d.get("10"));

 for (Enumeration e = d.keys();e.hasMoreElements();)
     System.out.println(e.nextElement());
     System.out.println(e.nextElement());

}
}
于 2012-11-26T03:36:32.700 に答える