2016-06-12 1 views
-2

Итак, я провел целый день, работая над небольшим проектом java, и подумал, что я должен попросить просить здесь, прежде чем я провожу еще три часа в Интернете.Java: неисправность else if statement (помощь binarysearch)

Так что я пытаюсь использовать бинарный поиск в инструкции if-else для доступа к массиву, который связан с классом где-то еще в коде.

и поэтому вы можете увидеть код:

public class BankProject { 

public static void main(String[] args) { 

Account[] accountArray = new Account[10]; 
accountArray[0] = new Account("Dillen Newton", 5555, 9000000.0, 10.0); 
accountArray[1] = new Account("Meteor", 5556, 10000.0, 5.5); 
accountArray[2] = new Account("Meteorite", 5557, 20000.5, 20.0); 
accountArray[3] = new Account("Super Mario", 5558, 100.0, 7.0); 
accountArray[4] = new Account("A Person", 5559, 234567.0, 6.0); 
accountArray[5] = new Account("Noone", 5560, 97498237.99, 50.0); 
accountArray[6] = new Account("Yes", 5561, 5.5, 100.0); 
accountArray[7] = new Account("Anonymous", 5562, 222.2, 13.0); 
accountArray[8] = new Account("Five Hours", 5563, 7600.0, 40.0); 
accountArray[9] = new Account("Who Knows", 5564, 9533.8, 99.0); 

Scanner reader = new Scanner(System.in); // Reading from System.in 
System.out.println("Please Enter A Specified Name"); 
System.out.println("Dillen Newton"); 
System.out.println("Meteor"); 
System.out.println("Meteorite"); 
System.out.println("Super Mario"); 
System.out.println("A Person"); 
System.out.println("Noone"); 
System.out.println("Yes"); 
System.out.println("Anonymous"); 
System.out.println("Five Hours"); 
System.out.println("Who Knows"); 
System.out.println(""); 
String n = reader.next(); // Scans the next token of the input as an int. 

    if (n.equals("Dillen Newton")){ 
     Arrays.binarySearch(accountArray, "Dillen Newton"); 
     System.out.println("Welcome, Dillen"); 
} else if (n.equals("Meteor")){ 
     Arrays.binarySearch(accountArray, "Meteor"); 
     System.out.println("Welcome, Meteor!");  
} else if (n.equals("Meteorite")){ 
    Arrays.binarySearch(accountArray, "Meteorite"); 
    System.out.println("Hello, Meteorite!");   
} else if (n.equals("Super Mario")){ 
    Arrays.binarySearch(accountArray, "Super Mario"); 
    System.out.println("Welcome, Mario");  
} else if (n.equals ("A Person")){ 
    Arrays.binarySearch(accountArray, "A Person"); 
    System.out.println("Hi Person!");  
} else if (n.equals("Noone")){ 
    Arrays.binarySearch(accountArray, "Noone"); 
    System.out.println("Welcome, Nobody!");  
} else if (n.equals("Yes")){ 
    Arrays.binarySearch(accountArray, "Yes"); 
    System.out.println("Yes"); 
} else if (n.equals("Anonymous")){ 
    Arrays.binarySearch(accountArray, "Anonymous"); 
    System.out.println("Hello There!");  
} else if (n.equals("Five Hours")){ 
    Arrays.binarySearch(accountArray, "Five Houres"); 
    System.out.println("Has it been that long already?");  
} else if (n.equals("Who Knows")){ 
    Arrays.binarySearch(accountArray, "Who Knows"); 
    System.out.println("I don't");  
} else{ 
    System.out.println("Incorrect Account. Please restart and try again"); 
    reader.close(); 
} 


    /* Account testAccount = new Account("Dillen Newton", 1122, 20000.0, 4.5); 
    testAccount.withdraw(2500); 
    testAccount.deposit(3000); 
    java.util.Date dateCreated = new java.util.Date(); 
    System.out.println("Date Created:" + dateCreated); 
    System.out.println("Name:" + testAccount.getName()); 
    System.out.println("Account ID:" + testAccount.getId()); 
    System.out.println("Balance:" + testAccount.getBalance()); 
    System.out.println("Monthly Interest:" + testAccount.getMonthlyInterest()); 

    System.out.println("Process completed."); 
    } 
    */ 
} 

} 

класса Account {

private String name; 
private int id; 
private double balance; 
private double annualInterestRate; 
private Date dateCreated; 

public Account(){ 
    name = ""; 
    id = 0; 
    balance = 0.0; 
    annualInterestRate = 0.0; 
} 

public Account(int newId, double newBalance){ 
    id = newId; 
    balance = newBalance; 
} 

public Account(String newName, int newId, double newBalance, double newAnnualInterestRate) { 
    name = newName; 
    id = newId; 
    balance = newBalance; 
    annualInterestRate = newAnnualInterestRate; 
} 

public String getName(){ 
    return name; 
} 

public int getId(){ 
    return id; 
} 
public double getBalance(){ 
    return balance; 
} 
public double getAnnualInterestRate(){ 
    return annualInterestRate; 
} 

public void setName(String newName){ 
    name = newName; 
} 

public void setId(int newId){ 
    id = newId; 
} 
public void setBalance(double newBalance){ 
    balance = newBalance; 
} 
public void setAnnualInterestRate(double newAnnualInterestRate){ 
    annualInterestRate = newAnnualInterestRate; 
} 
public Date getDateCreated(){ 
    return dateCreated; 
} 
public double getMonthlyInterestRate(){ 
    return annualInterestRate/12; 
} 
public double getMonthlyInterest(){ 
return (balance*getMonthlyInterestRate()/100); 
} 

public void withdraw(double amount) 
{ 
    balance = balance - amount; 
} 

public void deposit(double amount) 
{ 
    balance = balance + amount; 
} 
} 

Так что я считаю, что все до сих пор является правильным. Но оператор if-else рассматривает все только как неправильные.

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

Я не знаю, нужно ли мне попробовать что-то еще, или если я просто пропустил что-то действительно простое. В любом случае, любая помощь будет оценена!

+1

Возможный дубликат [? Как сравнить строки в Java] (http://stackoverflow.com/questions/ 513832/how-do-i-compare-strings-in-java) –

+0

Чтобы расширить комментарий Майкла: == и equals() делать разные вещи. http://stackoverflow.com/questions/7520432/what-is-the-difference-between-vs-equals-in-java –

ответ

0

сравнения строки с использованием n.equals("Dillen Newton")

+0

Хорошо спасибо за помощь на этом фронте. Скоро обновит основной код, но я все еще получаю неправильные ответы и теперь исключения из операторов if. – TheConfusedMeteor

0

Название вашего вопроса является недостоверным. Ваш вопрос, выраженный в последнем абзаце, касается сравнения строк и не имеет ничего общего с бинарным поиском. Действительно, с этим массивным выражением if-else вы выполняете линейный поиск.

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

EDIT:

class Account implements Comparable<Account> { 
    [...] 

    @Override 
    public int compareTo(Account another) { 
     return name.compareTo(another.getName()); 
    } 
} 

Теперь в своем коде вы можете:

Arrays.sort(accountArray); 
int i = Arrays.binarySearch(accountArray, new Account(name, 0, 0, 0)); 
+0

То, что я пытаюсь сделать, это выбрать учетную запись из массива, чтобы в следующей части я мог начать делать такие вещи, как снятие средств и депозиты и проверка баланса. Линейный поиск или бинарный поиск, необходимый для этого проекта. – TheConfusedMeteor

+0

@ TheConfusedMeteor Ну, в первую очередь бинарный поиск должен выполняться на отсортированных данных. Как указано в Javadoc для [Arrays.binaruSearch] (https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#binarySearch-byte:A-byte-), который вы используете, перед использованием вы должны вызвать _Arrays.sort_ в этом массиве. В любом случае, возможно, вместо массивного if-else вы должны использовать 'Arrays.binarySearch (accountArray, n);' – Koikos

+0

Хм, хотя он делает его намного короче и более управляемым, я все равно получаю ошибку: «Исключение из thread "main" java.lang.ClassCastException: Учетная запись не может быть передана в java.lang.Comparable \t at java.util.Arrays.binarySearch0 (Неизвестный источник) \t at java.util.Arrays.binarySearch (Неизвестный источник) \t в Assignment4.main (Assignment4.java:38) " – TheConfusedMeteor

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

  • Нет связанных вопросов^_^