DIO 부트캠프에서 제가 정말 멋지다고 생각하는 점 중 하나는 트레일 중에 근처에 편집자가 있고 몇 가지 조건이 있는 상태에서 몇 가지 코드 연습을 수행해야 한다는 것입니다. 약간 HackerRank 느낌이 나네요. 이론적 부분에서 얻은 지식을 통합하는 데 도움이 되기 때문에 정말 멋지며 프로젝트 챌린지처럼 더 복잡한 접근 방식이 아닙니다. 논리적 추론과 언어 지식을 테스트하기 위한 더 간단한 것입니다. HackerRank와 마찬가지로 미리 만들어진 일부 조각을 제공하고 이를 기반으로 논리를 개발합니다.
이번 주는 정신없었기 때문에 제가 할 수 있었던 유일한 일은 "전화 서비스 탐색" 모듈에서 제안된 두 가지 과제를 해결하는 것뿐이었습니다. 이번 부트캠프의 스폰서가 Claro이기 때문에 많은 테마가 통신적인 느낌을 가질 것입니다.
통신 사업권자는 이동 전화, 유선 전화, 광대역 및 유료 TV의 네 가지 유형의 서비스를 제공합니다. 고객 서비스를 원활하게 하기 위해서는 특정 고객이 특정 서비스를 계약했는지 확인하는 프로그램의 구현이 필요합니다. 예를 들어 고객이 콜센터에 전화해 서비스를 언급하면 상담원은 해당 서비스가 고객과 계약되었는지 빠르게 확인할 수 있어야 합니다.
두 개의 문자열: 하나는 애플리케이션이 확인할 서비스(예: 모바일, 유선, 광대역, TV)입니다. 두 번째는 고객의 이름과 보유 제품을 쉼표로 구분하여 포함해야 합니다(앨리스, 모바일, 고정)
고객이 첫 번째 항목에 설명된 서비스에 계약한 경우 애플리케이션에 '예'가 표시되어야 합니다. 그렇지 않으면 '아니오'가 표시되어야 합니다.
입구 | 퇴장 |
---|---|
mobile 앨리스,모바일,고정 |
예 |
고정 밥,모바일,tv |
아니요 |
tv 캐롤,모바일,고정,tv |
예 |
这是一个相对简单的挑战。应用程序收到一个以逗号分隔的字符串,该字符串被转换为一个数组,我们需要找出其中是否有一个字符串与另一个用户输入匹配,这就是我们要检查客户端是否有的服务。简单吧?
对于有 JavaScript 和 C# 历史的我来说,只需使用检查器方法(如 Array.includes() 或 List.Contains())。正确的?错了。
在Java中,Array类中没有这样的方法。这可能是因为其实现更接近于低级语言(例如 C)中发生的情况,这规定它们必须是简单且高效的数据结构。显然这种类型的查询不是这个结构的基本功能的一部分。
发现这个信息令人震惊。 Java 期望我做什么?我编写一个for 循环并手动检查是否每个元素都与我要查找的项目匹配?兄弟,我全职工作,我有一个不到两岁的女儿,我还在学习Java。我没有时间做这个,伙计。
但我发现,从 Java 8 开始,可以将数组转换为列表,并且这个列表有 .contains() 方法。因此,要解决这个问题,只需将 parts 数组转换为列表,然后检查服务中传递的字符串是否存在于该列表中。如果存在,我们打印 Yes,否则,我们打印 No。
雷雷
雷雷
相同的内存地址(也就是说,如果它们实际上是同一个对象)。通常,在处理字符串时,即使值相等,此比较也会返回 false,即漏报。因此,使用 servico::equals 进行比较更合适,因为它只比较两个元素之间的值,或多或少类似于 JavaScript 的相等比较器 (==)。
有了这个变化,我们就可以判断练习完成了。剩下的就是运行测试并查看它们是否通过:这个练习给了我另一个抱怨 Java 的理由,那就是
lambda语法。使用单箭头(->)而不是双箭头(=>)让我很困扰。
实施一个系统来验证电信公司的客户是否签订了完整的服务组合。完整的组合包括该公司提供的三项主要服务:移动电话、宽带和付费电视。系统必须读取客户签订的服务列表,并确定是否包含所有必要的服务。如果所有三个服务都存在,系统应返回“Complete Combo”。如果缺少任何服务,系统应返回“Incomplete Combo”。禁止: 包含客户签约服务的字符串,以逗号分隔。可能的值是移动、宽带和电视。 预期输出: 如果客户签订了所有服务合同,则包含 Complete Combo 的字符串,否则包含 Incomplete Combo。 示例:
import java.util.Scanner; public class VerificacaoComboCompleto { // Função para verificar se o cliente contratou um combo completo public static String verificarComboCompleto(String[] servicosContratados) { // Variáveis booleanas para verificar a contratação de cada serviço boolean movelContratado = false; boolean bandaLargaContratada = false; boolean tvContratada = false; // TODO: Itere sobre os serviços contratados for (String servico : servicosContratados) { } // TODO: Verifique se todos os serviços foram contratados if () { return "Combo Completo"; } else { return "Combo Incompleto"; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Solicitando ao usuário a lista de serviços contratados String input = scanner.nextLine(); // Convertendo a entrada em uma lista de strings String[] servicosContratados = input.split(","); // Verificando se o cliente contratou um combo completo String resultado = verificarComboCompleto(servicosContratados); // Exibindo o resultado System.out.println(resultado); // Fechando o scanner scanner.close(); } }
De novo, esse é um desafio simples. Para chegar no resultado, apenas alguns passos precisam ser seguidos:
for (String servico : servicosContratados) { if(servico.equals("movel")) movelContratado = true; if(servico.equals("bandaLarga")) bandaLargaContratada = true; if(servico.equals("tv")) tvContratada = true; }
E preenchemos a condição do nosso if:
if (movelContratado && bandaLargaContratada && tvContratada) { return "Combo Completo"; } else { return "Combo Incompleto";
Assim como no primeiro, com essas adições o desafio pode ser considerado como completo, mas esses ifs, um seguido do outro me incomoda um pouco. Podemos alterar isso pra um switch pra ficar menos feio:
for (String servico : servicosContratados) { switch (servico) { case "movel": movelContratado = true; break; case "banda larga": bandaLargaContratada = true; break; case "tv": tvContratada = true; break; default: System.out.println("Serviço inválido."); break; } }
Há quem diga que os ifs são de mais fácil leitura e que o ganho que a otimização traria para um switch tão pequeno como esse é desprezível. Outros diriam que eu tenho pouca consistência interna, reclamando de checar manualmente strings em um exercício e fazendo sem um pio em outro.
Pra essas pessoas eu digo:
O código final ficaria então:
import java.util.Scanner; public class VerificacaoComboCompleto { // Função para verificar se o cliente contratou um combo completo public static String verificarComboCompleto(String[] servicosContratados) { // Variáveis booleanas para verificar a contratação de cada serviço boolean movelContratado = false; boolean bandaLargaContratada = false; boolean tvContratada = false; for (String servico : servicosContratados) { switch (servico) { case "movel": movelContratado = true; break; case "banda larga": bandaLargaContratada = true; break; case "tv": tvContratada = true; break; default: System.out.println("Serviço inválido."); break; } } if (movelContratado && bandaLargaContratada && tvContratada) { return "Combo Completo"; } else { return "Combo Incompleto"; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Solicitando ao usuário a lista de serviços contratados String input = scanner.nextLine(); // Convertendo a entrada em uma lista de strings String[] servicosContratados = input.split(","); // Verificando se o cliente contratou um combo completo String resultado = verificarComboCompleto(servicosContratados); // Exibindo o resultado System.out.println(resultado); // Fechando o scanner scanner.close(); } }
Que, ao rodar a suite de testes, nos mostra que deu tudo certo:
O código desses (e dos demais) desafios está aqui.
Então é isso, pessoal. Até a próxima!
退出 | |
---|---|
完整组合 | |
不完整的组合 | |
完整组合 |
위 내용은 코드 챌린지 - 전화 서비스 탐색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!