簡體   English   中英

為什么我的解析不起作用?

[英]Why my parsing doesn't work?

我被要求做我的作業,以制作一個程序,其中用戶輸入1-10之間的羅馬數字並輸出十進制等效值。 由於我將在輸入中得到一個字符串,而在輸出中得到一個整數,因此我對其進行了解析,但是它不起作用。 有什么想法嗎?

import java.util.Scanner ;

class Romans {

    static Scanner s = new Scanner(System.in) ;
    static String val = null ;

    public static void main (String [] args)
    {
        System.out.print ("Enter a roman numeral between I to X: ");
        String val = s.nextLine();

        int e = Integer.parseInt(val);
    }
    static int getRoman (int e)
    {
        if (val = "I"){
            System.out.print ("1") ;
        }else if (val = "II" ){
            System.out.print ("2") ;
        }else if (val = "III") {
            System.out.print ("3") ;
        } else if (val = "IV") {
            System.out.print ("4") ;
        } else if (val = "V"){
            System.out.print ("5");
        } else if (val = "VI") {
            System.out.print ("6");
        } else if (val = "VII") {
            System.out.print ("7");
        } else if (val = "VIII") {
            System.out.print ("8");
        } else if (val = "IX") {
            System.out.print ("9");
        } else if (val = "X") {
            System.out.print ("10") ;
        }
        return val ;
    }
}

兩點:

  • =是賦值運算符,而不是相等性測試運算符( ==
  • 無論如何,您都不應該使用==來測試字符串是否相等,因為它只會測試引用相等。 使用equals來測試兩個字符串引用是否引用相等 (但可能不同)的字符串對象。

此外,你試圖返回一個String變量作為int 你甚至不叫getRoman ...

我認為我們可以告訴您,比較字符串的正確方法是使用equals()。

您正在做分​​配,比較必須使用==的基本類型,比較String的equals方法。

例:

如果(val.equals(“ I”))

但是方法getRoman()中也沒有val。

您試圖將val解析為一個int,但不是,它解析為一個字符。

對於這么小的char樣本,可能最簡單的方法是簡單地創建一個查找表,並在char上建立索引。

您有任何錯誤嗎?

在您的代碼中,您永遠不會調用getRoman函數。 另外,例如,您使用賦值運算符=而不是比較運算符“ I” .equals(val)。

字符串比較應使用equals(String str)方法完成,而不要使用==比較。 PS。 無論如何,您有=而不是==

以下語句是一個分配:

val = "I"

那絕對不是您想要在這里做的。

比較是使用double equals完成的,但是double equals( == )將比較引用,但您也不想在此進行。

您要使用equals方法。

if (val.equals("I")) ...

隨時隨地進行更改,看看它如何為您工作。

實際上,您的主要麻煩來自字符串比較。 在Java中,=表示將值分配給變量,==表示比較原始類型的值,而equals是比較對象(尤其是字符串)的方式。

使用equals的替代方法是使用JDK內部字符串池,在這種情況下,可以使用==作為比較器。

在解析羅馬語言數字的情況下,您還可以考慮使用哈希圖來有效存儲和檢索數字的解析值。 如果您要進行成千上萬次這樣的比較,請使用identityhashmap。

最后,如果您想對所有羅馬數字進行真正的解析,而不僅僅是第一個,那么您應該考慮使用自動機,即狀態機以某種遞歸的方式解析數字,這將是更有效的模型。適用於您的問題。

后2個注釋更側重於軟件算法,前兩個注釋更側重於Java語法。 在進行更高級別的優化之前,您應該開始了解語法。

問候,斯特凡

除了上面所說的有關String比較應如何使用equals(...)函數的內容外,例如,

if ( val.equals("VII") )

您還需要為函數提供一個名為getRoman的返回值。 該函數被聲明為向調用者返回整數值的函數,但是在您提供的實現中,沒有返回值(僅System.out.println(...))。

另外,您沒有輸入正確的參數類型-從外觀上看,您的函數正在檢查字符串以查看其是否為某個羅馬數字。 因此正確的函數標頭應如下所示:

public static int getRoman(String val)

另外,請確保您實際上在main()中調用此函數-從現在的樣子看,您甚至沒有使用getRoman()函數。

希望這可以幫助!

暫無
暫無

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

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