在java中创建异常

问题描述 投票:0回答:1

我在运行自定义异常时遇到问题,即使没有异常空间,它也会在运行时抛出异常

import java.util.Scanner;

public class Book 
{
    public String title, author;
    public int publication_year;

    public Book( String title, String author, int publication_year )
    {
        this.title=title;
        this.author=author;
        this.publication_year=publication_year;
    }

    public static void main( String[] args ) throws BookNotFoundException 
    {
        Book b1 = new Book( "the mocking bird", "james polk", 2005 );
        Book b2 = new Book( "the great gatsby", "scott fitzgerald", 1925 );
        Book b3 = new Book( "data science", "john doe", 2009 );

        System.out.println( "enter book title to search any book" );

        String s;
        Scanner sc = new Scanner( System.in );
        s=sc.next();

        Library obj = new Library();

        obj.findBook( s );
    }
}

class BookNotFoundException extends Exception 
{
    BookNotFoundException( String message )
    {
        super( message );
    }
}

class Library
{
    Book ob = new Book( null, null, 0 );

    public void findBook( String bookTitle ) throws BookNotFoundException
    {
        if( bookTitle == ob.title )
        {
            System.out.println("book found");
        }
        else
        {
            throw new BookNotFoundException( "book not found" );
        }
    }
}

在此代码中,即使您输入有效的书名而不是给出输出“找到的书”,它也会引发异常。

java exception output
1个回答
0
投票

您正在搜索

Library
实例来查找给定标题,但
Library
仅包含
Book
的一个实例,且
title
author
设置为
null

无论你输入什么标题,结果总是例外。

您的比较(

bookTitle == ob.title
)对于您可能的预期目的也是不正确的,在这里并不重要:还将检查
String
实例是否有
null
==

您需要将

Book
实例
b1
b2
b3
添加到
Library
实例,并保留它们,
Library
需要某种
Collection
作为成员,例如
private final List<Book> m_Books = new ArrayList<>()
,以及向其中添加书籍的方法,例如

public final void addBook( final Book book ) { m_Book.add( book ); }

当然你现在必须以不同的方式实施

findBook()

public final void findBook( final String title ) throws BookNotFoundException
{
    for( final var book : m_Books )
    {
        if( title.equals( book.title ) )
        {
            System.out.println( "book found" );
            return;
        }
    }
    throw new BookNotFoundException( "book not found" );
}

但是这是您的用例的一个非常幼稚的实现,也缺乏任何类型的错误处理。

了解

Map
,实现
equals()
hashCode()
的要求,
public
private
对于封装意味着什么……

© www.soinside.com 2019 - 2024. All rights reserved.