【问题标题】:for loop reading only the last valuefor 循环只读取最后一个值
【发布时间】:2015-04-08 11:38:06
【问题描述】:

我的程序中有一个错误,使我的循环只能读取输入字符串的最后一部分。我希望程序计算字符串中每个字符的数量。我不希望答案告诉我如何更有效地存储这些值,而无需重复所有内容 26 次。请回答我在这里提出的问题。对不起,如果这是重复的!我只是不知道要指定什么,因为没有明显的错误。

import java.util.Scanner;

public class stringprogram {
    public static void stringinputmethod()
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a String");
        String strs = scan.nextLine();

        int numa = 0;
        int numb = 0;
        int numc = 0;
        int numd = 0;
        int nume = 0;
        int numf = 0;
        int numg = 0;
        int numh = 0;
        int numi = 0;
        int numj = 0;
        int numk = 0;
        int numl = 0;
        int numm = 0;
        int numn = 0;
        int numo = 0;
        int nump = 0;
        int numq = 0;
        int numr = 0;
        int nums = 0;
        int numt = 0;
        int numu = 0;
        int numv = 0;
        int numw = 0;
        int numx = 0;
        int numy = 0;
        int numz = 0;

        String randaf;

        for(int i=0; i<=strs.length();i++)
        {
            randaf = strs.substring(i);

            if(randaf.equals("a"))
            {
                numa = numa + 1;
            }
            else if(randaf.equals("b"))
            {
                numb = numb + 1;
            }
            else if(randaf.equals("c"))
            {
                numc = numc + 1;
            }
            else if(randaf.equals("d"))
            {
                numd = numd + 1;
            }
            else if(randaf.equals("e"))
            {
                nume = nume + 1;
            }
            else if(randaf.equals("f"))
            {
                numf = numf + 1;
            }
            else if(randaf.equals("g"))
            {
                numg = numg + 1;
            }
            else if(randaf.equals("h"))
            {
                numh = numh + 1;
            }
            else if(randaf.equals("i"))
            {
                numi = numi + 1;
            }
            else if(randaf.equals("j"))
            {
                numj = numj + 1;
            }
            else if(randaf.equals("k"))
            {
                numk = numk + 1;
            }
            else if(randaf.equals("l"))
            {
                numl = numl + 1;
            }
            else if(randaf.equals("m"))
            {
                numm = numm + 1;
            }
            else if(randaf.equals("n"))
            {
                numn = numn + 1;
            }
            else if(randaf.equals("o"))
            {
                numo = numo + 1;
            }
            else if(randaf.equals("p"))
            {
                nump = nump + 1;
            }
            else if(randaf.equals("q"))
            {
                numq = numq + 1;
            }
            else if(randaf.equals("r"))
            {
                numr = numr + 1;
            }
            else if(randaf.equals("s"))
            {
                nums = nums + 1;
            }
            else if(randaf.equals("t"))
            {
                numt = numt + 1;
            }
            else if(randaf.equals("u"))
            {
                numu = numu + 1;
            }
            else if(randaf.equals("v"))
            {
                numv = numv + 1;
            }
            else if(randaf.equals("w"))
            {
                numw = numw + 1;
            }
            else if(randaf.equals("x"))
            {
                numx = numx + 1;
            }
            else if(randaf.equals("y"))
            {
                numy = numy + 1;
            }
            else if(randaf.equals("z"))
            {
                numz = numz + 1;
            }
        }
        System.out.println("a: "+numa +"\nb: "+ numb +"\nc: "+ numc +"\nd: "+ numd +"\ne: "+ nume +"\nf: "+ numf +"\ng: "+ numg +"\nh: "+ numh +"\ni: "+ numi +"\nj: "+ numj +"\nk: "+ numk +"\nl: "+ numl +"\nm: "+ numm +"\nn: "+ numn +"\no: "+ numo +"\np: "+ nump +"\nq: "+ numq +"\nr: "+ numr +"\ns: "+ nums +"\nt: "+ numt +"\nu: "+ numu +"\nv: "+ numv +"\nw: "+ numw +"\nx: "+ numx +"\ny: "+ numy +"\nz: "+ numz);
    }

    public static void main(String[] args)
    {
        stringinputmethod();
    }
}

【问题讨论】:

  • 你查过substring实际上做了什么吗?
  • 这段代码可以通过使用数组或HashMap&lt;Charatcter, Integer&gt;和for循环来缩短95%。
  • 您应该避免创建这么多变量。
  • 不是重复的,只是错误的算法来计算字符串的字符数。

标签: java string for-loop


【解决方案1】:

substring 方法将返回一个从指定索引到字符串末尾的新字符串。你想要的是 String.charAt(index) 它将返回指定位置的字符

【讨论】:

    【解决方案2】:

    substring 返回从给定索引到结尾的字符串部分。由于长于单个字符的字符串永远不会等于单个字符,因此满足任何条件的唯一位置是最后一个字符。除了使用substring(i),您还可以使用substring(i, i+1),或者更好的是charAt(i) - 请注意,它返回的是char 原语,而不是java.lang.String 对象。

    话虽如此,这整个构造有点麻烦。使用Map&lt;Character,Integer&gt; 会容易得多:

    // Initialization:
    Map<Character,Integer> map = new HashMap<>();
    for (char c = 'a'; c <= 'z'; ++c) {
        map.put (c, 0);
    }
    
    // Going over the string:
    for(char c : strs.toCharArray()) {
        Integer i = map.get(c);
        if (i != 0) {
            map.put (c, i + 1);
        }
    }
    

    或者更优化的形式可以使用数组,其中第一个元素表示'a's 的数量,第二个元素表示'b's 的数量,等等:

    // Initialization:
    int[] chars = new int[26];
    for (i = 0; i < chars.length; ++i) {
        chars[i] = 0;
    }
    
    // Going over the string:
    for(char c : strs.toCharArray()) {
        int i = c - 'a';
        if (i >= 0 && i < chars.length) {
            chars[i]++;
        }
    }
    

    【讨论】:

      【解决方案3】:
       randaf = strs.substring(i);
      

      将此行改为

      randaf = strs.substring(i,i+1);
      

      并将for循环更改为i&lt;strs.length()而不等于。

      如果你想缩短程序,你可以这样做。

      int[] counts=new int[26];
      
      for(int i=0;i<strs.length();i++)
      counts[strs.charAt(i)-'a']++;
      

      假设您只想将 'a' 数到 'z'

      【讨论】:

        【解决方案4】:

        好的,所以我在发布此消息后就知道了。无论如何,感谢您的帮助!我只是将substring 的范围更改为读取一个字符,而不是后面的所有字符。

        我仍然没有解决我的长代码的问题,但是嘿,它有效。

        import java.util.Scanner;
        
        public class stringprogram {
            public static void stringinputmethod()
            {
                Scanner scan = new Scanner(System.in);
                System.out.println("Enter a String");
                String strs = scan.nextLine();
        
                int numa = 0;
                int numb = 0;
                int numc = 0;
                int numd = 0;
                int nume = 0;
                int numf = 0;
                int numg = 0;
                int numh = 0;
                int numi = 0;
                int numj = 0;
                int numk = 0;
                int numl = 0;
                int numm = 0;
                int numn = 0;
                int numo = 0;
                int nump = 0;
                int numq = 0;
                int numr = 0;
                int nums = 0;
                int numt = 0;
                int numu = 0;
                int numv = 0;
                int numw = 0;
                int numx = 0;
                int numy = 0;
                int numz = 0;
        
                String randaf;
        
                for(int i=0; i<=strs.length()-1;i++)
                {
                    randaf = strs.substring(i, i+1);
        
                    if(randaf.equals("a"))
                    {
                        numa = numa + 1;
                    }
                    else if(randaf.equals("b"))
                    {
                        numb = numb + 1;
                    }
                    else if(randaf.equals("c"))
                    {
                        numc = numc + 1;
                    }
                    else if(randaf.equals("d"))
                    {
                        numd = numd + 1;
                    }
                    else if(randaf.equals("e"))
                    {
                        nume = nume + 1;
                    }
                    else if(randaf.equals("f"))
                    {
                        numf = numf + 1;
                    }
                    else if(randaf.equals("g"))
                    {
                        numg = numg + 1;
                    }
                    else if(randaf.equals("h"))
                    {
                        numh = numh + 1;
                    }
                    else if(randaf.equals("i"))
                    {
                        numi = numi + 1;
                    }
                    else if(randaf.equals("j"))
                    {
                        numj = numj + 1;
                    }
                    else if(randaf.equals("k"))
                    {
                        numk = numk + 1;
                    }
                    else if(randaf.equals("l"))
                    {
                        numl = numl + 1;
                    }
                    else if(randaf.equals("m"))
                    {
                        numm = numm + 1;
                    }
                    else if(randaf.equals("n"))
                    {
                        numn = numn + 1;
                    }
                    else if(randaf.equals("o"))
                    {
                        numo = numo + 1;
                    }
                    else if(randaf.equals("p"))
                    {
                        nump = nump + 1;
                    }
                    else if(randaf.equals("q"))
                    {
                        numq = numq + 1;
                    }
                    else if(randaf.equals("r"))
                    {
                        numr = numr + 1;
                    }
                    else if(randaf.equals("s"))
                    {
                        nums = nums + 1;
                    }
                    else if(randaf.equals("t"))
                    {
                        numt = numt + 1;
                    }
                    else if(randaf.equals("u"))
                    {
                        numu = numu + 1;
                    }
                    else if(randaf.equals("v"))
                    {
                        numv = numv + 1;
                    }
                    else if(randaf.equals("w"))
                    {
                        numw = numw + 1;
                    }
                    else if(randaf.equals("x"))
                    {
                        numx = numx + 1;
                    }
                    else if(randaf.equals("y"))
                    {
                        numy = numy + 1;
                    }
                    else if(randaf.equals("z"))
                    {
                        numz = numz + 1;
                    }
                }
                System.out.println("a: "+numa +"\nb: "+ numb +"\nc: "+ numc +"\nd: "+ numd +"\ne: "+ nume +"\nf: "+ numf +"\ng: "+ numg +"\nh: "+ numh +"\ni: "+ numi +"\nj: "+ numj +"\nk: "+ numk +"\nl: "+ numl +"\nm: "+ numm +"\nn: "+ numn +"\no: "+ numo +"\np: "+ nump +"\nq: "+ numq +"\nr: "+ numr +"\ns: "+ nums +"\nt: "+ numt +"\nu: "+ numu +"\nv: "+ numv +"\nw: "+ numw +"\nx: "+ numx +"\ny: "+ numy +"\nz: "+ numz);
            }
        
            public static void main(String[] args)
            {
                stringinputmethod();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-01
          • 1970-01-01
          • 2021-05-03
          • 2016-03-03
          • 2021-12-27
          相关资源
          最近更新 更多