为什么单纯输入数字会报错,带一个字母就不报错


import java.util.Scanner;

public class zhuanHuan_Rome {
    public static void main(String[] args) {
        //输入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符串:");
        String str = sc.next();
        System.out.println(str);


        System.out.println(checkStr(str));


    }

    //判断要求的方法
    public static boolean checkStr(String str) {

        if (str.length() <= 9) {
            for (int i = 0; i <= str.length(); i++) {
                char c = str.charAt(i);
                if (c < '0' || c > '9')
                    return false;
            }
        }

        return true;
    }
}

错误在第 22 行,注意 str.length() 的下标是取不到的,所以是 i < str.length() 而非 <=。

另外,可以用 toCharArray() 方法简化程序:

 
import java.util.Scanner;
 
public class zhuanHuan_Rome {
    public static void main(String[] args) {
        //输入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符串:");
        String str = sc.next();
        System.out.println(str);
 
 
        System.out.println(checkStr(str));
 
 
    }
 
    //判断要求的方法
    public static boolean checkStr(String str) {
 
        if (str.length() <= 9) {
            for (char c : str.toCharArray()) {
                if (c < '0' || c > '9')
                    return false;
            }
        }
 
        return true;
    }
}

望采纳。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7457623
  • 这篇博客也不错, 你可以看下这么好的单链表结构怎么能不会呢?带哨兵位头节点双向循环链表
  • 除此之外, 这篇博客: 还对操作系统的调度算法一知半解?中的 6. 是否会导致饥饿? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 不会

    我们通过一个例子来看看:
    各进程到达就绪队列的时间、需要的运行时间表如下。使用时间片轮转调度算法,分析时间片大小分别是2、5时的进程运行情况。

    在这里插入图片描述

    时间片轮转调度算法:轮流让就绪队列中的进程依次执行一个时间片(每次选择的都是排队在就绪队列队头的进程)

    时间片大小为2(以下括号内表示当前时刻就绪队列中的进程、进程的剩余运行时间)

    在这里插入图片描述

    • 0时刻(P1(5)):0时刻只有P1到达就绪队列,让P1上处理机运行一个时间片
    • 2时刻(P2(4)->P1(3)):2时刻P2到达就绪队列,P1运行完一个时间片,被剥夺处理机,重新放到队尾。
    • 此时P2排在队头,因此让P2上处理机(注意:2时刻,P1下处理机,同一时刻新进程P2到达,如果在题目中遇到这种情况,默认新到达的进程先进入就绪队列)
    • 4时刻(P1(3)->P3(1)->P2(2)):4时刻,P3到达,先插入到就绪队尾,紧接着,P2下处理机也插入到队尾
    • 5时刻(P3(1)->P2(2)->P4(6)):5时刻,P4到达插到就绪队尾(由于P1的时间片还没用完,因此暂时不调度。另外,此时P1处于运行态,并不在就绪队列)
    • 6时刻(P3(1)->P2(2)->P4(6)->P1(1)):6时刻,P1时间片用完,下处理机,重新放回就绪队列,发生调度
    • 7时刻(P2(2)->P4(6)->P1(1)):虽然P3的时间片没用完,但是由于P3只需要运行1个单位的时间,运行完了会主动放弃处理机,因此也会发生调度。队头进程P2上处理机。
    • 9时刻(P4(6)->P1(1)):进程P2时间片用完,并刚好运行完,发生调度,P4上处理机。
    • 11时刻(P1(1)->P4(4)):P4时间片用完,重新回到就绪队列。P1上处理机。
    • 12时刻(P4(4)):P1运行完,主动放弃处理机,此时就绪队列中只剩P4,P4上处理机
    • 16时刻:所有进程运行结束

    时间片大小为5
    在这里插入图片描述

    • 0时刻(P1(5)):只有P1到达,P1上处理机
    • 2时刻(P2(4)):P2到达,但P1时间片尚未结束,因此暂不调度
    • 4时刻(P2(4)->P3(1)):P3到达,但P1时间片尚未结束。发生调度,P2上处理及
    • 5时刻(P2(4)->P3(1)->P4(6)):P4运行结束,同时,P1运行结束。发生调度,P2上处理机
    • 9时刻(P3(1)->P4(6)):P2运行结束,虽然时间片没用完,但是会主动放弃处理机。发生调度
    • 10时刻(P4(6)):P3运行结束,虽然时间片没用完,三十会主动放弃处理机。发生调度
    • 15时刻():P4时间片用完,但是就绪队列为空,因此会让P4继续执行一个时间片
    • 16时刻():P4运行完,主动放弃处理机。所有进程运行完

    如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮状调度算法退化为先来先服务算法,并且会增大进程响应时间。因此时间片不能太大
    另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小

  • 您还可以看一下 陈槐老师的零基础新手入门软件测试必知必会课程中的 软件测试之性能测试小节, 巩固相关知识点