是否可以使用.hasNext以外的其他方法编写此程序?

问题描述 投票:-2回答:2

编写一个要求用户输入字符串的程序。然后要求用户输入索引值(整数)。您将使用字符串类中的charAt()方法来查找并输出该索引所引用的字符。允许用户通过将其置于循环中来重复这些操作,直到用户为您提供一个空字符串。现在意识到,如果我们用错误的值(负值或大于字符串大小的整数)调用charAt方法,将引发异常。添加代码以捕获此异常,输出警告消息,然后继续循环

import java.util.Scanner;

class Main
{
    public static void main(String[] args)
    {
        System.out.println("");
        String s;
        int ind;
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext())
        {
            s=sc.next();
            if(s.length()==0)
                break;
            ind=sc.nextInt();
            try {
                char ch=s.charAt(ind);
                System.out.println("Character is "+ch);
            }
            catch(Exception e) {
                System.out.println("Bad index Error!");
            }
        }
    }
}
java break
2个回答
3
投票

是。您可以依靠赋值评估分配的值。另外,在呼叫Scanner.hasNextInt()之前先呼叫Scanner.nextInt()。喜欢,

System.out.println();
String s;
Scanner sc = new Scanner(System.in);
while (sc.hasNext() && !(s = sc.next()).isEmpty()) {
    if (sc.hasNextInt()) {
        int ind = sc.nextInt();
        try {
            char ch = s.charAt(ind);
            System.out.println("Character is " + ch);
        } catch (Exception e) {
            System.out.println("Bad index Error!");
        }
    }
}

3
投票

有一个错误; sc.next()无法在此代码中返回空字符串。尝试用这种方式编辑它:

while(sc.hasNext()) {
    s = sc.next();
    if(s.length() == 0) {
        System.out.println("Woah, Nelly!");
        break;
    }
    // ...
}

[看是否可以使程序打印“哇,妮莉!”输入空白行或其他任何内容。我不能,并且假设我正确理解了the documentation,则if条件不可能在这里成立(强调我的意思):

取决于定界模式的类型,可能会返回空令牌。例如,模式"\\s+"将不返回空令牌,因为它与定界符的多个实例匹配。分隔模式“ \ s”可能返回空令牌,因为它一次只能传递一个空格。

此模式"\\s+"是默认模式,并且您没有设置其他模式,因此您的扫描仪永远不要返回空令牌。因此对“没有break语句就可以编写此程序的方法”的严格回答是?是:是的,您只需删除if(...) break;代码,它就不会以任何方式改变行为。

但是,这并不是真正解决您的问题的方法,因为它无法为用户提供退出程序的方法。您应使用nextLine()而不是next()允许从用户读取空白行。

© www.soinside.com 2019 - 2024. All rights reserved.