【问题标题】:Counting upper-case characters in array with strings用字符串计算数组中的大写字符
【发布时间】:2018-02-23 05:27:25
【问题描述】:

所以我试图用字符串计算数组中大写字符的数量。我在这里的一堵砖墙。如果有人能对我的问题有所了解,那就太好了。

我假设仅使用 Character.isLowerCase(item) 也可以完成相同的循环,对吗?

完成后我还要告诉用户数组中最长的字符串以及最长的字符串有多少个字符,我真的不知道该怎么做。

教授真的用这个给我们扔了一个曲线球..

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

// Program3.java
// Brandin Yoder
// 2/23/18
// Store strings in an array and tell user number of upper-case and lower-case characters,
// and spaces
import java.util.Scanner;


public class Program3
{
  public static void main(String[] args)
  {
   // Set up keyboard.
   Scanner keyboard = new Scanner(System.in);

   // Input number of strings to store.
   System.out.print("Number of strings to input:  ");
   int nrStrings = keyboard.nextInt();

   // Clear keyboard buffer.
   keyboard.nextLine();

   // Set up array to hold strings.
   String[] strings = new String[nrStrings];

   // Input strings from keyboard.
   System.out.println("\nInput strings:");

   for(int ctr = 0; ctr < nrStrings; ctr++)
   {
     System.out.print("String #" + (ctr+1) + " :");
     strings[ctr] = keyboard.next();
   }

   // Print back strings input.
   System.out.println("\nStrings input:");

   for(int ctr = 0; ctr < nrStrings; ctr++)
   {
     System.out.println("String #" + (ctr+1) + ":  " + strings[ctr]);
   }

   // Set up variables for upper-case, lower-case and white space calculator.
   int UpperNr = 0;
   int LowerNr = 0;
   int Spaces = 0;

   // For loop that determines amount of Upper-Case numbers.
   for(int ctr = 0; ctr < nrStrings; ctr++)
   {
     char item = strings[ctr].charAt(ctr);

     if(Character.isUpperCase(item))
     UpperNr++;
   }

   System.out.println(UpperNr);
 }
}

【问题讨论】:

  • 你有什么问题?
  • 这听起来像是一项旨在教授问题分解的作业。首先考虑一个字符串。你能构建一个从读取输入中获取单个字符串的函数吗?你能建立一个函数来计算单个字符串中的大写吗?让这些工作起来,那么这个字符串数组的问题就很容易了。
  • 在遍历最后一个循环之前,为 maxLength 创建两个变量,为 maxLength 元素的索引创建另一个变量
  • 顺便说一句,char item = strings[ctr].charAt(ctr); 不正确 - 您需要(基于此代码)嵌套的 for 循环。外部循环将读取字符串,inner 循环将读取 that 字符串 的字符
  • 可怕的袋熊,非常感谢您的帮助。非常感谢嵌套的 for 循环!

标签: java arrays string


【解决方案1】:

您需要创建变量来保存最后要打印的数据。在这种情况下,您需要维护一个数组,其中包含每个字符串的大写字母数量以及最长字符串的索引和长度。您必须使用嵌套的 for 循环来遍历您拥有的字符串数组以及字符串本身,以检查您拥有多少个大写字符。我已在下面修改/注释了您代码的最后一部分。

   //array that contains number of uppercase letters in each string
   int[] upperAmount = new int[nrStrings];
   //index of the longest string
   int maxLenIndex = 0; 
   //length of longest string
   int maxLength = 0; 

   //array that iterates through all the strings in the array strings[]
   for(int i = 0; i<strings.length;i++){
     //if the new string is the longest 
     if(strings[i].length() > maxLength){
       //set maxlength to the new length and record index of string
       maxLength = strings[i].length();
       maxLenIndex = i; 
     }
   // For loop that determines amount of Upper-Case numbers.
      for(int ctr = 0; ctr < strings[i].length(); ctr++)
      {
         char item = strings[i].charAt(ctr);
         if(Character.isUpperCase(item))
           UpperNr++;
      }
      //add number of uppercases to upperAmount array indexes will be the same
      upperAmount[i] = UpperNr; 
      //reset upper number
      UpperNr = 0; 
   }

   // Print back strings input.
   System.out.println("\nStrings input:");

   for(int ctr = 0; ctr < nrStrings; ctr++)
   {
     System.out.println("String #" + (ctr+1) + ":  " + strings[ctr]);
     System.out.println("Number of Uppercase Letters: " + upperAmount[ctr]);
   }

   System.out.println("MaxStringLength: " + maxLength);
   System.out.println("Max String: " + strings[maxLenIndex]);

  }

【讨论】:

    【解决方案2】:

    希望能解决你的问题

    //after you finish printing the strings
               String strMax="";
               int ctr=0;
               for(String str :strings ){
                   strMax = str.length()>strMax.length()?str:strMax;
                   if(!str.equals(str.toLowerCase())){
                       for(char c : str.toCharArray()){
                           if(Character.isUpperCase(c))
                               ctr++;
                       }
                   }
               }
               System.out.println("Longeset String"+strMax );
               System.out.println("total Upper case chars" +ctr);
    

    【讨论】:

      【解决方案3】:

      是否需要输入字符串个数?我认为您可以接受一个完整的字符串并将其转换为字符数组 char[] charArray = acceptedString.toCharArray; 然后扔掉所有字符,charArray[n] &gt; 64 &amp;&amp; charArray[n] &lt; 91 增加你的变量来计算大写字母。希望你能理解)如果你有问题,请询问。

      Scanner keyboard = new Scanner(System.in);
      String inString = keyboard.nextLine();
      
      char[] symbol = inString.toCharArray();
      
      int count =0;
      
      for(int i =0; i < symbol.length; i++){
        if(symbol[i] > 64 && symbol[i] < 91){ //cause every char has its own number in Unicode. 'A' = 65 and 'Z' = 90
          count++;
        }
      }
      
      System.out.print(count);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 2020-08-28
        • 2013-08-10
        • 2018-04-20
        • 2011-10-02
        • 2021-01-24
        • 2020-01-04
        相关资源
        最近更新 更多