Массив - это указатель. Различия между * (разыменование) и & amp; (addressof) операторов и когда использовать оба
И подчеркивают, что лучшее (и действительно единственное) реальное место для C в наши дни - это встроенные системы и приложения реального времени, где ресурсы ограничены, а время выполнения является фактор.
Я не очень ценил C как язык, пока не взял класс встроенных микропроцессорных систем, и мы реализовали аппаратное обеспечение, прочитав руководство программиста в руководстве к плате Motorolla Dragonball. Следовательно, если это вообще возможно (что может быть сложно, так как вам понадобится дешевое оборудование), попытайтесь заставить их работать над аналогичными проектами (реализация таблиц UART и векторов прерываний и т. Д.) ...
Поскольку такие вещи, как обработка строк, сортировка и т. Д., Являются игрушечными задачами классической школы, они на самом деле уже не так полезны и расстраивают учащихся, которые знают, что существуют более простые способы. Это намного более полезно для & amp; байт с битовой маской и смотреть, как загорается светодиод.
О, и я никогда не узнал о том, как использовать такие вещи, как gcc в школе, или что на самом деле происходит с make-файлами. Прагматичные программисты говорят, что это полезно знать.
Компилятор жалуется, потому что у вас в настоящее время есть блок if (exist) внутри цикла for. Это должно быть вне его.
for(int i=0;i<this.customers.size();i++){
if(this.customers.get(i).getId() == id){
exist=true;
break;
}
}
if(exist) {
return this.customers.get(id);
} else {
return this.customers.get(id);
}
Тем не менее, есть лучшие способы выполнить этот поиск. Лично, если бы я использовал ArrayList, мое решение было бы похоже на то, что опубликовал Джон Скит.
Customer findCustomerByid(int id){
for (int i=0; i<this.customers.size(); i++) {
Customer customer = this.customers.get(i);
if (customer.getId() == id){
return customer;
}
}
return null; // no Customer found with this ID; maybe throw an exception
}
Лично я сейчас редко пишу циклы, когда мне это сходит с рук ... Я использую общие библиотеки Jakarta:
Customer findCustomerByid(final int id){
return (Customer) CollectionUtils.find(customers, new Predicate() {
public boolean evaluate(Object arg0) {
return ((Customer) arg0).getId()==id;
}
});
}
Ура! Я сохранил одну строчку!
Вам не хватает оператора return, потому что, если размер вашего списка равен 0, цикл for никогда не будет выполняться, поэтому if никогда не будет выполняться, и, следовательно, вы никогда не вернетесь.
Move оператор if вне цикла.
Другие указали на ошибку в вашем существующем коде, но я хотел бы сделать еще два шага. Во-первых, предполагая, что вы используете Java 1.5+, вы можете добиться большей читабельности с помощью расширенного цикла for :
Customer findCustomerByid(int id){
for (Customer customer : customers) {
if (customer.getId() == id) {
return customer;
}
}
return null;
}
Это также устранило микрооптимизацию возврата null
перед циклом - Сомневаюсь, что вы получите от этого какую-то пользу, да и больше кода. Точно так же я удалил флаг exists
: возврат, как только вы узнаете ответ, упрощает код.
Обратите внимание, что в вашем исходном коде я думаю , что у вас была ошибка. Обнаружив, что у клиента с индексом i
был правильный идентификатор, вы затем вернули клиента с индексом id
- я сомневаюсь, что это действительно то, что вы намеревались.
Во-вторых, если ты'