java - 试图传递一个字符串但收到 "null"

标签 java string null return

这可能是我忽略的一个简单错误,但我的问题是当我尝试返回字符串“roman”时,它只返回 null。 这是主程序:

/* CCTPG-22 // Assignment 08: Roman Numerals
 * @author   Kevin R. Trujillo 
 * @version  10/28/2015
 * Purpose:  Converts numbers into roman numerals format and vice-a-versa 
 * Status:   
 */ 

import java.util.*;   // For Scanner 

public class RomanMain
{ 
  public static void main(String[] args) 
  { 

    Scanner in = new Scanner(System.in);

    RomanYear year1 = new RomanYear(1975);
    RomanYear year2 = new RomanYear(1988);
    RomanYear year3 = new RomanYear(2007);

    System.out.println(year1.toString());
    System.out.println(year2.toString());    
    System.out.println(year3.toString());  
    int diff21 = year2.getYearDecimal() - year1.getYearDecimal();
    int diff32 = year3.getYearDecimal() - year2.getYearDecimal();

    RomanYear y2MinusY1 = new RomanYear(diff21);
    RomanYear y3MinusY2 = new RomanYear(diff32);
    System.out.println("Year2 minus Year1 is: " + y2MinusY1.getYearRoman());
    System.out.println("Year3 minus Year2 is: " + y3MinusY2.getYearRoman());


  } 

  // Add new methods here 


} // No code can be here (outside the class)

这是 RomanYear 类:

/**
 * Auto Generated Java Class.
 */
public class RomanYear {

  private int decimal ;
  private String roman ;

 public RomanYear()   // default constructor
  {
  decimal = 0 ;
  roman = "" ;
  }
  public RomanYear(int newYear)
  {
    decimal = newYear ;
    roman = setYearDecimal(decimal);
  }

  public RomanYear(String newYear )
  {
    roman = newYear ;
    decimal = setYearRoman(roman) ;
  }

  public int setYearRoman(String roman)
  {

    String romanNumeral = roman.toUpperCase();
    for(int x = 0;x < romanNumeral.length(); x++)
    {
      char convertToDecimal = roman.charAt(x);
      // first step:  Easy stuff
      switch (convertToDecimal)
      {
        case 'M': decimal += 1000;   break;      
        case 'D': decimal += 500;    break; 
        case 'C': decimal += 100;    break;
        case 'L': decimal += 50;     break;
        case 'X': decimal += 10;     break;
        case 'V': decimal += 5;      break;
        case 'I': decimal += 1;      break;
        }
    }
    // Now adapt for specials
    if (romanNumeral.contains("IV"))
    {
        decimal-=2;
    }
    if (romanNumeral.contains("IX"))
    {
        decimal-=2;
    }
    if (romanNumeral.contains("XL"))
    {
        decimal-=20;
    }
    if (romanNumeral.contains("XC"))
    {
        decimal-=20;
    }
    if (romanNumeral.contains("CD"))
    {
        decimal-=200;
    }
    if (romanNumeral.contains("CM"))
    {
        decimal-=200;
    }
    return decimal ;
   } 

  public String setYearDecimal(int yr)
  {
    if (decimal > 3999)
     {
      System.out.println("Decimal Number: " + decimal + " is over 3999. ") ;
      System.out.println("Please enter a new number") ;
      System.out.println("Program is ending.............") ;
      try {
        Thread.sleep(2000);                 //5000 milliseconds is one second.
          } 
      catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
          }

      System.exit(0) ;
     }

    else
    {
    int digit;
      String roman = "";

      // 1000's column
      digit = yr/1000; 
      for (int i = 0; i < digit; i++)
        roman = roman + "M";
      yr = yr % 1000;   // leaves 0 to 999

      // 100s column
      String [] hunds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
      digit = yr/100;
      roman = roman + hunds[digit];
      yr = yr % 100;   // leaves 0 to 99

       // 10s column
      String [] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
      digit = yr/10;
      roman = roman + tens[digit];
      yr = yr % 10;   // leaves 0 to 9  

      // Ones column
      String [] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
      roman = roman + ones[yr];

    }
    return roman ;
  }

  public int getYearDecimal()
  {
    return decimal ;
  }

  public String getYearRoman()
  {
     return roman ;
  }

  public String toString() 
  {

    System.out.print("Decimal: " + decimal + " as Roman Numerals is " ) ;
    return roman ;
  }

  /* ADD YOUR CODE HERE */

}

如果有人可以解释我做错了什么,那将不胜感激,而不仅仅是发布“正确的方法”。

谢谢!

最佳答案

在 Roman 类的顶部,您创建了一个名为 roman 的变量。

 public class RomanYear {

  private int decimal ;
  private String roman ;

在 setYearDecimal 中,您创建了一个名为 roman 的新变量。该局部变量隐藏了全局变量。

int digit;
String roman = "";

当您执行 roman = roman + "M"; 时,您只是在更新本地 roman 变量。全局的仍然是空的。

您需要做的就是从第二个变量前面删除 String

关于java - 试图传递一个字符串但收到 "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511015/

相关文章:

c# - DataView 的 RowFilter 用于对象类型的 DBNull 值

java - Android 中 String.join 的替代方案?

java - 再次更新 JFrame

php - PHP中删除字符串中与字母、数字、特定符号、汉字不匹配的字符

java - 如何从数组列表中的字符串中删除单词?

sql - 如何使用分析函数填充缺失值?

java - 如何防止错误: null > 0 java

java - 应用程序性能和 CLI

java - 如何在SUSE(Linux)上设置或安装jai插件?

python - 在 python 字典中打印值时的间距