2017-09-26 1 views
1

私は非常に最近、人々が "コーディング"、特にJavaと呼ぶものに入った。 ここに私の小柄な手で作ったものがあります。基本的に、あなたの入力年、そしてそれが何世紀に変換:年を数世紀に変換する - それを改善する/それを実行する

import java.util.Scanner; 

    public class somemaths { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner sc = new Scanner(System.in); 
     System.out.println("Please insert a year:"); 
     int str = sc.nextInt(); 
    int calc1 = (str+99)/100; 

    if (str>0) { 
     System.out.print("This is the " + calc1); 
     int unity = calc1%10; 

     if (unity>=4) 
      System.out.print("th century. I'm sure of it!"); 

     if (unity==3) 
      System.out.print("rd century. I'm sure of it!"); 

     if (unity==2) 
      System.out.print("nd century. I'm sure of it!"); 

     if (unity==1) 
     System.out.print("st century. I'm sure of it!"); 
     } 
    else 
     System.out.print("Please don't input negative numbers :c"); 

    } 
} 

質問は以下のとおりです。

1)Eclipseは、 'SC' は、閉じたことはありませんと言われます。これは何についてですか?

2)コード自体は大丈夫ですか?

3)おそらくこれは私が今までに聞いたことがない最も恐ろしい質問ですが、ダイアログとテキストボックス(いくつかの数字を入力できるボックスなど)でウィンドウを作成してから、別のダイアログウィンドウが表示されますか?前にJOptionPane.showMessageDialogを漠然と聞いたことがありますが、ここでそれを適用する方法はわかりません。

ありがとうございました!

+0

私は理解できません#1 - 'sc' *は閉じていないので、何が問題なのですか? – EJoshuaS

+0

scはスキャナ入力ストリームです。これを開いたままにしてメモリリークを作成します。これはコードレビューの質問のほうが多いようです – andrewdleach

+0

「私はEclipseが「閉じていない」ことを理解していません。私が言ったように、私はこれではかなり新しいので、何が起こっているのか理解できないように聞こえたら私の言い訳をしてください。 " – Staidanom

答えて

2

scScannerの使用入力ストリームので、彼らはそれらを使用するストリームをオープンします

を閉じられることはありません。 scからの最後の入力後に、安全できれいな終了を確実にするために自動的に閉じないので、sc.close()と呼んでください。技術的にはSystem.inなので、悪いことはありませんが、とにかく閉じなければなりません。

コードそのものは簡単ですか?

コードに行くあなたのコードが動作していて、それを効率などの面で改善したい場合は、レビューしてください。しかし、私はあなたがおそらくこのような何かやるべきことを教えてくれます:あなたの目的のために

if (str > 0) { 
    System.out.print("This is the " + calc1); 
    int unity = calc1%10; 
    String century; 
    if (unity == 1) century = "st"; 
    else if (unity == 2) century = "nd"; 
    else if (unity == 3) century = "rd"; 
    else century = "th"; 
    System.out.print(century + " century. I'm sure of it!"); 
else 
    System.out.print("Please don't input negative numbers :c"); 
} 

JOptionPane#showMessageDialog

Official Documentation of javax.swing.JOptionPane

を、あなたはおそらくしたい:

JOptionPane.showMessageDialog(
    null, // This is the parent frame; if unspecified, it will make a new window 
    "the output goes here", // This is the output you want to show to the user 
    "some title" // You can specify the title 
    // This will use the defaults to display a notification (not an error or a confirm) with the default icon. Check the docs for more information 
) 
+0

アドバイスをお願いします。 – Staidanom

3

あなたはすべきより良い答えを得るためにStack Overflowでもう少し質問に集中してください。 1つで3つの質問をすることは、多くのことを期待しています。また、2番目の質問はcode review stack exchangeに適しています。あなたの3番目の質問もかなり広いです。

質問1:あなたはそれで終わったら

スキャナオブジェクトをクローズする必要があります。これを行うには、プログラムの最後にsc.close() に電話してください。

質問2:

あなたの変数名は、彼らが可能性として良いものではありません。コードが「完全」であることを確認したい場合は、単体テストを調べ、包括的なテストスイートを作成して、コードがすべてのケースをカバーするようにする必要があります。例えば。あなたは1980年代のテストケースを持ち、20世紀の正しい出力が保証されます。

質問3:

あなたは、簡単なGUIを作成するためのJavaのSwingになっているはずです。そこにはtutorialsがたくさんあります。

+0

ありがとうございました!実際にはかなり役に立ちました。 – Staidanom

+0

スタック交換へようこそあなたが回答を表示したい場合は(鉱山とHyperNeutrinosの回答のように)、あなたはそれらをupvoteを与えることができますし、 '受け入れられた回答'(目盛りをクリック)として答えをマークすることができます。 – dahui

0

Javaコードを少し修正しました。私は何を変えたのかについていくつかの説明をします。

最初の問題は、scというスキャナオブジェクトのclose()メソッドが正しく呼び出されなかったことが原因です。なぜこれが必須であるのかについては、スタックオーバーフロー(thisなど)に関する他の有益な記事がありますが、あなたのプログラムがどのようにメモリを利用するのか、特にScannerオブジェクトがどのようにそれを利用するのかを理解する必要があります。今のところ、すべてのスキャナーオブジェクトが使用されたら、必ずそれを閉じてください。

if (unity>=4) 
    .... 
if (unity==3) 
    .... 
if (unity ==2) 
    .... 

代わりの団結変数が等しく、あなたがもしelse文またはswitch文のいずれかを使用してすべきかのケースごとにif文を使用して。あなたのプログラムでは、他のif文が実行される可能性は望んでいません。あなたの例では明らかではないかもしれませんが、この種のコードがもっと大きなプロジェクトの中にあったとすると、あなたや他の人は、if文の間で統一変数を​​簡単に変更でき、出力の振る舞いを変えることができます。これは、プログラムを習得しているときに入る良い習慣であり、一度大規模なプロジェクトに取り組むことが重要です。 「今から5年後に誰かが自分のコードを見たら? :)私はまた、一貫した "コーディング標準"に従うことを試みるでしょう。あなたのスペーシングと中括弧を使用するタイミングは一貫しています。これにより、コードがはるかに読みやすくなります。

import java.util.Scanner; 

public class somemaths { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Please insert a year:"); 
     int str = sc.nextInt(); 
     sc.close(); 
     int calc1 = (str+99)/100; 

     if (str>0) { 
      System.out.print("This is the " + calc1); 
      int unity = calc1%10; 

      if (unity>=4){ 
       System.out.print("th century. I'm sure of it!"); 
      } else if (unity==3){ 
       System.out.print("rd century. I'm sure of it!"); 
      } else if (unity==2){ 
       System.out.print("nd century. I'm sure of it!"); 
      } else if (unity==1) { 
       System.out.print("st century. I'm sure of it!"); 
      } else { 
       System.out.print("Please don't input negative numbers :c"); 
      } 
     } 
    } 
} 
関連する問題