首页> Java> java教程> 正文

代码挑战 - 探索电话服务

WBOY
发布: 2024-08-27 20:00:32
原创
937 人浏览过

DIO 부트캠프에서 제가 정말 멋지다고 생각하는 점 중 하나는 트레일 중에 근처에 편집자가 있고 몇 가지 조건이 있는 상태에서 몇 가지 코드 연습을 수행해야 한다는 것입니다. 약간 HackerRank 느낌이 나네요. 이론적 부분에서 얻은 지식을 통합하는 데 도움이 되기 때문에 정말 멋지며 프로젝트 챌린지처럼 더 복잡한 접근 방식이 아닙니다. 논리적 추론과 언어 지식을 테스트하기 위한 더 간단한 것입니다. HackerRank와 마찬가지로 미리 만들어진 일부 조각을 제공하고 이를 기반으로 논리를 개발합니다.

이번 주는 정신없었기 때문에 제가 할 수 있었던 유일한 일은 "전화 서비스 탐색" 모듈에서 제안된 두 가지 과제를 해결하는 것뿐이었습니다. 이번 부트캠프의 스폰서가 Claro이기 때문에 많은 테마가 통신적인 느낌을 가질 것입니다.

계약된 서비스 확인

성명:

통신 사업권자는 이동 전화, 유선 전화, 광대역 및 유료 TV의 네 가지 유형의 서비스를 제공합니다. 고객 서비스를 원활하게 하기 위해서는 특정 고객이 특정 서비스를 계약했는지 확인하는 프로그램의 구현이 필요합니다. 예를 들어 고객이 콜센터에 전화해 서비스를 언급하면 상담원은 해당 서비스가 고객과 계약되었는지 빠르게 확인할 수 있어야 합니다.

금지사항:

두 개의 문자열: 하나는 애플리케이션이 확인할 서비스(예: 모바일, 유선, 광대역, TV)입니다. 두 번째는 고객의 이름과 보유 제품을 쉼표로 구분하여 포함해야 합니다(앨리스, 모바일, 고정)

예상 출력:

고객이 첫 번째 항목에 설명된 서비스에 계약한 경우 애플리케이션에 '예'가 표시되어야 합니다. 그렇지 않으면 '아니오'가 표시되어야 합니다.

예:

입구 퇴장
mobile
앨리스,모바일,고정
고정
밥,모바일,tv
아니요
tv
캐롤,모바일,고정,tv

초기 코드:

으아악

해결:

이것은 비교적 간단한 도전입니다. 애플리케이션은 배열로 변환된 쉼표로 구분된 문자열을 수신하고 그 안에 다른 사용자 입력과 일치하는 문자열이 있는지 확인해야 합니다. 이는 클라이언트가 가지고 있는지 확인하려는 서비스입니다. 쉽죠?

JavaScript와 C# 경력이 있는 저는 검사기 메서드(예: Array.includes() 또는 List.Contains())를 사용합니다. 오른쪽? 틀렸어

Desafio de Código - Explorando Serviços de Telefonia

Java에서는 Array 클래스에 이런 메소드가 없습니다. 이는 구현이 저수준 언어(예: C)에서 발생하는 것과 훨씬 더 유사하기 때문일 수 있으며, 이는 단순하고 효율적인 데이터 구조여야 함을 설정합니다. 분명히 이러한 유형의 쿼리는 이 구조의 필수 기능의 일부가 아닙니다.

이 정보를 발견하고 충격을 받았습니다. Java는 나에게 무엇을 기대합니까?for 루프를 작성하고 각 요소가 내가 찾고 있는 항목과 일치하는지수동으로확인한다는 것인가요? 형제님, 저는 풀타임으로 일하고 2살 미만의 딸이 있고 아직Java를 공부하고 있습니다. 그럴 시간 없어, 친구

하지만 Java 8부터 배열을 목록으로 변환하는 것이 가능하고 여기에는 .contains() 메서드가 있다는 것을 발견했습니다. 따라서 이 문제를 해결하려면 부품 배열을 목록으로 변환한 다음 서비스에서 전달된 문자열이 이 목록 내에 있는지 확인하면 됩니다.
존재하는 경우 Yes를 인쇄하고 그렇지 않으면 No를 인쇄합니다.

으아악

이것으로 연습은 완료되었지만 연구 중에 Java 8부터 JavaScript에 존재하는 것과 유사한 더 간단한 방법과 더 기능적인 접근 방식으로 데이터 컬렉션을 작업하는 데 도움이 되는 추상화가 있다는 것을 발견했습니다. 스트림.

목록과 마찬가지로 벡터를 스트림으로 변환하고 그 안에 있는 요소가 서비스에 전달된 내용과 일치하는지 확인할 수 있습니다.

으아악

우리는 .anyMatch(p -> p == servico) 메소드에 콜백을 전달하여 검사를 수행할 수 있었지만, 이는 p와 servico가 동일한 값을 가질 뿐만 아니라동일한 메모리 주소를 가리키는지 확인합니다. (즉, 실제로 동일한 객체인 경우) 일반적으로 문자열을 처리할 때 이 비교는 값이 동일하더라도 false, 즉 거짓 부정을 반환합니다. 따라서 servico::equals를 사용한 비교가 더 적합합니다. 왜냐하면 두 요소 사이의만 비교하기 때문입니다. 이는 JavaScript의 동등 비교기(==)와 다소 유사합니다.

이번 변경으로 운동이 완료되었다고 판단할 수 있습니다. 이제 남은 것은 테스트를 실행하고 통과하는지 확인하는 것입니다.
Desafio de Código - Explorando Serviços de Telefonia

너무 좋아요.
이 연습은 나에게lambda구문인 Java에 대해 불평할 또 다른 이유를 제공했습니다. 이중 화살표(=>) 대신 단일 화살표(->)를 사용하는 것이 많이 귀찮습니다.


풀 콤보 채용 확인

성명:

통신사 고객이 통합 서비스 계약을 체결했는지 확인하는 시스템을 구현합니다. 완전한 콤보에는 회사가 제공하는 세 가지 주요 서비스인 이동 전화, 광대역 및 유료 TV가 포함됩니다. 시스템은 고객이 계약한 서비스 목록을 읽고 필요한 모든 서비스가 포함되어 있는지 확인해야 합니다. 세 가지 서비스가 모두 존재하는 경우 시스템은 "Complete Combo"를 반환해야 합니다. 서비스 중 하나라도 누락된 경우 시스템은 "불완전한 콤보"를 반환해야 합니다.

금지사항:

고객이 계약한 서비스를 포함하는 문자열이며 쉼표로 구분됩니다. 가능한 값은 모바일, 광대역 및 TV입니다.

예상 출력:

고객이 모든 서비스 계약을 체결한 경우 Complete Combo를 포함하는 문자열, 그렇지 않은 경우 Incomplete Combo를 포함하는 문자열입니다.

예:

입구 퇴장
모바일, 광대역, TV 완전한 콤보
모바일,TV 불완전한 콤보
광대역, TV, 모바일 완전한 콤보

Código inicial:

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(); } }
登录后复制

Resolução:

De novo, esse é um desafio simples. Para chegar no resultado, apenas alguns passos precisam ser seguidos:

  1. Iterar sobre a array gerada pelo método main a partir da string inserida pelo usuário;
  2. Checar se os serviços disponibilizados (descritos nas variáveis booleanas logo acima) foram contratados;
    • Em caso positivo, a variável correspondente deve ter seu valor alterado para true.
  3. Verificar se todos os serviços estão com o valor true. Apesar de ter mais passos, é bem mais direto que o anterior. Podemos começar a resolver esse trem de um jeito bem tosco, com uma série de ifs encadeados:
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:
Desafio de Código - Explorando Serviços de Telefonia

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:
Desafio de Código - Explorando Serviços de Telefonia
O código desses (e dos demais) desafios está aqui.
Então é isso, pessoal. Até a próxima!

以上是代码挑战 - 探索电话服务的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!