2015-04-10 2 views
0

Im пытается сделать оператор if, поэтому, когда r1 и num равны, он печатает r1, но он просто не печатает. он запрашивает номер продукта, и когда я ввожу его, ничего не печатает. Главное в конце. пожалуйста, покажите мне, что я делаю неправильно?Проблема с if stat

import java.io.*; 
import java.util.*; 
import java.lang.*; 
import java.text.*; 

public class ProductType implements Comparable<ProductType> 
{ 



private String partnum; 
    private double price; 
    private int stock; 

public ProductType (String partnum, double price , int stock){ 

    this.partnum = partnum; 
     this.price = price ; 
     this.stock = stock ; 

    } 

public ProductType(){ 
partnum = "" ; 
price = 0; 
stock = 0; 

} 
public void setNum(String partnum) 
{this.partnum = partnum;} 

public void setPrice(double price) 
{this.price = price ;} 

public void setStock(int stock) 
{this.stock = stock ;} 

public String getNum() 
{return partnum;} 

public double getPrice() 
{return price;} 

public int getStock() 
{return stock;} 

public int compareTo(ProductType otherType) 
{ 
int temp = (this.getNum().compareTo(otherType.getNum())); 
    return temp; 
} 

//object1.compareTo(object2); 
//(function).compareTo.function2; 
public String toString() 
    { 
    String result = "" + partnum + " Price" + price + "Stock" + stock; 
    return result; 
    } 

public static void main(String[] args) 
    { 

    ProductType r1 = new ProductType("1422", 1.00, 2); 
    ProductType r2 = new ProductType("8535", 2.00, 3); 

Scanner in = new Scanner(System.in); 
System.out.print("enter a Product number: "); 
    String num = in.nextLine(); 

if (r1.equals(num)) 
    System.out.print(r1); 


} 

} 
+0

Вы внедрили «Comparable», но в этом случае он не будет использоваться. Вам нужно переопределить «equals» и «hashcode», чтобы делать то, что вы в настоящее время пытаетесь сделать. Вы можете найти несколько примеров для этого в Stackoverflow. И кстати. импортировать только необходимые классы. Я не думаю, что вам нужны все четыре подстановочных импорта. Например, вам никогда не нужно импортировать что-то из «java.lang». Эти классы автоматически импортируются. – Tom

ответ

3

r1 - экземпляр ProductType, а num - строка. Поэтому он никогда не будет равным.

Вы можете проверить значение num экземпляра r1 с помощью num string. Как

if (r1.getNum().equals(num)) 
    System.out.print(r1); 
2

Вы хотели бы сделать следующее?

if (r1.getNum().equals(num)) { 
    System.out.print(r1); 
} 
1

equals() метод сравнивает два объекта на равенство и возвращает истину, если они равны. Метод equals(), предоставленный в классе Object, использует оператор (==) идентификации, чтобы определить, равны ли два объекта. Для примитивных типов данных это дает правильный результат. Однако для объектов это не так.

В вашем случае вы сравниваете ProductType с String, которые никогда не будут равны, следовательно, вы можете попробовать сравнения rq.getNum() с num, который даст вам желающей результат ..

if (r1.getNum().equals(num)) { 
    System.out.print(r1); 
} 
0

при использовании равенства mrthod, мы необходимо убедиться, что оба они являются разными экземплярами одного и того же класса. Методы возвращают значение True, если аргумент не является нулевым и является объектом того же типа и с тем же числовым значением. Поэтому, если вы сравниваете число, как это выглядит в этом случае, вы должны использовать следующее.

if (r1.getNum().equals(num)){ 
     System.out.println(r1); // prints only if equal 
} 
Смежные вопросы