牛客网华为机试#HJ17

错误一:

未读明白题目:题中说是

输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)

这说明是移动的数字长度在两位之内那就是包括两位数字和一位数字,
也就是想A7是合法的。但是自己错认为是只能是两位数字。

错误二

对能输入数据认识不全面,输入的字符串可以是空的也可以是长度为1、2、3、4及以上,但是只考虑了长度大于3和长度为1的情况。

if (s.length()>3 || s.length()==0) 

应该考虑全面,合法的字符包括长度为2和3的

if (s.length()!=3 || s.length()!=2)

不足

未学习到正则表达式,使得代码写得又臭又长

 if (s.length()!=3 || s.length()!=2)
                continue;
            else if(! hashSet.contains(s.charAt(0)))
                continue;
            else if(s.length()==2 && !(Character.isDigit(s.charAt(1))))
                continue;
            else if ( s.length()==3 && (!Character.isDigit(s.charAt(1))) | (!Character.isDigit(s.charAt(2)))) {
                continue;
            }else
                sList.add(s);

以上代码等价于:

if (!s.matches("[WASD][0-9]{1,2}"))
                continue;
            else
                sList.add(s);

给出垃圾的完整代码:


import java.util.*;

public class Main2 {
    public static void main(String[] args) {
        HashSet<Character> hashSet = new HashSet<>();
        hashSet.add('A');
        hashSet.add('D');
        hashSet.add('W');
        hashSet.add('S');

        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] ss = str.split(";");
        ArrayList<String> sList = new ArrayList<>();

        for(String s : ss){
            //if (s.length()>3 || s.length()==0)  这种就是错误的写法容易发生数组越界错误,因为当输入的是长度为2的字符时,
            //下面的第二个else if就发生了月结错误,因此我们要考虑到所有的输入可能,这个字符长度可能是0,1,2,3,4,更多

            if (s.length()!=3 && s.length()!=2)
                continue;
            else if(! hashSet.contains(s.charAt(0)))
                continue;
            else if(s.length()==2 && !(Character.isDigit(s.charAt(1))))
                continue;
            else if ( s.length()==3 && (!Character.isDigit(s.charAt(1))) | (!Character.isDigit(s.charAt(2)))) {
                continue;
            }else
                sList.add(s);
             /*
            if (!s.matches("[WASD][0-9]{1,2}"))
                continue;
            else
                sList.add(s);

              */
        }

        int x=0;
        int y=0;
        int slide = 0;

        for (String sub : sList)
            System.out.println(sub);

        for (String s:sList){
            slide = Integer.parseInt(s.substring(1));
            switch (s.charAt(0)){
                case 'A': x = x - slide;
                    break;
                case 'S':y = y-slide;
                    break;
                case 'W':y = y  + slide;
                    break;
                case 'D':x =x + slide;

            }
        }

        System.out.println(x + "," + y);


    }


}

### 关于牛客网华为第108题的信息 目前在已知的参考资料中,并未提及具体的“华为第108题”的相关内容[^1]。通常情况下,华为题编号范围集中在前几十道题目(如HJ1至HJ30),这些题目涵盖了常见的算法和逻辑问题,例如字符串操作、数组处理、动态规划等[^2]。 如果目标是寻找特定编号较高的题目(如第108题),可能该题目属于较新的更新或者不在公开资料范围内。建议通过以下方式获取更多信息: 1. **访问牛客网官方页面**:登录牛客网并搜索关键词“华为”,查看是否有最新的题目发布。 2. **社区讨论区查询**:许多用户会在论坛或评论区分享自己的解题经验以及遇到的新题目。 3. **模拟测环境**:部分付费会员服务可能会提供更全面的练习资源,包括高编号的题目。 以下是基于常见华为特点推测的一般解题思路框架,适用于大多数类型的编程挑战: #### 常见解题模板 对于未知的具体题目,可以采用通用的方法来分析和解决问题: ```python def solve_problem(input_data): """ 输入参数定义 :param input_data: 用户输入的数据结构 (e.g., 列表, 字符串) :return: 计算后的结果 """ result = None # 数据预处理阶段 processed_input = preprocess(input_data) # 主要逻辑实现 if isinstance(processed_input, list): result = handle_list_logic(processed_input) elif isinstance(processed_input, str): result = handle_string_logic(processed_input) return postprocess(result) def preprocess(data): """ 对原始数据进行清洗或转换 """ pass def handle_list_logic(lst): """ 处理列表形式的任务逻辑 """ pass def handle_string_logic(s): """ 处理字符串形式的任务逻辑 """ pass def postprocess(output): """ 结果后置处理,比如格式化输出 """ pass ``` 此代码仅为示意用途,实际应用需根据具体需求调整函数功能与细节[^4]。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值