[英]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.