2016-09-11 2 views
0

Как выполнить поиск массива с помощью строки, чтобы вызвать соответствующий номер? мое назначение попросил нас, чтобы позволить пользователю ввести имя и затем их соответствующая плата приходят с ней, это код, который я до сих пор, я не совсем уверен, что использовать, чтобы сделать этоКак найти массив со строкой, чтобы вызвать соответствующий номер

import java.io.*; 

public class Employees { 

    public static void main(String agrs[]) throws IOException { 

     BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in)); 

     double pay; 
     String name; 
     String answer; 

     //Arrays 
     double[] employeePay = new double[3]; 
     String[] employeeName = new String[3]; 

     pay = employeePay.length; 

     //for loops 
     for (int x = 0; x <= employeePay.length - 1; x++) { 
      System.out.print("Please enter the employee name:"); 
      employeeName[x] = (keyboardInput.readLine()); 
      System.out.print("Please enter the employe pay :"); 
      employeePay[x] = Double.parseDouble(keyboardInput.readLine()); 

     } 

     //requesting a name 
     System.out.println("Please enter an employee name to search for:"); 
     answer = (keyboardInput.readLine()); 

     for (int x = 0; x <= employeePay.length - 1; x++) { 
      if (employeeName[x].equalsIgnoreCase(answer)) { 
       System.out.print(employeeName + " pay rate is " + pay); 

      } else { 
       System.out.print(" The employee name hasnt been entered"); 
      } 

     } 

    } 
} 

ответ

0

вместо того чтобы использовать 2 односпальных массивы размерности рассмотреть возможность использования HashMap вместо

int employeeCount = 3; 
HashMap<String, Double> employeePayMap = new HashMap<String, Double>(); 
// ... code to capture input 
for (int x = 0; x < employeeCount; x++) { 
     System.out.print("Please enter the employee name:"); 
     String name = (keyboardInput.readLine()); 
     System.out.print("Please enter the employe pay :"); 
     Double pay = Double.parseDouble(keyboardInput.readLine()); 
     employeePayMap.put(name, pay); 

    } 

, а затем получить оплату как

Double payFound = employeePayMap.get(answer); 

Проверка payFound для нуль - если его пустым, название не соответствует.

+0

Я использую структуру if, чтобы проверить, не имеет ли значение null? – Bre1448

+0

Я просто попытался использовать код, который вы отправили, и первая строка содержит ошибки. – Bre1448

+0

Можете ли вы поделиться этими ошибками? Код должен быть путеводным, а не полным ответом – gingerkid

0

То, что вы сделали неправильно:

if (employeeName[x].equalsIgnoreCase(answer)) { 
    System.out.print(employeeName + " pay rate is " + pay); 
} 

Здесь вы печатаете весь employeeName, не ожидаемый индекс. Он должен быть employeeName[x]. Также pay - не что иное, как employeePay.length. Я не думаю, что вы пытаетесь напечатать длину массива employeePay здесь. Это должно быть employeePay[x].

if (employeeName[x].equalsIgnoreCase(answer)) { 
    System.out.print(employeeName[x] + " pay rate is = " + employeePay[x]); 
} 

Лучше подход:

Если у вас есть что-то те спаренный (как имя сотрудника и оплаты в вашем примере), лучше использовать Map вместо двух дискретных массива. Это лучший и чистый способ сделать это.

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

+0

oh okay, ive никогда не использовал карту раньше, так что это для меня новичок, будет ли она работать, если я буду использовать то, как я это делаю сейчас? Я только в классе 12, поэтому я еще не продвинутый – Bre1448

+0

Да, ваш текущий подход может работать после некоторого исправления. Но я сделаю акцент на том, чтобы пойти с лучшим подходом здесь. Поскольку это задание, я уверен, ваш учитель оценит (и может ожидать слишком), что вы используете карту вместо массива. – Shahid

+1

хорошо, я попробую использовать хэш-карту, а затем, вероятно, правильно, в конце концов это будет лучше, спасибо – Bre1448