2017-05-25 12 views
1

私は新しいJavaプログラマーです。私は矩形の面積を計算する簡単なプログラムを書いています。矩形の幅と高さを入力しますが、入力する値は何でも問題ありません。面積値は常にゼロを返します。どうすればこの問題を解決できますか?私のことを見てください。Java戻り値が期待通りではない

import java.util.Scanner; 
public class Shape { 
    private int area; 
    private int width; 
    private int length; 
    private String name; 

    public String shapeName() { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter shape name: "); 
    String name = scanner.nextLine(); 
    return name; 
    } 

    public int area() { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter width: "); 
    String width = scanner.nextLine(); 
    System.out.print("Enter height: "); 
    String height = scanner.nextLine(); 
    return this.width * this.length;  
    } 
} 
public class Example1 { 

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

     Shape shape = new Shape(); 
     System.out.println("Shape is " + shape.shapeName()); 
     System.out.println("It's area is " + shape.area()); 
    } 
} 

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

答えて

2

あなたの問題は、あなたのクラス変数への入力を割り当てていないことである。

private int width; 
private int length; 

しかし、あなたの方法のローカル変数へString widthString length

this.widththis.length両方はJava int0に初期化デフォルトであるため、彼らは0あるので、変更されていなかったので、それでラインreturn this.width * this.length;0を返します。

入力をクラス変数に割り当てる必要があります。

public int area() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Enter width: "); 
     width = scanner.nextInt(); 
     System.out.print("Enter height: "); 
     length = scanner.nextInt(); 
     return width * length;  
} 

注:

使用Scanner.nextInt()String戻りますint値の代わりに、Scanner.nextLine()を取得するには、そうでなければ、intに戻って、これらの文字列を解析する必要があります。ここで

+2

私の口から言葉を取った:) –

+0

@arceeを - あなたは長い間に文字列からの入力を変換する必要があります。 Long.parseLong(inputString)はそれを行う必要があります。 –

+1

このサイトには多くの忍者がいます –

0
 String width = scanner.nextLine(); 
    System.out.print("Enter height: "); 
    String height = scanner.nextLine(); 
    return this.width * this.length;  
    } 

ますが、別の変数であり2つの地元の変数、およびプロパティの幅と高さの復帰MUL、の幅を入れています。クラスの形でこのような何かを、地元の新しい変数手段に値を代入

this.width = scanner.nextInt(); 
System.out.print("Enter height: "); 
this.height = scanner.nextInt(); 
return this.width * this.length; 
0

で試してみてください

this.widthとthis.length

が使用されていないので、0

public int area() { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter width: "); 
    this.width = scanner.nextInt(); 
    System.out.print("Enter height: "); 
    this.height = scanner.nextInt(); 
    return this.width * this.length;  
} 
+3

これは動作しません。なぜなら、scanner.nextLine(); Stringを返し、widthはintです。 scanner.nextInt()を使用してください。 –

+0

変更されました。ご意見ありがとうございます。 – PSo

0

を返します。

あなたはこれがあなたの問題の仲間を修正する必要がありこのキーワード

class Shape { 
private int area; 
private int width; 
private int length; 
private String name; 

public String shapeName() { 
Scanner scanner = new Scanner(System.in); 
System.out.print("Enter shape name: "); 
String name = scanner.nextLine(); 
return name; 
} 

public int area() { 
Scanner scanner = new Scanner(System.in); 
System.out.print("Enter width: "); 
int width = scanner.nextInt(); 
System.out.print("Enter lengtht: "); 
int length = scanner.nextInt(); 
this.width = width; 
this.length=length; 
return this.width * this.length;  
} 
} 
0

を使用してグローバル幅変数を初期化する必要があります!

public int area() { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter width: "); 
    int width = Integer.parseInt(scanner.nextLine()); 
    this.width = width; 
    System.out.print("Enter height: "); 
    int height = Integer.parseInt(scanner.nextLine()); 
    this.height = height; 
    return this.width * this.length;  
    } 
0

使用このコードはまた、

public double area(){ 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter width: "); 
    int width = scanner.nextInt(); 
    System.out.print("Enter height: "); 
    int height = scanner.nextInt(); 
     double d=width*height; 
    return d;  
    } 
関連する問題