找到最大的数字

时间:2018-04-04 04:50:36

标签: java for-loop

在下面显示的代码中,我硬编码返回在for循环中找到的最高int值。

在for循环中,它返回来自"的每个字母数。 myName是popy"如

  • 6

  • 2

  • 3

它应该打印出来" MyName"因为它在每个单词中具有最多的特征。我遇到的问题,我硬编码到maxNo == 6.我应该使用嵌套的forloop还是有一种简化的方法?

public static void main(String[] args) {


    String[] name = "myName is popy".split(" ");
    int maxNo = 0;
    int storeLargestNo = 0;
    String longestWord = "";

    for(int i = 0; i  < name.length; i++){
        maxNo = name[i].length();
        System.out.println("Number of each " +  maxNo);

    //-- **HardCoded** --
        if(maxNo== 6){
            longestWord = name[i];
        }
    }

    System.out.println("longest Name found is " + longestWord);

}

----------------------的解决 ----------------- -----
我已经提出了一个解决方案,我使用ArrayList代替了Collections.max()。通过这样做,它更清洁。

public String longestWord() {

    @SuppressWarnings("all")
    Scanner scanner = new Scanner(System.in);
    System.out.print("Write in a sentence : ");
    String[] userInput = scanner.nextLine().split(" ");
    ArrayList<String> wordsArr2 = new ArrayList<String>();


    String longestWord = "";
    for(int i = 0; i < userInput.length;i++){
        wordsArr2.add(userInput[i]);
    }

    longestWord = Collections.max(wordsArr2);
    return longestWord;
}

5 个答案:

答案 0 :(得分:2)

更正后的代码:

public static void main(String[] args) {

    String[] name = "myName is popy".split(" ");
    int maxNo = 0;
    int storeLargestNo = 0;
    String longestWord = "";

    for(int i = 0; i  < name.length; i++){
        int temp = name[i].length(); 
        System.out.println("Number of each " +  temp);

        if(maxNo < temp){
            maxNo = temp;
            longestWord = name[i];
        }
    }

    System.out.println("longest Name found is " + longestWord);

}

不要使用任何嵌套循环,如果要存储值并将其与单词的前一个长度进行比较,可以使用临时变量,如果它更大,则更改值maxNo并更改longestWord值。

答案 1 :(得分:1)

而不是跟踪最高单词的长度,为什么不保留最长的字符串呢?

public static void main(String[] args) {

    String[] name = "myName is popy".split(" ");
    String longestWord = "";

    for(int i = 0; i  < name.length; i++){
        System.out.println("and its length is " + longestWord.length());

        if(name[i].length() > longestWord.length()){
            longestWord = name[i];
        }
    }

    System.out.println("longest Name found is " + longestWord);
}

此处对if语句的更改可确保更新最长的单词,而不是跟踪实际长度,因为每个单词大小都是未知的。

唯一的问题是没有处理两个相等长度的单词。

答案 2 :(得分:0)

要获得没有硬编码的结果,您可以遵循以下算法:

  1. 初始化maxNo = 0longestWord = ""
  2. 对于数组current中的每个字符串name[],请执行以下操作 一个。 currentLength = current.length()
    湾如果currentLength > maxNo,请设置maxNo = currentLengthlongestWord = current
  3. 这样,您可以避免硬编码。

答案 3 :(得分:0)

你可以尝试类似的东西,

无需在变量中存储最长名称的长度,您可以直接将当前单词的长度与前一个单词进行比较。

    public static void main(String[] args) {

        String[] name = "myName is popy".split(" ");
        String longestWord = "";

        for(int i = 0; i  < name.length; i++){
            if(longestWord.length() < name[i].length()){

                longestWord = name[i];
            }
        }

        System.out.println("longest Name is :" + longestWord);
    }

答案 4 :(得分:0)

<div id="app">
<table>
    <tbody>
      <tr v-for="cat in categories" @click="selectCat(cat)">
        <td><input type="checkbox" :value="cat" v-model="selected" name="" id=""></td>
        <td>{{ cat.code}}</td>
        <td>{{ cat.name }}</td>
      </tr>
    </tbody>
</table>
<button @click="checkData()">Check</button>
</div>