• ベストアンサー

Javaのクラス作成について。

現在、Javaで新規クラスを作成しています。 「String型の変数を受け取ってトリミングしてString型で返す」と言うプログラムを作成したいのですが、なかなかうまくいきません。 現在、考えているのは --- Trimming.java --- public class Trimming{ String new_id; public String TrimmingId(String id){ id = new_id; String idtrim = new_id.trim(); idtrim = id; return id; } } --- Test.java --- class Test{ public static void main(String[] args) { String id = " Trimming "; Trimming ID = new Trimming(); System.out.println(ID.TrimmingId(id)); } } --- 現在、出ているエラーは Exception in thread "main" java.lang.NullPointerException at Trimming.TrimmingId(Trimming.java:6) at Test2.main(Test2.java:6) です。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

--- Trimming.java --- 01:public class Trimming{ 02: String new_id; 03: 04: public String TrimmingId(String id){ 05:  id = new_id; 06:  String idtrim = new_id.trim(); 07:  idtrim = id; 08:  return id; 09: } 10:} --- Test.java --- 01:class Test{ 02: public static void main(String[] args) { 03:  String id = " Trimming "; 04:  Trimming ID = new Trimming(); 05: 06:  System.out.println(ID.TrimmingId(id)); 07: } 08:} Trimming.javaの5行目では、もらった引数idに、 自身で元々持っているnew_idを代入してしまったので、 この時点でもらった引数は失われています。 new_idは宣言されたまま何も値を入れていないので内容はnullであり、 new_id.trim()の呼び出しはNullPointerExceptionになります。 代入式の右辺と左辺がやりたいことの逆になっていませんか? それ以降の行を見ても、そんな感じがします。 ちなみにTrimming.javaがなくても、Test.javaだけで十分かと思います。 --- Test.java --- 01:class Test{ 02: public static void main(String[] args) { 03:  String id = " Trimming "; 04://  Trimming ID = new Trimming(); 05: 06://  System.out.println(ID.TrimmingId(id)); 07:  System.out.println(id.trim()); 08: } 09:} ただtrim結果を表示できればいいだけでなく、 あえてTrimmingを使って結果を保持したいのであればこうでしょう。 --- Trimming.java --- 01:public class Trimming{ 02: String new_id; 03: 04: public String TrimmingId(String id){ 05:/* 06:  id = new_id; 06:  String idtrim = new_id.trim(); 07:  idtrim = id; 08:  return id; 09:*/ 10:  if(id == null) { 11:   new_id = null; 12:  } 13:  else { 14:   new_id = id.trim(); 15:  } 16:  return new_id; 17: } 18:} 10行目でこのような判定をするのは、例外発生を防ぐためです。 TrimmingIdメソッドの立場からすれば、渡された引数idがnullでない保証はないわけで、 うっかりそのままid.trim()を実行すればやはりNullPointerExceptionとなってしまうので、 事前にチェックする必要があるというわけです。

soccerjava
質問者

お礼

詳しい説明までしていただいてありがとうございました! 分けのわからない勘違いをしていたようです。 今後も機会があればよろしくお願いします。

その他の回答 (1)

回答No.1

id = new_id; ↑何のためにこの処理が必要ですか? 引数で受け取ったIDに初期化されていないnew_idを代入し、そのnew_idに対して操作すれば当然ぬるぽになりますよね。 public String TrimmingId(String id){ return id.trim(); } だけでいいのでは?

soccerjava
質問者

お礼

ありがとうございました。 かなり分けのわからない勘違いをしていたようです。

関連するQ&A

  • java.lang.NullPointerException

    java初心者です。 ******************************************* Exception in thread "main" java.lang.NullPointerException at Region2.<init>(Region2.java:7) at Region2.main(Region2.java:11) ******************************************* というエラーで困っています。 ソースは、 ******************************************* import java.io.*; public class Region2 {  public Test[] t = new Test[10];  public Region2(){   t[0].x = 1;//ココ   System.out.println(t[0].x);  }  public static void main(String[]args){   Region2 reg = new Region2();//ココ   System.out.println(reg.t[0].x);   System.exit(0);  } } class Test{  public int x;  public Test (int x){//xをセット   this.x = x;  }  public void Show () {//xを表示   System.out.println(x);  } } **************************************** 見ての通りのプログラムで、あまり意味のないものですが、オブジェクトの配列の動作をテストしています。でずが、「ココ」とコメントしたところでたたかれてしまいます。私は恥ずかしながら「え?何でダメなの?」という感じです。 何がいけないのか、もしくはどうすれば、 1 1 と表示されるか、どなたかアドバイスください。

    • ベストアンサー
    • Java
  • javaでscalaのクラスを使う

     Scala初心者です^^  Scalaで作ったクラスをJavaで使おうとしています.  しかしなかなかうまくいかなくて…  ソースを下に書いておきます. [ap/hello.scala] class hello(str2: String){ val str = str2 def say(){ println(str) } } [ap/start.java] public class start{ public static void main(String[] args){ hello h = new hello("Hello!"); h.say(); } }  helloクラスのコンストラクタを用いて指定した文字列を helloクラスのsayメソッドで標準出力するだけの簡単なクラスなのですが, うまく実行できず… Exception in thread "main" java.lang.NoClassDefFoundError: ap/start/class Caused by: java.lang.ClassNotFoundException: ap.start.class at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Kazus-MackBookPro:ScalaLearning macuser$ java ap/start Exception in thread "main" java.lang.NoClassDefFoundError: ap/start (wrong name: start) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) というエラーが出てしまいます.    どこが悪いかわかる方いらっしゃいませんか?  それとも,JavaではScalaで作った.classファイルは使うことができないのでしょうか?  Scalaはまだ覚えて2週間なので,まだ完全に理解できていません><    よろしくお願いします

  • コンパイルエラー(匿名クラス)

    下記ソースがコンパイルエラーを起こしてどうしたらよいか分かりません。 下記エラー参照 Main.java:2: 型の開始が不正です。 new String(){ ^ Main.java:6: <identifier> がありません。 };ん。 (下記ソース) class NormalClass{ new String(){ public String ToString(int n){ return n + ""; } }; } class Main{ public static void main(String args[]){ NormalClass test = new NormalClass(); System.out.println(test.ToString(10)); } }

    • ベストアンサー
    • Java
  • Javaでエラーになります。

    import javafx.application.*; import javafx.stage.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.*; public class Sample2 extends Application { private Label lb; public static void main(String[] args) } launch(args); } public void start(Stage stage)throws Exception {   //コントロールの作成 lb = new Label(); //コントロールの設定 lb.setText("いらっしゃいませ。"); //ペインの作成 BorderPane bp = new BorderPane( ); //ペインへの追加 bp.setCenter(lb); //シーンの作成 Scene sc = new Scene(bp, 300 ,200); //ステージへの追加 stage.setScene(sc); //ステージの表示 stage.setTitle("サンプル"); stage.show(); } } 上記のコードで下記のエラーが出ます。 何処がおかしいのでしょうか? Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: Stage at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) Caused by: java.lang.ClassNotFoundException: Stage at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more こんな感じです。 何処がおかしいのでしょうか? ご多忙中すいません。 ご回答のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • java

    コンパイルできても、実行ができません。 次のようなエラーがでます。 このエラーはどのようなエラーなのでしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: test コードはただたんにHello JAVA と表示させるだけです。 class Test{ public static void main(String args[]){ System.out.println("Hello Java\n"); } }

    • ベストアンサー
    • Java
  • C++で、クラスの受け渡しを行いたい

    C++を現在勉強中です。 java は少しだけわかるのですが、 以下のjavaのコードをC++で実現する方法が わかりません。 ------------------------------------------- class test2 { private test2() { } public test2(String hoge) { } } class test1 { private void method1(test2 t2) { } public static void main(String[] args) { test1 t1 = new test1(); } } ------------------------------------------- ようは、test2クラスのデフォルトコンストラクタを不可視にしておきながら、呼び出し側でどのように定義すればよいのかがわかりません。 どなたか回答お願いします。

  • Java Compilerクラスについて

    import java.lang.Compiler; //http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Compiler.html class Compile{ public static void main(String[] args) throws ClassNotFoundException{ Compiler com = null; System.out.println( com.compileClass("testCompile"); } } class testCompile{ public static void main(String args[]){ System.out.println("O========K========!!!"); } } Compilerクラスの使用方法がいまいちわかりません。 上記のクラスの間違いを指摘していただきたいです。

    • ベストアンサー
    • Java
  • [JAVA]ProcessBuilderで「java -version」を実行できない

    以下のプログラムで「java -version」を実行しようとするとエラーになります。「java」だけですと実行できますが「-version」をつけるとエラーになります。 ---プログラムの内容--- import java.io.*; public class test4518 { public static void main(String[] args) throws Throwable{ ProcessBuilder pb = new ProcessBuilder(new String[]{"java -version"}); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } ーーーエラーの内容ーーー Exception in thread "main" java.io.IOException: CreateProcess: "java -version" error=2 at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) at java.lang.ProcessBuilder.start(Unknown Source) at test4518.main(test4518.java:5)

    • ベストアンサー
    • Java
  • javaでメインクラスが見つからないエラーが出てしまいます。

    javaでメインクラスが見つからないエラーが出てしまいます。 やさしい簡単なプログラム class test { public static void main(String[] args) { System.out.println("Viva!"); } } をjavacでクラスファイルを作った後に(ここまではできます)java test.class を行うと could not find the main class というエラーが出てしまいます。 教科書の通りにjdkをインストールして、パスを環境変数に通して、コマンドプロンプトでコンパイルしかしていません。 なにが悪いんでしょうか?

    • ベストアンサー
    • Java
  • Javaでタイマーの使い方

    Javaでタイマーの使い方作り方がわかりません import javax.swing.Timerこれつかいます。 package Test1; import javax.swing.Timer; public class Test1 { Timer TM = new Timer(10, null); public static void main(String[] args) { } } よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう