簡體   English   中英

Java-在查找數組的最短字符串方面需要幫助,我與我看到的內容很接近,但出現錯誤,

[英]Java - Need help in finding the shortest string of an array, i'm close from what i see but i'm getting an error,

這是代碼:

    class big
    {
        public static int findSum(String[] args)
        {
            int i = 0;
            int sumArgs = 0;
            for (i = 0; i <= args.length - 1; i++) {
            System.out.println(args[i] + " " + args[i].length());
            sumArgs = sumArgs + args[i].length();
        } 
        return sumArgs;
    }
        public static void main(String[] args)
    {
        int[] coolArray = makeInputCopy(args);
        int smallest = findShortest(coolArray);
        int largest = findLargest(coolArray);
        int sumArgs = findSum(args);
        System.out.println(sumArgs);
        System.out.println("Smallest Number present: " + smallest);
        System.out.println("Largest Number present: " + largest);
    }
       public static String findShortest(String[] array) {

        String shortestSeen = "";

        for (int i = 0; i < array.length; i++) {
            if(array[i].length() < shortestSeen.length()) {
                shortestSeen = array[i];
            }
        }
        return shortestSeen;
    }
    public static int findLargest(int[] array) {

        int largestSeen = 0;

        for (int i = 0; i > array.length; i++) {
            if(array[i] > largestSeen) {
                largestSeen = array[i];
            }
        }
        return largestSeen;
    }

        public static int[] makeInputCopy(String[] input) {

        int[] output = new int[input.length];
        for (int i = 0; i < output.length; i++) {
    }
    return output;
    }
}

該程序最初旨在掃描輸入數組中的字符串,列出每個單詞中的字符數量,然后將所有字符的總和相加,我試圖從該數組中找出最短和最長的字符。

但是,當我調用方法findShortest(coolArray) ,在將int轉換為無字符串能力方面收到錯誤,我無法findShortest(coolArray)原因。

如果可以解釋這一點,我將不勝感激。

 int smallest = findShortest(coolArray);

 public static String findShortest(String[] array) {
   ...

您正在將一個String(findShortest的結果)分配給一個int(最小)。 這無法編譯。

你可能會發脾氣

Main.java:21: error: incompatible types: int[] cannot be converted to String[]
        int smallest = findShortest(coolArray);
                                    ^

這是由於int smallest = findShortest(coolArray); 您正在將字符串分配給不兼容的int。

 int[] coolArray = makeInputCopy(args); int smallest = findShortest(coolArray); // ... public static String findShortest(String[] array) { // ... 

以上兩個問題:

  • coolArray類型為int[] ,但findShortest需要一個String[]
  • smallest的類型為int ,但是findShortest返回一個String

該修復程序似乎很容易:

String smallest = findShortest(args);

但是, findShortest也有一個錯誤:

 public static String findShortest(String[] array) { String shortestSeen = ""; for (int i = 0; i < array.length; i++) { if (array[i].length() < shortestSeen.length()) { shortestSeen = array[i]; } } return shortestSeen; } 

沒有什么比空字符串更短了。 因此,這將始終返回一個空字符串。

為了解決這個問題,你既可以設置shortestSeen到骯臟的東西長,或者你可以跟蹤在一個單獨的可變長度最短,初始化的東西非常多,像這樣:

public static String findShortest(String[] array) {

    String shortestSeen = "";
    int shortestLength = Integer.MAX_VALUE;

    for (int i = 0; i < array.length; i++) {
        if(array[i].length() < shortestLength) {
            shortestSeen = array[i];
            shortestLength = shortestSeen.length();
        }
    }
    return shortestSeen;
}

您對findShortest()的定義需要一個字符串數組; 但是,您傳入的是整數數組。 這導致了你的問題。

好吧,從以上答案來看,這似乎是一個非常容易的修復。 但是我也寫了一個簡短而骯臟的代碼片段來查找字符串數組中最短的代碼,這是代碼:

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Shortest {

    public static void main(String[] args) {

        String[] shortest = { "asd", "abc", "defdfdf", "cy" };

        Map<Integer, String> lengthToString = new HashMap();

        for (String s : shortest) {
            lengthToString.put(s.length(), s);
        }
        System.out.println(lengthToString.get(Collections.min(lengthToString.keySet())));
    }
}

這可能有用,因為我嘗試使用Utility類方法而不是嘗試重新發明輪子。 但是,如果有兩個長度相同的字符串,則只會打印其中一個。

    public static String findShortest(String[] array) {

    String shortestSeen = array[0];

    for (int i = 0; i < array.length; i++) {
        if (array[i].length() < array[0].length()) {
            shortestSeen = array[i];
        }
    }
    return shortestSeen;
}

您必須使用array [0]初始化shortestseen,並且必須進行此測試array [i] .length()<array [0] .length()我在findLargest for循環中看到另一個錯誤:array [i]> maximumSeen

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM