【问题标题】:How do I make a scanner for a char array?如何为 char 数组制作扫描仪?
【发布时间】:2017-08-22 03:16:36
【问题描述】:

比如我该如何做,以便用户可以输入 char 数组的值?

这是我的尝试,但出现语法错误:

    char [] bacteriaStrand = new char[9];
    String bacteria = bac.next();
    bacteriaStrand = bacteria;

到目前为止,这是我的全部代码:

import java.util.Scanner;
public class SodiknBrukDNAAnalysispt3v1
{
    public static void main(String[] args)
    {
        Scanner bac = new Scanner(System.in);
        char [] treatmentStrand = {'T','C','G','A','G','A','G','T','A','T','C','C','C','A','G'};
        char [] bacteriaStrand = new char[9];
        char [] splicedStrand = new char[treatmentStrand.length + bacteriaStrand.length];
        System.out.println("NIH Treatment Splicer v. 1");
        System.out.println(" ");
        System.out.print("Treatment Strand: ");
        for (int t = 0; t < treatmentStrand.length; t++)
        {
            System.out.print(treatmentStrand[t]);
        }
        System.out.println(" ");
        System.out.print("Bacterium Strand: ");
        String bacteria = bac.next();
        bacteriaStrand = bacteria;
        for (int b = 0; b < bacteriaStrand.length; b++)
        {
            System.out.print(bacteriaStrand[b]);
            if (bacteriaStrand[b] != 'A' || bacteriaStrand[b] !='C' || bacteriaStrand[b] !='T' || bacteriaStrand[b] !='G')
            {
                System.out.println("Error! You can only input capital A, C, T, and G.");
            }
        }
    }
}

【问题讨论】:

    标签: java arrays char java.util.scanner


    【解决方案1】:

    如果您想要 char[](原语),您可以使用返回 char[] 的方法。

    src:

    public static char[] toCharArray(String input){
            StringTokenizer stringTokenizer = new StringTokenizer(input, " ");
            char[] chars = new char[stringTokenizer.countTokens()];
    
            for (int i = 0; i < chars.length; i++)
                chars[i] = stringTokenizer.nextToken().charAt(0);
    
            return chars;
        }
    

    实施:

    char[] bacteriaStrand = toCharArray(bacteria);
    

    - 或 -

    如果你的字符串没有分隔:

    *已编辑*

    只需调用 String#toCharArray() 即可轻松实现第二个示例,它返回字符串中字符的副本。 – Obicere

    String string = "STRING";
    char[] chars = string.toCharArray();
    

    谢谢

    【讨论】:

    • 第二个例子可以很容易地通过调用String#toCharArray()来实现,它会返回字符串中字符的副本。
    【解决方案2】:

    您将 String 分配给 Char[],因此它的类型不匹配,要么将 String 分配给 String Array,要么执行 bacteriaStrand=bacteria.toCharArray(); 将 StringbacteriaStrand 转换为 Char[] 细菌。或尝试

    for(int i=0;i<bacteriaStrand.length;i++){
    bacteriaStrand[i]=bac.next().charAt(0);
    }
    

    【讨论】:

    • 上次我检查,没有Scanner#nextChar()方法。
    • 对不起我的错!您可以从 Scanner(input)t 中获取第一个字符:bacteriaStrand[i] = bac.next().charAt(0);
    【解决方案3】:

    这是一个可行的解决方案。

    使用上面的建议 (toCharArray)。 我还添加了 allowedCharacters 列表以便于比较并在处理之前确保长度为 9。

    您可能还想忽略大小写。

    bacteria.toUpperCase().toCharArray();
    

    这会有所帮助

    public class SodiknBrukDNAAnalysispt3v1 {
        public static void main(String[] args) {
            Scanner bac = new Scanner(System.in);
            char [] treatmentStrand = {'T','C','G','A','G','A','G','T','A','T','C','C','C','A','G'};
            char [] bacteriaStrand = new char[9];
            char [] splicedStrand = new char[treatmentStrand.length + bacteriaStrand.length];
            System.out.println("NIH Treatment Splicer v. 1");
            System.out.println(" ");
            System.out.print("Treatment Strand: ");
            for (int t = 0; t < treatmentStrand.length; t++)
            {
                System.out.print(treatmentStrand[t]);
            }
            System.out.println(" ");
            System.out.print("Bacterium Strand: ");
            String bacteria = bac.next();
            if (bacteria.length() != 9) {
                System.out.println("Error! You are expected to input 9 characters");
                return ;
            }
            bacteriaStrand = bacteria.toCharArray();
            List<Character> allowedCharacters = Arrays.asList('A', 'C', 'T', 'G');
            for (int b = 0; b < bacteriaStrand.length; b++) {
                System.out.print(bacteriaStrand[b]);
                if (!allowedCharacters.contains(bacteriaStrand[b])) {
                    System.out.println("Error! You can only input capital A, C, T, and G.");
                    return;
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 2016-06-20
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多